Определение имени таблицы в Ворд

Программирование на Visual Basic for Applications
votmax
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 30.11.2002 (Сб) 21:05

Определение имени таблицы в Ворд

Сообщение votmax » 16.09.2008 (Вт) 9:14

Всем привет!
У меня есть такой вопрос: я создал документ, нарисовал сам в нем табличку и научился работать с ячейками, т.е. вставлять в них текст, форматирование и т.д. НО! Если я открываю сторонний документ и пытаюсь подключиться к таблице и далее к ячейке, то появляется ошибка, типа "объект не найден", хотя в документе всего 3 таблицы и свойство count=3, а подключиться как ...tables(1)... не получается. Вот и возникает вопрос, как подключиться к этой табличке? Как узнать ее имя?

votmax
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 30.11.2002 (Сб) 21:05

Re: Определение имени таблицы в Ворд

Сообщение votmax » 16.09.2008 (Вт) 9:19

Т.е. как я понимаю, по умолчанию, таблицам присваиваются новера 1,2,3... , вот и при трех таблицах свойство count=3, а , что если при создании таблице как то присвоено уникаьное имя? Я даже пробовал ...tables("Таблица 1").

Подскажите плиззз.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Определение имени таблицы в Ворд

Сообщение Viper » 16.09.2008 (Вт) 10:09

Обращаться к таблицам можно либо по индексам, либо по именам. Как обращаещься ты? Пример кода приведи.
Весь мир матрица, а мы в нем потоки байтов!

votmax
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 30.11.2002 (Сб) 21:05

Re: Определение имени таблицы в Ворд

Сообщение votmax » 16.09.2008 (Вт) 10:38

Я делаю вот так:

Код: Выделить всё

Dim WordApp As Word.Application ' экземпляр приложения
Dim DocWord As Word.Document ' экземпляр документа
Dim TableWord As Word.Table

DocWord.Tables(1).Application.Selection.Tables(1).Cell(2, 2).Range.Text = "Привет!"


И получается, что в ячейку 2.2 таблицы 1 помещается текст "Привет!"

А два слова Tables(1) необходимы для того, чтобы далее правильно применить форматирование к ячейке(это я натыкался уже:-) )

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Определение имени таблицы в Ворд

Сообщение Viper » 16.09.2008 (Вт) 13:49

Ну так правильно
Весь мир матрица, а мы в нем потоки байтов!

votmax
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 30.11.2002 (Сб) 21:05

Re: Определение имени таблицы в Ворд

Сообщение votmax » 16.09.2008 (Вт) 14:27

Что правильно то? :(
Я же и пишу, что открыл сторонний документ, в котором три таблицы, и такая строчка :
Код: Выделить всё
DocWord.Tables(1).Application.Selection.Tables(1).Cell(2, 2).Range.Text = "Привет!"


- не действует!

Выдается ошибка, что объект не найден. Вот я и думаю, может у таблицы есть какой нибуть идентификатор и нужно именно его подставлять в Tables()? Вот только как определить этот идентификатор...???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Определение имени таблицы в Ворд

Сообщение alibek » 16.09.2008 (Вт) 15:10

Данный код имеет мало смысла.
Ты определись уж, что именно тебе нужно, Selection.Tables(1) или DocWord.Tables(i).
Lasciate ogni speranza, voi ch'entrate.

Goettsch
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.08.2007 (Вт) 1:44

Re: Определение имени таблицы в Ворд

Сообщение Goettsch » 16.09.2008 (Вт) 15:22

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

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

votmax
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 30.11.2002 (Сб) 21:05

Re: Определение имени таблицы в Ворд

Сообщение votmax » 16.09.2008 (Вт) 16:32

Дело в том, что я недавно стал заниматься VBA. Я нашел пример, который открывает документ(созданный мной, в котором вставлена одна табличка) и работает с табличкой.

Код: Выделить всё
Dim WordApp As Word.Application ' экземпляр приложения
Dim DocWord As Word.Document ' экземпляр документа
Dim TableWord As Word.Table

Set WordApp = New Word.Application
WordApp.Visible = True
Set DocWord = WordApp.Documents.Open(C:\primer.doc")
DocWord.Activate

DocWord.Tables(1).Application.Selection.Tables(1).Cell(2, 2).Range.Text = "Привет!"


Все проходит на ура, т.е. открывается документ, и в ячейку 2.2 вставляется : "Привет!"
Но, мне нужно открыть другой документ и в нем произвести те же действия, т.е. я меняю только строчку:

Код: Выделить всё
Set DocWord = WordApp.Documents.Open(App.Path + "\1.doc")


- и запускаю проект опять на исполнение, в этом слуае появляется ошибка:

"ЗАПРАШИВАЕМЫЙ НОМЕР СЕМЕЙСТВА НЕ СУЩЕСТВУЕТ"

Вот я и думаю, может у таблицы есть какой-нибудь идентификатор и нужно именно его подставлять в Tables()?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Определение имени таблицы в Ворд

Сообщение alibek » 16.09.2008 (Вт) 16:40

Прежде всего не надо использовать код, работу которого не понимаешь (хотя бы в принципе).
Данный код:
Код: Выделить всё
DocWord.Tables(1).Application.Selection.Tables(1).Cell(2, 2).Range.Text = "Привет!"

Означает следующее:
В документе DocWord получить первую таблицу. Из таблицы получить ссылку на Word. В Word обратится к выбранному тексту в выбранном документе. Из выбранного текста получить первую по списку таблицу. Из полученной таблицы получить ячейку (2,2). Из полученной ячейки получить объект Range (содержащий контент). В полученный Range задать текст "Привет!".

Из подчеркнутого тебе должно быть понятно, что DocWord.Tables(1) совершено не имеет смысла. С тем же успехом вместо DocWord.Tables(1).Application можно использовать DocWord.Application, WordApp или DocWord.Tables(1).Application.Selection.Tables(1).Cell(2, 2).Range.Application.
Поэтому определись, какая именно таблица тебе нужна (вернее, какой способ адресации, абсолютный или относительный, относительно текущего выделения).
Lasciate ogni speranza, voi ch'entrate.

Goettsch
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.08.2007 (Вт) 1:44

Re: Определение имени таблицы в Ворд

Сообщение Goettsch » 16.09.2008 (Вт) 17:36

to votmax вот это:
Код: Выделить всё
DocWord.Tables(1).Application.Selection.Tables(1).Cell(2, 2).Range.Text = "Привет!"

В Вашем посте выше какая-то ахинея, правильно так:
Код: Выделить всё
DocWord.Tables.Item(1).Cell(Row:=2, Column:=2).Range.Text = "Привет!"

Что касается того, как обращаться к таблицам, то я, честно говоря, не знаю, можно ли давать им какие-то имена (во всяком случае в Word 2000, как в более поздних — не знаю), по-моему к ним можно обращаться только по их позиции в документе : ActiveDocument.Tables — это коллекция с набором всех таблиц текущего документа, соответственно, обращение к таблице 2 будет: ActiveDocument.Tables.Item(2) (Item можно опускать, т.е. …Tables(2)). Правда, у таблицы есть св-во ID (строка), но оно обнуляется при закрытии док-та (т.е. оно не сохраняется вместе с документом). Чтобы иметь возможность оперировать с табл по именам, я советовал бы просто вставлять туда внутрь, например, верхней левой ячейки скрытую закладку и брать таблицу по имени этой закладки.

votmax
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 30.11.2002 (Сб) 21:05

Re: Определение имени таблицы в Ворд

Сообщение votmax » 17.09.2008 (Ср) 15:02

В Вашем посте выше какая-то ахинея


Согласен, что поделаешь... :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

    TopList