Ole -word, как заполнить таблицу в таблице ?

  • Автор темы Sandro
  • Дата начала
S

Sandro

Прислали долбанный бланк сделанный каким наркоманом, в нём сплошь и рядом таблицы в таблице, это всё надо автоматически заполнять. Обычно делал так

worddoc.Tables(номер таблицы).Cell(строка,столбец).Range.Select
worddoc.Tables(номер таблицы).Cell(строка,столбец).Range.Text="Текст"

Но в шаблоне 2 таблицы и одна вставленна в другую, пытаюсь обратиться к 3-й таблице а такой не ((( Что делать не пойму
 
H

hosm

VBA хелп есть?
есть примеры к TopLevelTables Property, NestingLevel Property,
т.е. к вложенной обращаемся через ячейку внешней, в которой она расположена.
Можно проверять Count, обрабатывать через For Each ...
кстати, если в шаблоне всего 2 таблицы и одна из них вставлена в другую, откуда возьмется еще 3-я? %)
 
S

Sandro

Спасиб. Весь день в проблемах ))), голова не варит, таблицы 3. В одну из них вставлена другая. Мануала нет, не установил при установке офиса )))
 
H

hosm

совет - доставьте этот хелп - поможет в некоторых случаях ;)
сама с такими таблицами мало работала - тут надо либо знать, где эта вложенная таблица сидит, либо проверять коллекцию объектов Tables для каждой ячейки нужной таблицы, чтоб найти, в какой ячейке расположена вложенная таблица.

собственно, пример из хелпа нужен Вам только как иллюстрация обращения к внутренним таблицам (строит 3 таблицы, показывает уровень вложенности в 1ю ячейку, выделяет последнюю - самую вложенную):
TopLevelTables Property
Returns a Tables collection that represents the tables at the outermost nesting level in the current range or selection. Read-only.

Remarks
This method returns a collection containing only those tables at the outermost nesting level within the context of the current range or selection. These tables may not be at the outermost nesting level within the entire set of nested tables.

For information about returning a single member of a collection, see Returning an Object from a Collection.

Example
This example creates a new document, creates a nested table with three levels, and then fills the first cell of each table with its nesting level. The example selects the second column of the second-level table and then selects the first of the top-level tables in this selection. The innermost table is selected, even though it isn't a top-level table within the context of the entire set of nested tables.

Код:
Documents.Add
ActiveDocument.Tables.Add Selection.Range, _
3, 3, wdWord9TableBehavior, wdAutoFitContent
With ActiveDocument.Tables(1).Range
.Copy
.Cells(1).Range.Text = .Cells(1).NestingLevel
.Cells(5).Range.PasteAsNestedTable
With .Cells(5).Tables(1).Range
.Cells(1).Range.Text = .Cells(1).NestingLevel
.Cells(5).Range.PasteAsNestedTable
With .Cells(5).Tables(1).Range
.Cells(1).Range.Text = _
.Cells(1).NestingLevel
End With
.Columns(2).Select
Selection.TopLevelTables(1).Select
End With
End With
 
S

Sandro

Спасиб OKEN, выручаешь который раз, нашл дистрибутив, хэлп доставил ))))
 
S

Sandro

OKEN, ещё вопросик, возникла такая проблемка , в доковском фокументе заполняю поля worddoc.FormFields(№).result ="Текст"
выдаётся ошибка Microsoft Word: Слишком длинная строка.
В самом ворде на поле ограничений по размеру нет там поле до 32000 символов (((( Не пойму откуда эта ошибка ((((
 
H

hosm

не знаю точно, лично я с ворд-полями с длинным текстом не работала, возможно, позже переспрошу.
Заполняли шаблон когда-то через find-replace, а не поля, делили длинную строку на кусочки (порядка 255 символов, насколько я помню)...
 
H

hosm

отписала предложенный RonTermit в лотус-ветке вариант комментарием в тему КБ лотуса ([post="158401"]альтернатива отчету в поля ворд[/post])
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!