Таблица word vba цикл

I have a 3 X 3 (say tableA) table in MS word.
The (2,2)th cell is a split cell(split into 2X2 table).
How can I cycle through all the cells in the tableA.

Dim strCellText As String
Dim uResp As String
Dim Row As Integer
Dim Col As Integer

Dim itable As Table


For Each itable In ThisDocument.Tables

    uResp = ""

    For Row = 1 To itable.Rows.Count

        For Col = 1 To itable.Columns.Count

            strCellText = itable.Cell(Row, Col).Range.Text
            uResp = uResp & Trim(strCellText)                

        Next

    Next

    MsgBox uResp
Next

This program gives a compilation error:

Run time error 5914
The requested member of the collection does not exist

How can I iterate though cells of a tables which has split cells.

Martijn Pieters's user avatar

asked Mar 23, 2013 at 9:39

Vinod's user avatar

3

You should assume that each of the row has the maximum possible number of columns. In your situation, that would be four. To iterate through each cell, I propose to set On Error Resume Next before the first loop starts. Then inside your inner loop, try this code:

strCellText = itable.cell(Row, Col).Range.Text

If Err.Number = 0 Then
    uResp = uResp & Trim(strCellText)
    Debug.Print Row, Col, strCellText
Else
    Err.Clear
End If

JSTL's user avatar

JSTL

8081 gold badge16 silver badges25 bronze badges

answered Mar 23, 2013 at 10:45

Kazimierz Jawor's user avatar

Kazimierz JaworKazimierz Jawor

18.8k7 gold badges35 silver badges55 bronze badges

4

If you want to go through all cells in all tables in a MS Word Document, even if the cells are merged, I got the results I wanted. Try this:

Sub CheckingInTheCell
Dim C as Cell
Dim tableCount, Ctr

tableCount = ActiveDocuments.tables.count

for Ctr = 1 to tableCount
   For each C in ActiveDocument.Tables(Ctr).Range.cells
       .....your validations or whatever you would like to do for the cell content
   next C
next Ctr

End Sub

JSTL's user avatar

JSTL

8081 gold badge16 silver badges25 bronze badges

answered Aug 22, 2018 at 17:49

Lav Zolovan Mehta's user avatar

1

I run into this situation when I am trying to extract data from (sometimes malformed) tables. This is how I handle it:

Check the number of columns

For each row in table.rows
  if row.cells.count < expectedRows
    'You know you are lacking rows
  else
    'Normal processing
  end if
Next

or Go through each cell if you want all the data anyway

For each row in table.rows
  For each cell in row.cells
    'Process individual cells
  Next
Next

None of those work if cells were merged vertically.

answered May 20, 2015 at 11:12

RSinohara's user avatar

RSinoharaRSinohara

6201 gold badge4 silver badges25 bronze badges

Ципихович Эндрю

1508 / 478 / 56

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

Сообщений: 8,008

1

28.06.2011, 15:06. Показов 3679. Ответов 5

Метки нет (Все метки)


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

я думал, что эти строки

Visual Basic
1
2
3
4
5
6
7
For w = 1 To ActiveDocument.Tables.Count
Set oTbl = ActiveDocument.Tables(w)
Set oCell = oTbl.Range.Cells(1)
For Each oCell In ActiveDocument.Tables(w).Range.Cells
oCell.Range.Text = Trim(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2))
Next
Next w

проходят по всем ячейкам таблицы, увы заглядывают только в 1 ячейку, как подправить???
Не люблю эти For Each



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

28.06.2011, 15:06

5

Busine2009

Заблокирован

28.06.2011, 17:14

2

Код:

Visual Basic
1
2
3
4
5
6
7
8
Sub P1()
Dim oTbl As Word.Table, oCell As Word.Cell
For Each oTbl In ActiveDocument.Tables
    For Each oCell In oTbl.Range.Cells
        oCell.Range.Text = Trim(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2))
    Next oCell 
Next oTbl
End Sub



1



Ципихович Эндрю

1508 / 478 / 56

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

Сообщений: 8,008

28.06.2011, 20:01

 [ТС]

3

одним словом с моего кода строку № 3 долой и всё ОК

Добавлено через 28 минут
голова к вечеру не варит, теперь не могу сообладать с все таблицы Word, только 1е ячейки таблиц
Busine2009, посмотрите пжл, подправьте

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
'1
'все таблицы Word, только 1е ячейки таблиц
For y = 1 To ActiveDocument.Tables.Count
Set oTbl_Cell1 = ActiveDocument.Tables(y)
'эта строка указывает, что только 1 ячейка таблиц
Set oCell_Cell1 = oTbl_Cell1.Range.Cells(1)
For Each oCell_Cell1 In ActiveDocument.Tables(y).Range.Cells
oCell_Cell1.Range.Text = Trim(Left(oCell_Cell1.Range.Text, Len(oCell_Cell1.Range.Text) - 2))
Next
Next y
 
'2
'все таблицы Word, все ячейки таблиц
Dim oTblWord As Word.Table
Dim oCellWord As Word.Cell
 
For Each oTblWord In ActiveDocument.Tables
    For Each oCellWord In oTblWord.Range.Cells
        oCellWord.Range.Text = Trim(Left(oCellWord.Range.Text, Len(oCellWord.Range.Text) - 2))
    Next oCellWord
Next oTblWord
 
'3
'все ячейки таблицы ... Word
Dim oTbl As Word.Table
Dim oCell As Word.Cell
 
Set oTbl = ActiveDocument.Tables(1)
    For Each oCell In oTbl.Range.Cells
        oCell.Range.Text = Trim(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2))
    Next oCell



0



Busine2009

Заблокирован

28.06.2011, 20:20

4

Все таблицы Word, только первые ячейки таблиц:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub P1()
'Все таблицы Word, только первые ячейки таблиц.
Dim i As Integer
Dim oTbl As Word.Table
For Each oTbl In ActiveDocument.Tables
    'эта строка указывает, что только 1 ячейка таблиц
    With oTbl.Range.Cells(1).Range
        .Text = Trim(Left(.Text, Len(.Text) - 2))
    End With
Next oTbl
End Sub

Все таблицы Word, все ячейки таблиц:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub P2()
'Все таблицы Word, все ячейки таблиц.
Dim oTblWord As Word.Table
Dim oCellWord As Word.Cell
For Each oTblWord In ActiveDocument.Tables
    For Each oCellWord In oTblWord.Range.Cells
        oCellWord.Range.Text = Trim(Left(oCellWord.Range.Text, Len(oCellWord.Range.Text) - 2))
    Next oCellWord
Next oTblWord
End Sub

Одна таблица Word, все ячейки:

Visual Basic
1
2
3
4
5
6
7
8
9
Sub P3()
'Все ячейки для одной таблицы.
Dim oTbl As Word.Table
Dim oCell As Word.Cell
Set oTbl = ActiveDocument.Tables(1)
For Each oCell In oTbl.Range.Cells
    oCell.Range.Text = Trim(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2))
Next oCell
End Sub



1



1508 / 478 / 56

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

Сообщений: 8,008

28.06.2011, 20:25

 [ТС]

5

и чтобы счасть было полным как будет таблица 1, только ячейки 1 строки??
Спасибо



0



Busine2009

Заблокирован

28.06.2011, 20:52

6

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub P3()
'Первая таблица в активном документе, первая строка.
'Будет ошибка, если ячейки будут объединены.
Dim oRow As Word.Row
Dim oCell As Word.Cell
Set oRow = ActiveDocument.Tables(1).Rows(1)
For Each oCell In oRow.Cells
    oCell.Range.Text = Trim(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2))
Next oCell
End Sub

В этом случае сложней ориентироваться, т.к. ошибка возникнет, если ячейки объединены. Надо конкретную ситуация рассматривать.



1



IT_Exp

Эксперт

87844 / 49110 / 22898

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

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

28.06.2011, 20:52

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

Сохранения ворда!
Как сохранить документ ворд под именем через Edit… У меня Edit_ом будет фамилия и нужно чтоб ворд…

Заговор ворда
помните такой прикол? наберите в программе строку &quot;правоспособность-способность лица иметь…

Из ворда — в лотус
Коллеги, накидайте советов по наиболее оптимальной связке MS Word и лотуса. На тех машинах, где…

текст из ворда
в какой компонент можно скопировать текст из ворда, причем в тексте присутствуют формулы MS…

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

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

6

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

Цикл For… Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For… Next.

Цикл For… Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла — счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать цикл For Each… Next.


For counter = start To end [ Step step ]

    [ statements ]

    [ Exit For ]

    [ statements ]

Next [ counter ]


For счетчик = начало To конец [ Step шаг ]

    [ операторы ]

    [ Exit For ]

    [ операторы ]

Next [ счетчик ]


В квадратных скобках указаны необязательные атрибуты цикла For… Next.

Компоненты цикла For… Next

Компонент Описание
counter Обязательный атрибут. Числовая переменная, выполняющая роль счетчика, которую еще называют управляющей переменной цикла.
start Обязательный атрибут. Числовое выражение, задающее начальное значение счетчика.
end Обязательный атрибут. Числовое выражение, задающее конечное значение счетчика.
Step* Необязательный атрибут. Оператор, указывающий, что будет задан шаг цикла.
step Необязательный атрибут. Числовое выражение, задающее шаг цикла. Может быть как положительным, так и отрицательным.
statements Необязательный** атрибут. Операторы вашего кода.
Exit For Необязательный атрибут. Оператор выхода из цикла до его окончания.
Next [ counter ] Здесь counter — необязательный атрибут. Это то же самое имя управляющей переменной цикла, которое можно здесь не указывать.

*Если атрибут Step отсутствует, цикл For… Next выполняется с шагом по умолчанию, равному 1.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For… Next

Вы можете скопировать примеры циклов в свой модуль VBA, последовательно запускать их на выполнение и смотреть результаты.

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

Sub test1()

Dim i As Long

  For i = 1 To 10

    Cells(i, 1) = i

  Next

End Sub

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

Sub test2()

Dim i As Long

  For i = 1 To 10 Step 3

    Cells(i, 2) = i

  Next

End Sub

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

Sub test3()

Dim i As Long

  For i = 0 To 9 Step 1

    Cells(i + 10, 3) = i + 10

  Next

End Sub

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:

Sub test4()

Dim i As Long

  For i = 0 To 9 Step 3

    Cells(i + 10, 4) = i + 10

  Next

End Sub

Вложенный цикл

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

Sub test5()

Dim i1 As Long, i2 As Long

  For i1 = 1 To 10

‘Пятой ячейке в строке i1 присваиваем 0

    Cells(i1, 5) = 0

      For i2 = 1 To 4

        Cells(i1, 5) = Cells(i1, 5) + Cells(i1, i2)

      Next

  Next

End Sub

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For… Next:

Sub test6()

Dim i As Long

  For i = 1 To 10

    Cells(i, 6) = Choose(i, «Медведь», «Слон», «Жираф», «Антилопа», _

    «Крокодил», «Зебра», «Тигр», «Ящерица», «Лев», «Бегемот»)

  Next

End Sub

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Sub test7()

Dim i As Long

  For i = 1 To 10

    If Cells(i, 6) = «Крокодил» Then

      Cells(i, 7) = «Он съел галоши»

      Exit For

        Else

      Cells(i, 7) = «Здесь был цикл»

    End If

  Next

End Sub


Результат работы циклов For… Next из примеров:

Результат работы циклов For... Next из примеров

Результат работы циклов For… Next

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For… Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

For i = 1 To 20 Step 2

For i = a To b Step c

For i = a 3 To 2b + 1 Step c/2  

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

‘Значения атрибутов до округления

For i = 1.5 To 10.5 Step 2.51

‘Округленные значения атрибутов

For i = 2 To 10 Step 3  

Старайтесь не допускать попадания в тело цикла For… Next неокругленных значений аргументов, чтобы не получить непредсказуемые результаты его выполнения. Если без дробных чисел не обойтись, а необходимо использовать обычное округление, применяйте в коде VBA функцию рабочего листа WorksheetFunction.Round для округления числа перед использованием его в цикле For… Next.


Понравилась статья? Поделить с друзьями:
  • Таблица аргумент функции excel
  • Таблица ral в excel
  • Таблица word связана с
  • Таблица анализа шаблон для excel
  • Таблица opendocument в excel