VB, Word, вставка строк в таблицу, заполнение
От: tibibo  
Дата: 07.04.05 11:04
Оценка:
Здравствуйте.
Такая мистическая проблема.
Есть формa — документ MS Word. В ней — таблица из одной строки. В программе я добавляю в таблицу несколько строк и заполняю их текстом с помощью TypeText/MoveDown
Теперь сама проблема. Почему-то на одной из форм таблица заполняется неправильно. Нормально заполняется первая строка (которая была с самого начала), а со следующим MoveDown выделение перескакивает свежедобавленные строки и выскакивает за пределы таблицы.
Причём это происходит только если документ заполняется в фоне, без отображения. (wrd.Visible = False). И только на одной форме, которая вроде как не отличается от других.

Может, надо как-то обновлять таблицу/документ после вставки строк?
Re: TypeText'ом пользуются только лузеры!!! ;-)
От: Аноним  
Дата: 10.04.05 19:18
Оценка: 2 (1)
Здравствуйте, tibibo, Вы писали:

T>Есть формa — документ MS Word. В ней — таблица из одной строки. В программе я добавляю в таблицу несколько строк и заполняю их текстом с помощью TypeText/MoveDown

А ты попробуй заполнять таблицу с помощью Table.Cell(m, n).Range.Text, мож тогда всё заработает.
Re[2]: TypeText'ом пользуются только лузеры!!! ;-)
От: tibibo  
Дата: 11.04.05 05:50
Оценка:
А>А ты попробуй заполнять таблицу с помощью Table.Cell(m, n).Range.Text, мож тогда всё заработает.
Тоже вариант, конечно. Спасибо. Только я заранее не знаю, какая это по счёту таблица в коллекции. Там разные формы, но во всех нужная таблица отмечена букмарком. Через него я в нужное место и попадаю. То есть встаёт новая проблема — как получить таблицу, в которой сейчас расположен selection?
Re[3]: А вот это классический ламерский вопрос...
От: Аноним  
Дата: 13.04.05 07:48
Оценка: 2 (1)
Здравствуйте, tibibo, Вы писали:
Нет, я конечно извиняюсь за наезд, но, признаться честно, я на момент прочтения вашего сообщения не знал ответа, а на поиски оного ушло 45 секунд!!!

То есть встаёт новая проблема — как получить таблицу, в которой сейчас расположен selection?
Selection.Tables(1) -- Кстати, так тоже делают лузеры.
Крутые программеры делают так: ThisDocument.Bookmarks.Item("<имя закладки>").Range.Tables(1)

PS: Если Bookmark на ячейку/строку/столбец, то делают так: ThisDocument.Bookmarks.Item("<имя закладки>").Range.Parent, хотя и ...Range.Tables(1) тож покатит.
Re[4]: А вот это классический ламерский вопрос...
От: tibibo  
Дата: 27.04.05 12:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, tibibo, Вы писали:

А>Нет, я конечно извиняюсь за наезд, но, признаться честно, я на момент прочтения вашего сообщения не знал ответа, а на поиски оного ушло 45 секунд!!!
ну, я редко (в первый раз, если честно) забредаю в ВБ, я на с++ пишу обычно. И просто не смог понять, как пользоваться хелпом в этом самом ВБ или как в МСДН почитать об устройстве вордовских объектов. Ну да, это и называется ламерство, вообще-то

А>Selection.Tables(1) -- Кстати, так тоже делают лузеры.

почему? это чревато чем-то плохим?
А>Крутые программеры делают так: ThisDocument.Bookmarks.Item("<имя закладки>").Range.Tables(1)
Ага, работает. Спасибо.
Re[5]: Деламеризация.
От: Аноним  
Дата: 27.04.05 12:39
Оценка:
Здравствуйте, tibibo, Вы писали:

А>>Нет, я конечно извиняюсь за наезд, но, признаться честно, я на момент прочтения вашего сообщения не знал ответа, а на поиски оного ушло 45 секунд!!!

T>ну, я редко (в первый раз, если честно) забредаю в ВБ, я на с++ пишу обычно. И просто не смог понять, как пользоваться хелпом в этом самом ВБ
Да... там всё просто -- поставил курсор на слово и "тыкай" на {F1}. ;-)
T>или как в МСДН почитать об устройстве вордовских объектов.
В office'ном хелпе всё есть... А про устройство вордовских объектов можно узнать, нажав {F2} (Object Explorer называется) в редакторе VBA. Я лично, только {F2} пользуюсь, а в Help лезу только при крайних приступах тупизма. ;)

А>>Selection.Tables(1) -- Кстати, так тоже делают лузеры.

T>почему? это чревато чем-то плохим?
Selection, это "неконкретизированный" (не отвечаю за правильность термина, короче это что-то типа (void *)) объект. Для VBA это не очень важно (насколько я знаю, там всёравно всё идёт через IDispath), но в дальнейшем, это может прилично тормознуть прогу -- так что, лучше сразу привыкать!
Когда отлаживаешь прогу, использующую Selection, легко случайно ткнуть мышкой в документе и твой Selection перепрыгнет чёртзнаеткуда -- девушкам в комнате, такие программеры не нравятся. ;)
У меня на глазах, сотню раз, Selection перепрыгивал на другие документы, в "не те" ячейки таблицы и через абзацы, причём всё это во время выполнения макроса происходило... Короче, Selection -- это "жевачка"; если хочешь, чтоб твои проекты "жевачкой" были склеены -- используй Selection и "удачи!".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.