Вот альтернатива, которая избегает слова найти и заменить.Он также использует более общий метод сортировки, который копирует диалоговое окно, которое вы получаете при выполнении сортировки по слову.Это может быть полезно, если вы хотите отсортировать по нескольким столбцам.
Option Explicit
Sub test()
SortTables_WithKey "Step"
End Sub
Sub SortTables_WithKey(this_key As String)
Dim myIndex As Long
Dim myLastTable As Long
myLastTable = ActiveDocument.Tables.Count
Application.ScreenUpdating = False
Application.Options.Pagination = False
For myIndex = 1 To myLastTable
' MS have deprecated the use of statusbar so if this line
' but it still appears to work in Word 2016
Application.StatusBar = "Table " & CStr(myIndex) & " of " & CStr(myLastTable)
If InStr(ActiveDocument.Tables(myIndex).Range.text, this_key) > 0 Then
' https://docs.microsoft.com/en-us/office/vba/api/word.table.sort
' Replicates the type of sort when done using Word
ActiveDocument.Tables(myIndex).Sort _
excludeheader:=True, _
fieldnumber:=1, _
sortfieldtype:=wdSortFieldAlphanumeric, _
sortorder:=wdSortOrderAscending
End If
DoEvents
Next
Application.ScreenUpdating = True
Application.Options.Pagination = True
End Sub
Отредактировано, чтобы пересмотреть сабвуфер, чтобы включить рекомендации по обновлению экрана, событиям и нумерации страниц (другие опередили меня).Я также включил код для размещения сообщения в строке состояния (нижний левый угол окна слова), в котором будет отображаться прогресс (таблица x of y).Я протестировал вышеуказанное на имеющемся у меня документе со 125 таблицами, и (без сортировки таблиц) он завершился примерно за 5 секунд.
Я также исправил одну ошибку, которую я сделал
sortorder:=wdSortAscending
должен иметьБыло
sortorder:=wdSortOrderAscending
Отсюда добавление «опции явного» в начале кода.