Vba word ширина столбца
У меня есть папка с 84 документами Word (.docx). Каждый документ содержит таблицу идентичного макета (некоторые документы занимают 2 страницы). Однако ширина столбцов не всегда одинакова.
Я хочу, чтобы ширина всех столбцов таблицы была одинаковой и составляла 2 дюйма, чтобы впоследствии я мог сохранить все файлы в формате PDF и подготовить их для использования в другом процессе, который я не буду вдаваться в подробности.
У меня есть макрос Word VBA, который запускает сценарий (ниже) для всех файлов .docx в папке на основе пути к файлу, предложенного пользователем. Эта часть работает - нет проблем.
Проблема
Однако, когда мой сценарий пытается установить для всех столбцов в таблицах документа одинаковую ширину, это не работает. В показанном здесь примере документа это работает только в первых 3 столбцах.
Иллюстрируем проблему скриншотами
Рисунок 1 (вверху): так выглядит исходная таблица в документе Word.
Рисунок 2 (вверху): так выглядит таблица после запуска моего макроса. В этом примере я запустил макрос, чтобы установить ширину всех столбцов равной 1,5 ( InchesToPoints(1.5) ). Вы можете видеть, что изменяются только первые 3 столбца, а столбцы 4-7 не изменяются.
Рис. 3 (вверху). Вот как я ожидал, что таблица будет выглядеть после запуска моего макроса, чтобы установить для всех столбцов ширину 1,5 дюйма.
Тестирование на другом файле
Я протестировал макрос в другом созданном мной файле, куда я вставил 3 таблицы.
Рисунок 4 (вверху): я создал новый файл с 3 таблицами, все с разной шириной столбцов.
Рисунок 5 (выше): запуск макроса с этим тестовым файлом в той же папке, что и предыдущий пример документа, показывает, что макрос работает, и настраивает столбцы во всех таблицах до указанной ширины.
Что тут происходит? Почему SetTableWidths не работает должным образом?
Я предполагаю, что это может быть потому, что исходная таблица в исходном текстовом документе содержит объединенные ячейки, иначе почему бы сценарий не работал со столбцами 4-7?
Указывает ширину каждого столбца в поле со списком с несколькими столбцами.
Синтаксис
объект. ColumnWidths [= String ]
Синтаксис свойства ColumnWidths состоит из следующих частей:
Часть | Описание |
---|---|
object | Обязательно. Допустимый объект. |
String | Необязательно. Устанавливает ширину строки в точках. Параметр -1 или пустой результат в расчетной ширине. Значение 0 приводит к скрытию столбца. Чтобы указать другую единицу измерения, добавьте ее. Значение больше 0 явно указывает ширину столбца. |
Параметры
Чтобы отделить записи в столбцах, используйте точку с запятой (;) в качестве разделителя списка. В Windows это значение можно изменить, указав разделитель списка в разделе "Язык и региональные стандарты" панели управления Windows.
Любые или все параметры свойства ColumnWidths могут оставаться пустыми. Пустой параметр можно создать, указав разделитель без предшествующего ему значения.
Если вы указываете значение -1 на странице свойства, отображаемая на странице свойства является пустой.
Для вычисления ширины столбцов, когда columnWidths является пустым или -1, ширина управления поровну делится между всеми столбцами списка. Если сумма указанной ширины столбцов превышает ширину элемента управления, список выравнивается по левому краю в пределах элемента управления и один или несколько крайних правых столбцов не отображаются. Чтобы просмотреть их, пользователи могут прокрутить список с помощью горизонтальной полосы прокрутки.
Минимальная вычисляемая ширина столбца составляет 72 точки (2,54 см). Чтобы создать более узкий столбец, необходимо указать точную ширину.
Если не указано другое, ширина столбца измеряется в точках. Чтобы указать другую единицу измерения, добавьте ее к значению. В следующих примерах ширина столбца указывается в нескольких единицах измерения, а также приводится описание различных способов размещения трех столбцов в поле со списком шириной 10,16 см.
Setting | Эффект |
---|---|
90;72;90 | Ширина первого столбца — 90 точек (3,18 см); ширина второго столбца — 72 точки (2,54 см); ширина третьего столбца — 90 точек. |
6 cm;0;6 cm | Ширина первого столбца — 6 см; второй столбец скрыт; ширина третьего столбца — 6 см. Так как третий столбец является частично видимым, отображается горизонтальная полоса прокрутки. |
1.5 in;0;2.5 in | Ширина первого столбца — 1,5 дюйма (3,81 см); второй столбец скрыт; ширина третьего столбца — 2,5 дюйма (6,35 см). |
2 in;;2 in | Ширина первого столбца — 2 дюйма (5,08 см); ширина второго столбца — 1 дюйм (2,54 см) (по умолчанию); ширина третьего столбца — 2 дюйма (5,08 см). Так как только половина третьего столбца является видимой, отображается горизонтальная полоса прокрутки. |
(Пустой) | Все три столбца имеют одинаковую ширину (3,38 см). |
Примечания
В поле со списком система отображает столбец, назначаемый свойством TextColumn в текстовой части элемента управления.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
У меня есть папка с 84 документами Word (.docx). Каждый документ содержит таблицу идентичного макета (некоторые документы занимают 2 страницы). Однако ширина столбцов не всегда одинакова.
Я хочу, чтобы ширина всех столбцов таблицы была одинаковой и составляла 2 дюйма, чтобы впоследствии я мог сохранить все файлы в формате PDF и подготовить их для использования в другом процессе, который я не буду вдаваться в подробности.
У меня есть макрос Word VBA, который запускает сценарий (ниже) для всех файлов .docx в папке на основе пути к файлу, предложенного пользователем. Эта часть работает - нет проблем.
Проблема
Однако, когда мой сценарий пытается установить для всех столбцов в таблицах документа одинаковую ширину, это не работает. В показанном здесь примере документа это работает только в первых трех столбцах.
Иллюстрируем проблему скриншотами
Рисунок 1 (вверху): так выглядит исходная таблица в документе Word.
Рисунок 2 (вверху): так выглядит таблица после запуска моего макроса. В этом примере я запустил макрос, чтобы установить ширину всех столбцов равной 1,5 ( InchesToPoints(1.5) ). Вы можете видеть, что изменяются только первые 3 столбца, а столбцы 4-7 не изменяются.
Рис. 3 (вверху). Вот как я ожидал, что таблица будет выглядеть после запуска моего макроса, чтобы установить для всех столбцов ширину 1,5 дюйма.
Тестирование на другом файле
Я протестировал макрос в другом созданном мной файле, куда я вставил 3 таблицы.
Рисунок 4 (вверху): я создал новый файл с 3 таблицами, все с разной шириной столбцов.
Рисунок 5 (выше): запуск макроса с этим тестовым файлом в той же папке, что и предыдущий пример документа, показывает, что макрос работает, и настраивает столбцы во всех таблицах до указанной ширины.
Что тут происходит? Почему SetTableWidths не работает должным образом?
Я предполагаю, что это может быть потому, что исходная таблица в исходном текстовом документе содержит объединенные ячейки, иначе почему бы сценарий не работал со столбцами 4-7?
I am just getting started with VBA, using my old copy of Word 2010. I want to resize two of the columns in a three column table and format the text that is in the columns. This code was generated by Word's macro recorder:
Now I want the first two columns to be 1.3 inches wide and the third column to be 5.1 inches wide. Then I want to change the formatting of the text in the third column to increase the font size. The macro recorder doesn't seem to record when I resize columns. Any suggestions as to how to edit this code?
1 Answer 1
Controlling tables is rather complicated. Word does much of it the way it sees fit, but if you use VBA you must take control. It really isn't desirable that you should make your life even more miserable by invoking the Selection object. Try and make your object the table itself, for example, like this.
The table will be inserted following the selection. You may want to collapse your selection range before running this code. But now that you have a table object you can format it to your heart's content without selecting anything. There are dozens of properties. One of them which you will want to determine is Tbl.PreferredWidth = InchesToPoints(7.7) Word will not set this property automatically to the total width of your columns.
Your table has 3 columns which you can address as Tbl.Columns(1) to 3. You can set the width for each column, like Tbl.Columns(3).Width = InchesToPoints(5.1)
Similarly, you can address each row as Tbl.Rows(1) and up. Individual cells are addressed by Row and Column numbers, for example, Tbl.Cell(1, 3) which is the 3rd cell in the first row. Avoid merging cells because that will prevent VBA from being able to count them off.
The text in a cell is contained in its range, for example, Tbl.Cell(1, 3).Range.Text . You can both read and write this property. Bear in mind that Word keeps a paragraph-end mark at the end of each cell's range. When you write to a cell Word will add it for you, even if you thought of adding it yourself. But when you read a cell's text you need to remove the last character, for example,
Here Fun is the variable (As String) that contains the actual text part of the cell's contents.
You can address the paragraphs within a cell as part of the range, for example, Tbl.Cell(1, 3).Range.Paragraphs(1) . I always avoid having more than 1 paragraph into any cell. However, you could address more paragraphs as (2) etc. You can apply all formatting available for paragraphs to each paragraph in each cell, and all the text in each paragraph can be subjected to all the formatting Word has available for text.
I have a folder with 84 Word documents (.docx). Every document contains a table of identical layout (some of the documents span across 2 pages). However, the column widths are not always the same.
I want to make all the table column widths identical at 2 inches, so I can subsequently save all the files as PDF, and prepare them for use in another process which I will not elaborate on.
I've got a Word VBA macro that runs a script (below) over all .docx files in a folder, based on a user-prompted file path. This part works - there's no problem.
The problem
However, when my script attempts to set all the columns in the document's tables to the same width, this doesn't work. It only works, in the example document shown here, on the first 3 columns.
Illustrating the problem with screenshots
Figure 1 (above): This is what the original table looks like in the Word document.
Figure 2 (above): This is what the table looks like after running my macro. In this example, I ran the macro to set all column widths to 1.5 ( InchesToPoints(1.5) ). You can see that only the first 3 columns are adjusted, but columns 4-7 are unmodified.
Figure 3 (above): This is what I expected the table to look like after running my macro to set all columns to 1.5 inches in width.
Testing on another file
I tested the macro on another file I created, where I inserted 3 tables.
Figure 4 (above): I created a new file with 3 tables, all with different column widths.
Figure 5 (above): Running the macro with this test file in the same folder as the example document previously, shows that the macro works, and adjusts the columns in all tables to the specified width.
What's going on here? Why isn't SetTableWidths working as expected?
I'm guessing that it's maybe because the original table in the original word document contains merged cells, otherwise why would the script not work on columns 4-7?
Читайте также: