Сортировка таблицы word vba

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.

Sorting in Microsoft Word using VBA (Visual Basic for Applications)

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

Опыт — это такая вещь, которая появляется сразу после того, как была нужна…

Понравилась статья? Поделить с друзьями:
  • Сортировка таблицы excel по значениям столбца
  • Сортировка таблиц с объединенными ячейками excel
  • Сортировка таблиц редактор word
  • Сортировка таблиц в excel это
  • Сортировка таблиц в excel по строкам