Vba word количество столбцов

just a quick question.
I’ve got this table in a Word template which have two columns by default.
Then I’ve got this button the user can press if he wants another column. The macro run inserts several text placeholders and formats certain things automatically.
But what I want is some sort of routine which basically checks the number of columns in this table, and if there are two columns, the text typed in is automatically «Column 3» and if there are three columns there, the text should be «Column 4». Should be pretty simple if I can just find out how I can find the number of columns.

abatishchev's user avatar

abatishchev

97.3k85 gold badges297 silver badges432 bronze badges

asked Aug 1, 2010 at 14:49

Kenny Bones's user avatar

Kenny BonesKenny Bones

4,99936 gold badges109 silver badges173 bronze badges

A table object knows how many columns it has, just check the Columns.Count property.

ThisDocument.Tables(1).Columns.Count

answered Aug 1, 2010 at 15:18

Tahbaza's user avatar

2

This works:

Sub CountColumns()
    Dim d As Document
    Set d = ActiveDocument
    Dim t As Table
    Set t = d.Tables(1)
    Debug.Print t.Columns.Count
End Sub

answered Aug 1, 2010 at 15:17

Todd Main's user avatar

Todd MainTodd Main

28.9k11 gold badges82 silver badges146 bronze badges

0 / 0 / 0

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

Сообщений: 12

1

Word

04.02.2010, 15:08. Показов 5733. Ответов 4


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

Таблица создавалась на 6 столбцов, но в некоторых строках столбцы объядинялись. Так вот, надо найти именно те строки, которые имеют по 6 столбцов.

Благодарю за внимание.



0



0 / 0 / 0

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

Сообщений: 12

04.02.2010, 15:51

 [ТС]

2

Уже догнал сам

WordBasic.TableSelectRow
Selection.Columns.Count



0



Schumacher57

12 / 11 / 3

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

Сообщений: 256

28.01.2022, 13:36

3

А вот ведь жишь, то засада, то какая!
B-boy Dimo-N,

Visual Basic
1
Selection.Columns.Count

И что получается? Если есть объединённые ячейки в таблице, то узнать количество столбцов в определённой строке, я могу только через свойство Selection.
Блин, что за ананизм какой-то?

Что по человечески узнать не как?

По человечески это типа:

Visual Basic
1
2
3
4
5
6
Private Sub Test()
    Dim MainTbl As Table
    Set MainTbl = ThisDocument.Tables(1)
    MainTbl.Rows(i).Range.Cells.Count ' Например, как-нибудь так... Зачем тут высирать ошибку - 5991
    ' вот кто это так придумал... просто слов нету....
End Sub



0



Narimanych

2630 / 1636 / 744

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

Сообщений: 5,141

28.01.2022, 14:20

4

B-boy Dimo-N,

Цитата
Сообщение от B-boy Dimo-N
Посмотреть сообщение

так вот, надо найти именно те строки, которые имеют по 6 столбцов.

Schumacher57,
С Вашего позволения

Visual Basic
1
2
3
4
5
6
7
8
Sub Test()
    Dim MainTbl As Table
    Set MainTbl = ThisDocument.Tables(1)
    For i = 1 To MainTbl.Range.Rows.Count
        If MainTbl.Rows(i).Range.Cells.Count = 6 Then counter = counter + 1
    Next
    MsgBox (counter)
End Sub



0



Schumacher57

12 / 11 / 3

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

Сообщений: 256

28.01.2022, 14:45

5

Narimanych,

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

С Вашего позволения

Не не, тут надо внимательно читать:

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

Если есть объединённые ячейки в таблице, то узнать . . .

Если воспользоваться вашим примером, то на строчке:

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

Visual Basic
1
MainTbl.Rows(i).Range.Cells.Count

Вылетит ошибка: ‘5991’ Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объеденённые по вертикали

Пробовал, уже конечно, такой подход



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

28.01.2022, 14:45

Помогаю со студенческими работами здесь

Из таблицы Exel выбирает все строки с нечетным номерами и вставляет эти данные в Word в четные строки таблицы
Написать код VBA при нажатии на кнопку, который из таблицы Exel выбирает все строки с нечетным…

Работа с двумерными массивами ( Определить: количество столбцов, номер строки)
Дана целочисленная прямоугольная матрица. Определить:
1. Количество столбцов, содержащих хотя бы…

Как определить номер таблицы в word?
Приветствую, Друзья!
Подскажите пожалуйста как определить номер таблицы в ворде?
Документ…

Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD
Ув. прпограммисты, подскажите пожалуйста, как вычислять значения вне таблицы WORD, с использованием…

Определить количество классов эквивалентных строк данной прямоугольной матрицы. Строки считать эквивалентными, если равны суммы их элементов.
подскажите
Определить количество классов эквивалентных строк данной
прямоугольной матрицы. Строки…

Определить количество столбцов с нулевыми элементами и номер строки с самой длинной серией одинаковых элементов
Дана целочисленная прямоугольная матрица. Определить:
A. количество столбцов, содержащих хотя бы…

Создание таблицы: как в DataGridView задать программно количество строк и столбцов
Вообщем есть такое задание.

Разработка программного средства для работы с таблицами. При…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

5

Создание таблиц в документе Word из кода VBA Excel. Метод Tables.Add, его синтаксис и параметры. Объекты Table, Column, Row, Cell. Границы таблиц и стили.

Работа с Word из кода VBA Excel
Часть 4. Создание таблиц в документе Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Таблицы в VBA Word принадлежат коллекции Tables, которая предусмотрена для объектов Document, Selection и Range. Новая таблица создается с помощью метода Tables.Add.

Синтаксис метода Tables.Add

Expression.Add (Range, Rows, Columns, DefaultTableBehavior, AutoFitBehavior)

Expression – выражение, возвращающее коллекцию Tables.

Параметры метода Tables.Add

  • Range – диапазон, в котором будет создана таблица (обязательный параметр).
  • Rows – количество строк в создаваемой таблице (обязательный параметр).
  • Columns – количество столбцов в создаваемой таблице (обязательный параметр).
  • DefaultTableBehavior – включает и отключает автоподбор ширины ячеек в соответствии с их содержимым (необязательный параметр).
  • AutoFitBehavior – определяет правила автоподбора размера таблицы в документе Word (необязательный параметр).

Создание таблицы в документе

Создание таблицы из 3 строк и 4 столбцов в документе myDocument без содержимого и присвоение ссылки на нее переменной myTable:

With myDocument

Set myTable = .Tables.Add(.Range(Start:=0, End:=0), 3, 4)

End With

Создание таблицы из 5 строк и 4 столбцов в документе Word с содержимым:

With myDocument

myInt = .Range.Characters.Count 1

Set myTable = .Tables.Add(.Range(Start:=myInt, End:=myInt), 5, 4)

End With

Для указания точки вставки таблицы присваиваем числовой переменной количество символов в документе минус один. Вычитаем единицу, чтобы исключить из подсчета последний знак завершения абзаца (¶), так как точка вставки не может располагаться за ним.

Последний знак завершения абзаца всегда присутствует в документе Word, в том числе и в новом без содержимого, поэтому такой код подойдет и для пустого документа.

При создании, каждой новой таблице в документе присваивается индекс, по которому к ней можно обращаться:

myDocument.Tables(индекс)

Нумерация индексов начинается с единицы.

Отображение границ таблицы

Новая таблица в документе Word из кода VBA Excel создается без границ. Отобразить их можно несколькими способами:

Вариант 1
Присвоение таблице стиля, отображающего все границы:

myTable.Style = «Сетка таблицы»

Вариант 2
Отображение внешних и внутренних границ в таблице:

With myTable

.Borders.OutsideLineStyle = wdLineStyleSingle

.Borders.InsideLineStyle = wdLineStyleSingle

End With

Вариант 3
Отображение всех границ в таблице по отдельности:

With myTable

.Borders(wdBorderHorizontal) = True

.Borders(wdBorderVertical) = True

.Borders(wdBorderTop) = True

.Borders(wdBorderLeft) = True

.Borders(wdBorderRight) = True

.Borders(wdBorderBottom) = True

End With

Присвоение таблицам стилей

Вариант 1

myTable.Style = «Таблица простая 5»

Чтобы узнать название нужного стиля, в списке стилей конструктора таблиц наведите на него указатель мыши. Название отобразится в подсказке. Кроме того, можно записать макрос с присвоением таблице стиля и взять название из него.

Вариант 2

myTable.AutoFormat wdTableFormatClassic1

Выбирайте нужную константу с помощью листа подсказок свойств и методов – Auto List Members.

Обращение к ячейкам таблицы

Обращение к ячейкам второй таблицы myTable2 в документе myDocument по индексам строк и столбцов:

myTable2.Cell(nRow, nColumn)

myDocument.Tables(2).Cell(nRow, nColumn)

  • nRow – номер строки;
  • nColumn – номер столбца.

Обращение к ячейкам таблицы myTable в документе Word с помощью свойства Cell объектов Row и Column и запись в них текста:

myTable.Rows(2).Cells(2).Range = _

«Содержимое ячейки во 2 строке 2 столбца»

myTable.Columns(3).Cells(1).Range = _

«Содержимое ячейки в 1 строке 3 столбца»

В таблице myTable должно быть как минимум 2 строки и 3 столбца.

Примеры создания таблиц Word

Пример 1
Создание таблицы в новом документе Word со сплошными наружными границами и пунктирными внутри:

Sub Primer1()

Dim myWord As New Word.Application, _

myDocument As Word.Document, myTable As Word.Table

  Set myDocument = myWord.Documents.Add

  myWord.Visible = True

With myDocument

  Set myTable = .Tables.Add(.Range(0, 0), 5, 4)

End With

With myTable

  .Borders.OutsideLineStyle = wdLineStyleSingle

  .Borders.InsideLineStyle = wdLineStyleDot

End With

End Sub

В выражении myDocument.Range(Start:=0, End:=0) ключевые слова Start и End можно не указывать – myDocument.Range(0, 0).

Пример 2
Создание таблицы под ранее вставленным заголовком, заполнение ячеек таблицы и применение автосуммы:

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

Sub Primer2()

On Error GoTo Instr

Dim myWord As New Word.Application, _

myDocument As Word.Document, _

myTable As Word.Table, myInt As Integer

  Set myDocument = myWord.Documents.Add

  myWord.Visible = True

With myDocument

‘Вставляем заголовок таблицы

  .Range.InsertAfter «Продажи фруктов в 2019 году» & vbCr

  myInt = .Range.Characters.Count 1

‘Присваиваем заголовку стиль

  .Range(0, myInt).Style = «Заголовок 1»

‘Создаем таблицу

  Set myTable = .Tables.Add(.Range(myInt, myInt), 4, 4)

End With

With myTable

‘Отображаем сетку таблицы

  .Borders.OutsideLineStyle = wdLineStyleSingle

  .Borders.InsideLineStyle = wdLineStyleSingle

‘Форматируем первую и четвертую строки

  .Rows(1).Range.Bold = True

  .Rows(4).Range.Bold = True

‘Заполняем первый столбец

  .Columns(1).Cells(1).Range = «Наименование»

  .Columns(1).Cells(2).Range = «1 квартал»

  .Columns(1).Cells(3).Range = «2 квартал»

  .Columns(1).Cells(4).Range = «Итого»

‘Заполняем второй столбец

  .Columns(2).Cells(1).Range = «Бананы»

  .Columns(2).Cells(2).Range = «550»

  .Columns(2).Cells(3).Range = «490»

  .Columns(2).Cells(4).AutoSum

‘Заполняем третий столбец

  .Columns(3).Cells(1).Range = «Лимоны»

  .Columns(3).Cells(2).Range = «280»

  .Columns(3).Cells(3).Range = «310»

  .Columns(3).Cells(4).AutoSum

‘Заполняем четвертый столбец

  .Columns(4).Cells(1).Range = «Яблоки»

  .Columns(4).Cells(2).Range = «630»

  .Columns(4).Cells(3).Range = «620»

  .Columns(4).Cells(4).AutoSum

End With

‘Освобождаем переменные

Set myDocument = Nothing

Set myWord = Nothing

‘Завершаем процедуру

Exit Sub

‘Обработка ошибок

Instr:

If Err.Description <> «» Then

  MsgBox «Произошла ошибка: « & Err.Description

End If

If Not myWord Is Nothing Then

  myWord.Quit

  Set myDocument = Nothing

  Set myWord = Nothing

End If

End Sub

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

Чтобы просуммировать значения в строке слева от ячейки с суммой, используйте метод Formula объекта Cell:

myTable.Cell(2, 4).Formula («=SUM(LEFT)»)

Другие значения метода Formula, применяемые для суммирования значений ячеек:

  • «=SUM(ABOVE)» – сумма значений над ячейкой (аналог метода AutoSum);
  • «=SUM(BELOW)» – сумма значений под ячейкой;
  • «=SUM(RIGHT)» – сумма значений справа от ячейки.



Форум программистов Vingrad

Модераторы: MetalFan

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Количество столбцов в строке в таблице Word 

V

   

Опции темы

koanni
Дата 17.6.2008, 13:29 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2007

Репутация: нет
Всего: нет

Есть таблица в ворде нужно узнать сколько столбцов на текущей строке, так как в таблице количество столбцов в некоторых строках разные, есть объеденные ячейки.

PM MAIL ICQ   Вверх
Albinos_x
Дата 20.6.2008, 12:59 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Evil Skynet
****

Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108

думаю, что количество столбцов одинаково для всеё таблицы, нудно проверять ячейки на объединение

———————

«Кто владеет информацией, тот владеет миром»    
Уинстон Черчилль

PM MAIL ICQ   Вверх
koanni
Дата 23.6.2008, 05:16 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2007

Репутация: нет
Всего: нет

Albinos_x

Здравствуйте, мой начальник программирует исключительно на VB (Visual Basic), пример кода на VB выглядит вот так:
MsgBox rWord.ActiveDocument.Tables(x).Rows(y).Cells.Count
   где x — номер таблицы
          y — номер строки

и результат всего этого количество столбцов

как мне это перенести на Delphi?

PM MAIL ICQ   Вверх
Albinos_x
Дата 15.7.2008, 22:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Evil Skynet
****

Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108

или

WordApplication1.ActiveDocument.Tables.Item(1).Rows.Item(3).Cells.Count;

или

   WordDocument1.Tables.Item(1).Rows.Item(3).Cells.Count;

или 

   Tbl.Rows.Item(3).Cells.Count;
//  Tbl: Table; // переменная взята из приводившихся здесь примеров

в зависимости от того, какой используете подход

———————

«Кто владеет информацией, тот владеет миром»    
Уинстон Черчилль

PM MAIL ICQ   Вверх
koanni
Дата 29.7.2008, 06:04 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2007

Репутация: нет
Всего: нет

Albinos_x

    Спасибо большое, все получилось smile

PM MAIL ICQ   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: ActiveX/СОМ/CORBA»

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »

Вопрос:

просто быстрый вопрос.
У меня есть эта таблица в шаблоне Word, который по умолчанию имеет два столбца.
Тогда у меня есть эта кнопка, которую пользователь может нажать, если ему нужен другой столбец. Макросъемка вставляет несколько текстовых заполнителей и автоматически форматирует определенные вещи.
Но то, что я хочу, это какая-то рутина, которая в основном проверяет количество столбцов в этой таблице, а если есть два столбца, введенный текст автоматически “Столбец 3”, и если там три столбца, текст должен быть “Столбец 4”. Должно быть довольно просто, если я могу просто узнать, как я могу найти количество столбцов.

Лучший ответ:

Объект таблицы знает, сколько столбцов он имеет, просто проверьте свойство Columns.Count.

ThisDocument.Tables(1).Columns.Count

Ответ №1

Это работает:

Sub CountColumns()
Dim d As Document
Set d = ActiveDocument
Dim t As Table
Set t = d.Tables(1)
Debug.Print t.Columns.Count
End Sub

Like this post? Please share to your friends:
  • Vba word количество слов
  • Vba word количество абзацев
  • Vba word как установить
  • Vba word как узнать номер страницы
  • Vba word как удалить пустые строки