Vba выделить всю таблицу word

I am looking for a way (or decent introduction) into how to select every table in a Microsoft Word 2013 Document and autofit the contents. Each table is independent of one another and separated by text.

I have established the following code so far:

Sub autofit()

    Selection.Tables(1).AutoFitBehavior (wdAutoFitContent)

End Sub

Which works for individual tables and every column in said table, I understand the format of the «for loop», but would like a nudge to how to transform my individual selection to the entire document.

This is my first post so apologies for any conventions I have missed.

cheezsteak's user avatar

cheezsteak

2,6924 gold badges22 silver badges38 bronze badges

asked Dec 18, 2014 at 17:18

Cellobin22's user avatar

Its pretty trivial to loop them all;

Dim t As Table
For Each t In ActiveDocument.Tables
    t.AutoFitBehavior wdAutoFitContent
Next

answered Dec 18, 2014 at 17:22

Alex K.'s user avatar

Alex K.Alex K.

170k30 gold badges263 silver badges286 bronze badges

1

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 01.02.2018 16:26:54

  • NSV
  • рядовой
  • Неактивен
  • Зарегистрирован: 20.01.2018
  • Сообщений: 4

Тема: Макрос для выделения всех таблиц в документе

Добрый день! Помогите, пожалуйста, с созданием макроса для выделения всех таблиц в документе. Заранее спасибо!

2 Ответ от yshindin 01.02.2018 17:23:43

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171
  • За сообщение: 1

Re: Макрос для выделения всех таблиц в документе

NSV пишет:

Добрый день! Помогите, пожалуйста, с созданием макроса для выделения всех таблиц в документе. Заранее спасибо!

Если под выделением вы понимаете операцию выделения текста (нажать курсор,  затем двигать его вправо или влево, не отжимая клавишу, затем отжать, в результате чего указанный таким образом текст выделен), то вручную это можно сделать (удерживая нажатой клавишу Ctrl, а через VBA — нельзя. Подобные вопросы уже рассматривались (напр., см. http://wordexpert.ru/forum/viewtopic.php?id=693).
Если вы хотите в макросе выделять таблицы для их обработки, то следует это делать в цикле, без выделения какого-либо объекта и используя либо объект Table, либо, напр., объект Table.Range. И затем уже в очередном таком объекте выполнять нужную обработку. Например, для изменения размера в шрифта во всех таблицах можно применить такой макрос:

Sub ChangeFontSizeInTables()
Dim tbl As Table
Dim tblrg As Range
For Each tbl In ActiveDocument.Tables
    Set tblrg = tbl.Range
    tblrg.Font.Size = 14
    Set tblrg = Nothing
Next
End Sub

3 Ответ от NSV 01.02.2018 17:40:28

  • NSV
  • рядовой
  • Неактивен
  • Зарегистрирован: 20.01.2018
  • Сообщений: 4

Re: Макрос для выделения всех таблиц в документе

Именно, под выделением имелось в виду, то как бы  таблицы выделялисьс зажатым СTRL по очереди.
Если нельзя через VBA, то где тогда можно просмотреть список всех редактируемых параметров, связанных с форматирование таблиц, и их правильную запись в VBA?

4 Ответ от yshindin 01.02.2018 18:09:37

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

Re: Макрос для выделения всех таблиц в документе

NSV пишет:

Именно, под выделением имелось в виду, то как бы  таблицы выделялисьс зажатым СTRL по очереди.
Если нельзя через VBA, то где тогда можно просмотреть список всех редактируемых параметров, связанных с форматирование таблиц, и их правильную запись в VBA?

Вам следует почитать объектную модель Word, напр., внешняя ссылка Там рассмотрены объекты, свойства, методы.
Для изучения «вживую» возможных атрибутов объектов я поступаю так: отображаю в VBA панель Locals (View > Locals Window). Затем в VBA-коде ставлю точку останова после оператора, в котором назначается объект. Для такого способа может сгодиться любой искусственный оператор присваивания, напр.

Set rg = Selection.Range.Paragraphs(1).Range
o = 0

вот как раз на операторе «o = 0» я и ставлю останов. При исполнении макрос останавливается на этом операторе. Тогда я в панели Locals смотрю дерево всех свойств объекта rg, который в приведенном примере соответствует диапазону первого абзаца из числа выделенных в тексте на момент исполнения оператора.
Некоторые атрибуты объектов имеют признак «только чтение» (т.е., изменить их значение через VBA нельзя),  а узнать, какие именно, опять-таки можно, только читая документацию по объектной модели. Там же можно узнать методы и ознакомиться с примерами применения.

5 Ответ от yshindin 01.02.2018 18:16:06

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

Re: Макрос для выделения всех таблиц в документе

yshindin пишет:

. . .
Вам следует почитать объектную модель Word, напр., внешняя ссылка
. . .

Более внятное изложение в внешняя ссылка
Кстати, там и про таблицы есть
внешняя ссылка

6 Ответ от yshindin 01.02.2018 18:25:00

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171

Re: Макрос для выделения всех таблиц в документе

Прошу прощения, там материал в основном для VB.Net, а не VBA.
Вот стартовая ссылка для Word 2010:
внешняя ссылка
Там описание всех объектов с примерами.

7 Ответ от yshindin 01.02.2018 18:33:15

  • yshindin
  • генерал-полковник
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 447
  • Поблагодарили: 171
  • За сообщение: 1

Re: Макрос для выделения всех таблиц в документе

yshindin пишет:

. . .
Кстати, там и про таблицы есть
. . .

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

8 Ответ от NSV 01.02.2018 22:36:35

  • NSV
  • рядовой
  • Неактивен
  • Зарегистрирован: 20.01.2018
  • Сообщений: 4

Re: Макрос для выделения всех таблиц в документе

Спасибо огромное! Очень помогло! Теперь можна работать)

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 / 1 / 0

Регистрация: 04.09.2013

Сообщений: 30

1

Выделение всех таблиц в документе

01.12.2017, 13:13. Показов 31629. Ответов 9


Студворк — интернет-сервис помощи студентам

Как выделить все таблицы в большой документе?
Задача сделать «100% по ширине» и высота строки «минимум 0,3»



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

01.12.2017, 13:28

2

MKM, макросом попробуйте

Visual Basic
1
2
3
4
5
6
7
8
Sub Макрос1()
  Dim t As Table
  For Each t In ActiveDocument.Tables
    t.AutoFitBehavior wdAutoFitWindow
    t.Rows.HeightRule = wdRowHeightAtLeast
    t.Rows.Height = CentimetersToPoints(0.3)
  Next
End Sub



2



1233 / 671 / 238

Регистрация: 22.12.2015

Сообщений: 2,092

01.12.2017, 13:41

3

MKM, на форуме обсуждалось, как присвоить всем таблицам один стиль, смотрите тему Как поменять цвет всех таблиц одновременно?
Когда таблицам будет присвоен один стиль — редактируйте настройки таблиц через стиль, он собственно только для этого и предназначен.



1



1 / 1 / 0

Регистрация: 04.09.2013

Сообщений: 30

01.12.2017, 18:22

 [ТС]

4

Казанский, Благодарю, работает!!



0



Ozborn

0 / 0 / 0

Регистрация: 09.03.2019

Сообщений: 1

09.03.2019, 15:15

5

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

Visual Basic
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
Sub Macros_2()
'
' Macros_2 for changing font size and paragraph stile for all tables in the document
'
'
  Dim t As Table
  For Each t In ActiveDocument.Tables
  With t
        .Columns.Select
            With Selection.ParagraphFormat
                .LeftIndent = CentimetersToPoints(0)
                .RightIndent = CentimetersToPoints(0)
                .SpaceBefore = 0
                .SpaceBeforeAuto = False
                .SpaceAfter = 0
                .SpaceAfterAuto = False
                .LineSpacingRule = wdLineSpaceMultiple
                .LineSpacing = LinesToPoints(1.15)
                .Alignment = wdAlignParagraphLeft
                .WidowControl = True
                .KeepWithNext = False
                .KeepTogether = False
                .PageBreakBefore = False
                .NoLineNumber = False
                .Hyphenation = True
                .FirstLineIndent = CentimetersToPoints(0)
                .OutlineLevel = wdOutlineLevelBodyText
                .CharacterUnitLeftIndent = 0
                .CharacterUnitRightIndent = 0
                .CharacterUnitFirstLineIndent = 0
                .LineUnitBefore = 0
                .LineUnitAfter = 0
                .MirrorIndents = False
                .TextboxTightWrap = wdTightNone
            End With
        .AutoFitBehavior wdAutoFitWindow
        .Range.Font.Size = 9   
    End With
  Next t
End Sub



0



0 / 0 / 0

Регистрация: 12.09.2017

Сообщений: 3

29.04.2019, 23:20

6

Можно ли вставить экспресс стиль в этот макрос?



0



0 / 0 / 0

Регистрация: 22.01.2018

Сообщений: 142

26.10.2022, 14:04

7

Добрый день! Можно подобным образом во всех таблицах документа под названием,
кот.переносится при переносе таблицы на другой лист, двойную чёрту (границу) сделать? Как обратиться к именно этим строчка таблицы чтобы их изменить? Название же может быть две строки, не одна, но они помечены, что переносятся.



0



Dinoxromniy

1233 / 671 / 238

Регистрация: 22.12.2015

Сообщений: 2,092

26.10.2022, 15:44

8

Цитата
Сообщение от Ната87Ната
Посмотреть сообщение

под названием,

Заголовок, я полагаю.

Цитата
Сообщение от Ната87Ната
Посмотреть сообщение

кот.переносится при переносе таблицы на другой лист, двойную чёрту (границу) сделать?

Что сделать то надо, толком объясните. Вот это что ли:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub tbl_n()
Dim tblObj As Table, i As Long
For Each tblObj In ThisDocument.Tables
    For i = tblObj.Rows.Count To 1 Step -1
        If tblObj.Rows.Item(i).HeadingFormat Then
            tblObj.Rows.Item(i).Cells.Borders(wdBorderBottom).LineStyle = wdLineStyleDouble
            Exit For
        
        End If
        
    
    Next i
Next tblObj



0



0 / 0 / 0

Регистрация: 22.01.2018

Сообщений: 142

26.10.2022, 16:22

9

По-моему правильно поняли. Но у меня не работает, ругается »object required’. Что не так?

Добавлено через 4 минуты
У меня что-то вообще макросы к таблицам не применяются. Пыталась записать свой, а на таблицы нажимать не даёт.



0



1233 / 671 / 238

Регистрация: 22.12.2015

Сообщений: 2,092

26.10.2022, 16:47

10

Цитата
Сообщение от Ната87Ната
Посмотреть сообщение

Но у меня не работает, ругается »object required’. Что не так?

Не знаю, может есть объединенные строки или вложенные таблицы. Попробуйте выкопировать одну таблицу в новый документ и проверить на ней, когда вычислите проблемную — приложите сюда.



0



В Word легко выбрать таблицу, нажав кнопку точка-выбор-таблица-символ в верхнем левом углу таблицы, как показано на скриншоте ниже. Вы также можете выбрать таблицу с помощью функции «Выбрать таблицу». Однако есть ли способ быстро выбрать все таблицы сразу в документе Word? Методы, описанные в этой статье, помогут вам пройти через это. 


Выбрать все таблицы в Word с кодом VBA
Легко выберите все таблицы в Word с помощью Kutools for Word


Выбрать все таблицы в Word с кодом VBA

1, нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. В открытии Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, Затем скопируйте и вставьте следующий код VBA в окно модуля;

Код VBA: выберите все таблицы в текущем документе:

Sub selecttables()
Dim mytable As Table

For Each mytable In ActiveDocument.Tables
mytable.Range.Editors.Add wdEditorEveryone
Next
ActiveDocument.SelectAllEditableRanges (wdEditorEveryone)
ActiveDocument.DeleteAllEditableRanges (wdEditorEveryone)
End Sub

3. нажмите F5 ключ для запуска кода

После этого сразу же выбираются все таблицы в текущем документе.


Легко выберите все таблицы в Word с помощью Kutools for Word

По сравнению с использованием кода VBA для выбора всех таблиц в документе, Kutools for WordАвтора Выбрать таблицы утилита довольно удобная. Вы можете использовать эту функцию для выбора таблиц в выделенном фрагменте или во всем документе. Пожалуйста, сделайте следующее:

Kutools for Word : С более чем 100 удобными надстройками Word, бесплатно попробовать без ограничений в 60 дня.

Нажмите Кутулс > таблицы > Выбрать таблицы. Смотрите скриншот:

Внимание: Для выбора таблиц в выборе вам необходимо сначала выбрать диапазон, а затем применить функцию.

Тогда вы можете увидеть результаты следующим образом.

Выберите таблицы в выборе:

Выделите таблицы во всем документе:

Если вы хотите получить бесплатную пробную версию этой утилиты, перейдите по ссылке бесплатно скачать программное обеспечение сначала, а затем перейдите к применению операции в соответствии с вышеуказанными шагами.


Демонстрация. Простой выбор всех таблиц в Word с помощью Kutools for Word



Рекомендуемые инструменты для повышения производительности Word

выстрел kutools word kutools tab 1180x121

выстрел kutools word kutools plus tab 1180x120

Kutools For Word — Более 100 расширенных функций для Word, сэкономьте 50% времени

  • Сложные и повторяющиеся операции можно производить разово за секунды.
  • Вставляйте сразу несколько изображений из папок в документ Word.
  • Объединяйте и объединяйте несколько файлов Word из папок в одну в желаемом порядке.
  • Разделите текущий документ на отдельные документы в соответствии с заголовком, разрывом раздела или другими критериями.
  • Преобразование файлов между Doc и Docx, Docx и PDF, набор инструментов для общих преобразований и выбора и т. Д.

Комментарии (10)


Оценок пока нет. Оцените первым!

Автор Svetik, 13 ноября 2017, 20:23

Подскажите, как выбрать (выделить) все таблицы.



Администратор

  • Administrator
  • Сообщения: 2,252
  • Записан

Обычно выделять не надо. Можно просто пройтись по таблицам и обрабатывать каждую таблицу.
К тому же в ворде нельзя выделить с помощью макроса несмежные фрагменты.


Я не против такого варианта. Только не работает

Sub Макрос1()

        Dim tbl As Table

           On Error Resume Next

        For Each tbl In ActiveDocument.Tables

           With Selection.ParagraphFormat
        .FirstLineIndent = CentimetersToPoints(1.25)
    End With

        Next tbl

       End Sub



Администратор

  • Administrator
  • Сообщения: 2,252
  • Записан

Selection относится к выделенному фрагменту.
Если у вас например выделен первый абзац в файле, а макрос перешёл к таблице 2, то какая взаимосвязь между Selection и таблицей 2? Выделенный первый абзац — это Selection, а таблица 2 это tbl.

Внутри таблицы делайте цикл по всем абзацам или используйте tbl.Range для доступа сразу ко всем абзацам.

В коде пишите tbl, ставьте точку и выбирайте нужное.


Спасибо! Вроде работает!

А как изменить макрос, чтобы это все работало только в выделенном фрагменте?

Макрос

Sub Макрос2()

    Dim tbl As Table

    For Each tbl In ActiveDocument.Tables

        With tbl.Range
            With .ParagraphFormat
                .FirstLineIndent = CentimetersToPoints(0.25)
            End With

        End With

    Next tbl

End Sub

[свернуть]



Администратор

  • Administrator
  • Сообщения: 2,252
  • Записан

Просматривайте таблицы в объекте Selection. Напишите в коде «Selection», поставьте точку, выберите Tables.
Selection — это то, что выделено, это выделение юзер видит на мониторе.


  • Форум по VBA, Excel и Word

  • Word

  • Макросы в Word

  • Word VBA Макросы: Как обработать несколько таблиц?

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