2015-07-27 2 views
0

У меня возникла проблема с созданием макроса Microsoft Word. Вот макрос, над которым я работаю. Он успешно выбирает каждую отдельную таблицу в текстовом документе.Microsoft Word VBA - выберите таблицу, если ячейка содержит указанную строку

Sub FindSpecificTables() 
    Selection.WholeStory 

    Dim iResponse As Integer 
    Dim tTable As Table 

    'If any tables exist, loop through each table in collection. 
    For Each tTable In ActiveDocument.Tables 
     tTable.Select 
     If response = vbNo Then Exit For 'User chose to leave search. 
    Next 
    MsgBox prompt:="Search Complete.", buttons:=vbInformation 
End Sub 

Однако мне нужно всего лишь выбрать таблицу, если таблица содержит указанную строку. Это должно быть достаточно простым, но я не могу понять это. Как искать таблицу для определенной строки?

Я пробовал скорректировать код со следующим условным заявлением:
If tTable.Cell(1, 1) = "Adjusted:" Then tTable.Select; см. Пример ниже.

Sub FindSpecificTables() 
    Selection.WholeStory 

    Dim iResponse As Integer 
    Dim tTable As Table 
    'If any tables exist, loop through each table in collection. 
    For Each tTable In ActiveDocument.Tables 
     If tTable.Cell(1, 1) = "MySpecifiedString:" Then tTable.Select 
     If response = vbNo Then Exit For 'User chose to leave search. 
    Next 
    MsgBox prompt:="Search Complete.", buttons:=vbInformation 
End Sub 

К сожалению, это не работает. Является ли мой синтаксис неправильным? У вас есть предложения или рекомендации?

ответ

2

Попробуйте использовать другой подход ... вместо того, чтобы перебирать каждый цикл таблицы search (find) и проверить, не найден ли текст в таблице. здесь простое решение:

Sub Find_Text_in_table() 

    Selection.Find.ClearFormatting 
    With Selection.Find 
     .Text = "donec" 
     .Replacement.Text = "" 
     .Forward = True 
     .Wrap = wdFindAsk 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 

    Do While Selection.Find.Execute 

     If Selection.Information(wdWithInTable) Then 

      Stop 
      'now you are in table with text you searched 
      'be careful with changing Selection Object 
      'do what you need here 
     End If 
    Loop 
End Sub 
+0

Кажется, что это работает. Спасибо за вашу помощь! – BlueFox

+0

Убедитесь, что вы также вызываете '.Find.Replacement.ClearFormatting', так как' .Replacement' имеет '.ClearFormatting', который отделен от' .ClearFormatting' '.Find'. От https://msdn.microsoft.com/en-us/library/f1f367bx.aspx – BGeorge

Смежные вопросы