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.
asked Mar 23, 2013 at 9:39
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
8081 gold badge16 silver badges25 bronze badges
answered Mar 23, 2013 at 10:45
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
8081 gold badge16 silver badges25 bronze badges
answered Aug 22, 2018 at 17:49
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
RSinoharaRSinohara
6201 gold badge4 silver badges25 bronze badges
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||
1 |
||||
28.06.2011, 15:06. Показов 3679. Ответов 5 Метки нет (Все метки)
я думал, что эти строки
проходят по всем ячейкам таблицы, увы заглядывают только в 1 ячейку, как подправить???
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
28.06.2011, 15:06 |
5 |
Заблокирован |
||||
28.06.2011, 17:14 |
2 |
|||
Код:
1 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||
28.06.2011, 20:01 [ТС] |
3 |
|||
одним словом с моего кода строку № 3 долой и всё ОК Добавлено через 28 минут
0 |
Заблокирован |
||||||||||||
28.06.2011, 20:20 |
4 |
|||||||||||
Все таблицы Word, только первые ячейки таблиц:
Все таблицы Word, все ячейки таблиц:
Одна таблица Word, все ячейки:
1 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
28.06.2011, 20:25 [ТС] |
5 |
и чтобы счасть было полным как будет таблица 1, только ячейки 1 строки??
0 |
Заблокирован |
||||
28.06.2011, 20:52 |
6 |
|||
Первая таблица в активном документе, первая строка:
В этом случае сложней ориентироваться, т.к. ошибка возникнет, если ячейки объединены. Надо конкретную ситуация рассматривать.
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
28.06.2011, 20:52 |
Помогаю со студенческими работами здесь Сохранения ворда! Заговор ворда Из ворда — в лотус текст из ворда Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 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
2,6924 gold badges22 silver badges38 bronze badges
asked Dec 18, 2014 at 17:18
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.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
Такие данные на активном листе 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.