1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
Sub Ссылка_фамилия_имя_отчество_01() 'расставляет номера по порядку в столбце таблицы ниже ячейки, где находится данное поле и до конца таблицы 'отключаем дёргание экрана при выполнении кода Application.ScreenUpdating = False Dim cursor_table As Integer Dim cursor_row As Integer Dim cursor_column_cell As Integer 'выполнить функцию с именем ... FunctionВыясняем_нахождение_курсора_в_таблице _ cursor_table, _ cursor_row, _ cursor_column_cell If cursor_table = 32767 Then MsgBox$ _ "Программа не может быть продолжена, курсор должен находится в таблице", vbOKOnly, _ "Внимание" GoTo Конец End If With ActiveDocument.Tables(cursor_table) 'выделить в документе промежуток ... ActiveDocument.Range( _ Start:=.Rows(.Rows.Count).Cells(.Columns.Count).Range.End, _ End:=.Rows(.Rows.Count).Cells(.Columns.Count).Range.End).Select 'спуститься вниз на 1 wdLine Selection.MoveDown Unit:=wdLine, Count:=1 'выделить в документе промежуток ... ActiveDocument.Range( _ Start:=.Rows(.Rows.Count).Cells(.Columns.Count).Range.End, _ End:=Selection.Range.End).Select 'оператор для отлова ошибок, указывает, что при возникновении ошибки нужно переходить к следующей строке кода On Error Resume Next Selection.Sort ExcludeHeader:=False, FieldNumber:="столбцам 2", _ SortFieldType:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, _ FieldNumber2:="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _ wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _ wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _ wdSortSeparateByCommas, SortColumn:=False, CaseSensitive:=False, _ LanguageID:=wdRussian, SubFieldNumber:="абзацам", SubFieldNumber2:= _ "абзацам", SubFieldNumber3:="абзацам" 'ошибка 5280 - "Не найдены записи для сортировки" If Err.Number = 5280 Then MsgBox$ _ "Программа не может быть продолжена, не найдены записи для сортировки", vbOKOnly, _ "Внимание" GoTo Конец End If 'требуется, чтобы в нужном месте отключить действие строки 1) On Error GoTo ... 2) либо действие строки On Error Resume Next On Error GoTo 0 If .Cell(1, 1).Range.Fields.Count = 1 And cursor_row = 1 And cursor_column_cell <> 1 Then Dim w As Integer For w = 1 To .Rows.Count - cursor_row 'расставляем номера по порядку в первом столбце таблицы .Rows(cursor_row + w).Cells(1).Range.Text = w Next End If End With Beep Конец: 'отменяем отключение дёргания экрана при выполнении кода Application.ScreenUpdating = True End Sub |
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Table.Sort method (Word) |
vbawd10.chm156303383 |
vbawd10.chm156303383 |
word |
Word.Table.Sort |
2c68f7ad-2d57-05ea-bd8b-cb8712c21f02 |
06/08/2017 |
medium |
Table.Sort method (Word)
Sorts the specified table.
Syntax
expression.Sort ( _ExcludeHeader_
, _FieldNumber_
, _SortFieldType_
, _SortOrder_
, _FieldNumber2_
, _SortFieldType2_
, _SortOrder2_
, _FieldNumber3_
, _SortFieldType3_
, _SortOrder3_
, _CaseSensitive_
, _BidiSort_
, _IgnoreThe_
, _IgnoreKashida_
, _IgnoreDiacritics_
, _IgnoreHe_
, _LanguageID_
)
expression Required. A variable that represents a ‘Table’ object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
ExcludeHeader | Optional | Variant | True to exclude the first row from the sort operation. The default value is False. |
FieldNumber | Optional | Variant | The first field by which to sort. Microsoft Word sorts by FieldNumber, then by FieldNumber2, and then by FieldNumber3. |
SortFieldType | Optional | Variant | The sort type for FieldNumber. Can be one of the WdSortFieldType constants. Some of these constants may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. The default value is wdSortFieldAlphanumeric. |
SortOrder | Optional | Variant | The sorting order to use when sorting FieldNumber. Can be a WdSortOrder constant. |
FieldNumber2 | Optional | Variant | The second field by which to sort. |
SortFieldType2 | Optional | Variant | The sort type for FieldNumber2. Can be one of the WdSortFieldType constants. Some of these constants may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. The default value is wdSortFieldAlphanumeric. |
SortOrder2 | Optional | Variant | The sorting order to use when sorting FieldNumber2. Can be one WdSortOrder constant. |
FieldNumber3 | Optional | Variant | The third field by which to sort. |
SortFieldType3 | Optional | Variant | The sort type for FieldNumber3. Can be one of the WdSortFieldType constants. Some of these constants may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. The default value is wdSortFieldAlphanumeric. |
SortOrder3 | Optional | Variant | The sorting order to use when sorting FieldNumber3. Can be one WdSortOrder constant. |
CaseSensitive | Optional | Variant | True to sort with case sensitivity. The default value is False. |
BidiSort | Optional | Variant | True to sort based on right-to-left language rules. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. |
IgnoreThe | Optional | Variant | True to ignore the Arabic character alef lam when sorting right-to-left language text. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. |
IgnoreKashida | Optional | Variant | True to ignore kashidas when sorting right-to-left language text. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. |
IgnoreDiacritics | Optional | Variant | True to ignore bidirectional control characters when sorting right-to-left language text. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. |
IgnoreHe | Optional | Variant | True to ignore the Hebrew character he when sorting right-to-left language text. This argument may not be available to you, depending on the language support (U.S. English, for example) that you have selected or installed. |
LanguageID | Optional | Variant | Specifies the sorting language. Can be one of the WdLanguageID constants. Refer to the Object Browser for a list of the WdLanguageID constants. |
Example
This example sorts the first table in the active document, excluding the heading row.
Sub NewTableSort() ActiveDocument.Tables(1).Sort ExcludeHeader:=True End Sub
See also
Table Object
[!includeSupport and feedback]
With ActiveDocument.Tables(cursor_table) Debug.Print cursor_table '5 Debug.Print cursor_row '1 Debug.Print cursor_column_cell '2 'выделить в документе промежуток ... ActiveDocument.Range( _ Start:=.Rows(cursor_row + 1).Cells(1).Range.Start, _ End:=.Rows(.Rows.Count).Cells(.Columns.Count).Range.End).Select 'оператор для отлова ошибок, указывает, что при возникновении ошибки нужно переходить к следующей строке кода On Error Resume Next Selection.Sort ExcludeHeader:=False, FieldNumber:="столбцам " & cursor_column_cell, _ SortFieldType:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, _ FieldNumber2:="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _ wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _ wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _ wdSortSeparateByCommas, SortColumn:=False, CaseSensitive:=False, _ LanguageID:=wdRussian, SubFieldNumber:="абзацам", SubFieldNumber2:= _ "абзацам", SubFieldNumber3:="абзацам" 'ошибка 5280 - "Не найдены записи для сортировки" If Err.Number = 5280 Then MsgBox$ _ "Программа не может быть продолжена, не найдены записи для сортировки", vbOKOnly, _ "Внимание" GoTo Конец End If 'требуется, чтобы в нужном месте отключить действие строки 1) On Error GoTo ... 2) либо действие строки On Error Resume Next On Error GoTo 0
Here is an alternative that avoids the word find and replace. It also uses the more general Sort method which replicates the dialog box you get when doing the sort in word. This might be helpful if you want to sort on multiple columns.
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://learn.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
Edited to revise the sub to include the recommendations about screen updating, events and pagination (others beat me to it). I’ve also included code to put a message in the status bar (bottom left corner of the word window) which will show progress (Table x of y). I tested the above on a document I have with 125 tables and (without sorting the tables) it completed in around 5 seconds.
I also corrected one error I made
sortorder:=wdSortAscending
should have been
sortorder:=wdSortOrderAscending
Hence the addition of ‘option explicit’ at the start of the code.
Do you know, Microsoft Word has capability to perform sorting over a document. In this article we will write code to sort paragraphs in Alphabetical order using visual basic for applications code.
Before code
Code example
Sub sortText() Selection.Sort ExcludeHeader:=False, FieldNumber:="Paragraphs", _ SortFieldType:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, _ FieldNumber2:="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _ wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _ wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _ wdSortSeparateByTabs, SortColumn:=False, CaseSensitive:=False, LanguageID _ :=wdEnglishUS, SubFieldNumber:="Paragraphs", SubFieldNumber2:= _ "Paragraphs", SubFieldNumber3:="Paragraphs" End Sub
Put above code in a module, Select number of paragraphs that you would like to sort in A-Z order and press F5 key to execute.
Final Output
The following function uses Selection.Sort, you can try alternative methods if selection is not possible / permissible
Function SortTable()
ActiveDocument.Tables(1).Select()
Selection.Sort(ExcludeHeader:=True, FieldNumber:=«Column 1», SortFieldType _
:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, FieldNumber2 _
:=«», SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _
wdSortOrderAscending, FieldNumber3:=«», SortFieldType3:= _
wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _
wdSortSeparateByTabs, SortColumn:=False, CaseSensitive:=False, LanguageID _
:=wdEnglishUS)
Selection.MoveRight(Unit:=wdCharacter, Count:=1)
End Function
The above uses as three column table. Please customize it for your use
See also:
How to use .Net Array.Sort Function in VBA
Case in-sensitive comparison
Привет всем.
В вордовом документе етсь таблица, там 2 колонки. Надо совершить сортировку по первому стобцу — он строковый. Помогите плиз написать программу, или может ссылочку дайте на код. В VBA, очень плохо рулю. Поиск не работает.
Заранее благодарен.
Здравствуйте, Amor, Вы писали:
A>В вордовом документе етсь таблица, там 2 колонки. Надо совершить сортировку по первому стобцу — он строковый. Помогите плиз написать программу, или может ссылочку дайте на код. В VBA, очень плохо рулю. Поиск не работает.
Создаем таблицу из двух колонок.
Сервис > Макрос > Начать запись
Таблица > Сортировка, задаем параметры
Остановить запись
Получаем:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 21.05.2004 nzeemin
'
Selection.Sort ExcludeHeader:=True, FieldNumber:="столбцам 1", _
SortFieldType:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, _
FieldNumber2:="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _
wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _
wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _
wdSortSeparateByCommas, SortColumn:=False, CaseSensitive:=False, _
LanguageID:=wdEnglishUS, SubFieldNumber:="абзацам", SubFieldNumber2:= _
"абзацам", SubFieldNumber3:="абзацам"
End Sub
Дальше встаем на слово Sort и нажимаем F1.
A>Заранее благодарен.
На RSDN благодарность выражается с помощью оценок.
… << RSDN@Home 1.1.2 stable >>
Здравствуйте, Amor, Вы писали:
A>Привет всем.
A>В вордовом документе етсь таблица, там 2 колонки. Надо совершить сортировку по первому стобцу — он строковый. Помогите плиз написать программу, или может ссылочку дайте на код. В VBA, очень плохо рулю. Поиск не работает.
A>Заранее благодарен.
For Each cel In myTable.Column(0).Cells
' сортируешь по cel.Range.Text
Next
Опыт — это такая вещь, которая появляется сразу после того, как была нужна…