надеюсь, кто-то может помочь.
В моем VBA есть следующая строка:
Selection.GoTo What:=wdGoToComment, Which:=wdGoToNext, Count:=1, Name:=Last_chosen
Last_chosen - это имя автора, взятое из раскрывающегося списка в пользовательской форме, а debug.print показывает, что оно правильно считывается в макрос.
Проблема в том, что поиск работает нормально несколько раз, а затем по какой-то причине находит комментарий, принадлежащий другому автору. Даже если дальше по документу есть еще комментарии от автора Last_chosen. И как только это происходит, он продолжает находить неправильные комментарии, иногда от нескольких авторов, даже если Last_chosen не изменился с исходного требуемого автора.
Я пытался скрыть комментарии некоторых авторов в Review | Показать разметку | Рецензенты на случай, если возникнет сбой (?), Когда Word определяет автора, но VBA по-прежнему иногда находит неправильный комментарий, предполагая, что сбоя нет.
Спасибо всем.
Вот весь код.
Public Last_chosen As String
Public Form_chosen As Integer
'****************
Sub Next_chosen_comment()
'This is where the user first specifies a new author
'to search for their next comment
Dim Re_peat As String
'Dim Cho_sen As String
Re_peat = "N"
'Cho_sen = ""
Last_chosen = ""
Call Next_chosen(Re_peat, Last_chosen)
End Sub
'****************
Sub Repeat_search_next()
'This is where the user repeats the same search
'i.e. jumps to the next comment of the same author
'without having to choose again from the dropdown
'via the Next_chosen_comment() macro
Dim Re_peat As String
'Dim Cho_sen As String
Debug.Print Last_chosen
Re_peat = "Y"
'Cho_sen = Last_chosen
'Call Next_chosen(Re_peat, Cho_sen)
Call Next_chosen(Re_peat, Last_chosen)
Re_peat = "N"
End Sub
'****************
Sub Next_chosen(Repeat_nxt As String, Last_chosen As String)
If ActiveDocument.Comments.Count < 1 Then
MsgBox "There are no comments.", vbOKOnly, "********NO COMMENTS********"
Exit Sub
End If
Debug.Print "Repeat_nxt: " & Repeat_nxt
If Repeat_nxt = "Y" Then ' If this is a repeat search (called from Repeat_search_next() macro)
GoTo Repeat_next
End If
Comment_dropdown.Show 'Not a repeat search
'so show the userform containing the 8 dropdown values
If Form_chosen = -1 Then 'Cancelled userform
Exit Sub
End If
Select Case Form_chosen 'Set the author to look for
Case 0
Chosen = "Contractions"
Case 1
Chosen = log_words"
Case 2
Chosen = "US_to_UK"
Case 3
Chosen = "Other"
Case 4
Chosen = "Spaces"
Case 5
Chosen = "Ampersand"
Case 6
Chosen = "Duplicate"
Case 7
Chosen = "Style"
End Select
Last_chosen = Chosen 'Sets Last_chosen from the dropdown
'in case user wants to subsequently repeat the same find
'using the Repeat_search_next() macro
Repeat_next:
Debug.Print "Last_chosen: " & Last_chosen
Selection.GoTo What:=wdGoToComment, Which:=wdGoToNext, Count:=1, Name:=Last_chosen
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
End Sub
'*****************Userform****************
Private Sub UserForm_Initialize()
With Drop_down
.AddItem "Contractions"
.AddItem "-log words"
.AddItem "US to UK changes"
.AddItem "Other changes"
.AddItem "Multiple spaces"
.AddItem "Ampersands"
.AddItem "Duplicate paragraphs"
.AddItem "Non-RFP styles"
End With
End Sub
'****************
Private Sub OK_btn_Click()
Form_chosen = Drop_down.ListIndex
Unload Me
End Sub
'****************
Private Sub Cancel_btn_Click()
Form_chosen = -1
Unload Me
End Sub
Last_Chosen
- это имя, которое присутствует, но не выбрано, и, однажды убедившись, что не выбрано было выбрано, придерживается этого убеждения. Есть две возможные причины такого поведения. Во-первых, в Word есть ошибка, из-за которой свойствоName
комментариев связано с неправильными комментариями. Это кажется маловероятным, потому что комментарии представляют собой коллекцию, и любое смешение свойствName
коллекций будет очевидно и в другом месте. - person Variatus   schedule 04.05.2017Last_Chosen
присваивается ее значение. Эта возможность требует изучения всего вашего кода. Я говорю «целиком», потому что вы уже везде искали. Поэтому можно с уверенностью предположить, что такая ошибка скроется там, где вы не ожидали ее найти. Теперь, если вы предпочитаете думать, что первая причина - это причина, мы ничем вам не поможем. А если вы хотите рассмотреть вторую возможность, включите нашу помощь, добавив свой код в свой вопрос. - person Variatus   schedule 04.05.2017Name
для поиска ограничивает поиск именем автора? Я исследовал этот момент и обнаружил, что MSDN не совсем ясно об этом. В любом случае, у вас осталась та же проблема после изменений? Можете ли вы подтвердить, что критерий поиска - имя или дубликат - нигде не встречается в тексте комментариев? - person Variatus   schedule 05.05.2017