Страница 1 из 1

Автозаполнение свойств документа (Word)

Добавлено: 15 сен 2005, 05:29
Sokl
Почти ничего раньше не делал в VBA-Word :? (всегда, в основном, с Excel)... А тут Word. В общем-то можно книгу почитать, но форум лучше! Хотя книжку тоже почитаю вечерком. Короче...

1. В документе есть таблица;
2. Состав ячеек таблицы строго стандартизован (типа штампа на чертеже);
3. При сохранении документа необходимо данные из таблицы переносить в свойства документа
Примечание: в ячейках таблицы есть просто текст, вводимый каждый раз при создании документа вручную, а есть поля ("Имя файла", "Дата создания" и др.)

В связи с этим основные вопросы:
1. Как получить текст из какой-то определенной ячейки таблицы в документе?
2. По какому событию вносить изменения в свойства документа (я думал в Word'е есть что-то вроде Excel'евского ".BeforeSave")?

Был бы очень признателен :P за высказывание Вашего варианта решения задачи. Спасибо.

Добавлено: 15 сен 2005, 10:14
treider
Предлагаю следующий варииант решения
1. Создаем Class Modul- называем его скажем WordObject
2.Пишем в нем следующие

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

 Public WithEvents App As Word.Application 
3. Инициализируем класс - уже не посредственно в тексте проекта Word

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

Dim X As New WordObject
Sub Document_Open()
    Set X.App = Word.Application
End Sub
4. Тепер в описании класса WordObject мы можем описывать событиийные процедуры. Есть и BeforeSave
В итоге ClassModule WordObject может содержать например следующие

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

Public WithEvents App As Word.Application

Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
MsgBox (ActiveDocument.Tables.Item(1).Cell(1, 1))
End Sub
Будет выдовать сообщение при сохранении документа

Добавлено: 15 сен 2005, 11:24
Sokl
Опыт объектно-ориентированного программирования я имею, но не в VBA (не разбирался с созданием пользовательских классов).

Судя по приведенным примерам:
1. Создаем новый класс - WordObject
2. Этот класс имеет одно свойство "App" тип свойства Word.Application
3. При открытии документа создаем объект X класса WordObject и в свойство App передаем "весь Word.Application"
4. Но вот дальше? По поводу описания событийной процедуры я не понял? Почему мы пишем App_DocumentBeforeSave, если Document не имел раньше BeforeSave, то как он узнает, что это такое?

В общем, я слабоват пока в вопросах Class Modules VBA, сделал всё, как Вы мне написали, но событие BeforeSave не работает? Что я сделал не так :?:

И вообще, люди добрые :!: У меня огромная просьба! Пожалуйста, если не жалко, поделитесь какими-нибудь программками, использующими Class Modules VBA! Давно возникла необходимость создавать свои классы, а тратить деньги на книжки не хочется, особенно на те, в которых мне в сто первый :mrgreen: раз будут говорить о классах, объектах, свойствах, методах, событиях... Просто нужен пример, показывающий то, как это все делать в VBA. Спасибо!

Добавлено: 15 сен 2005, 11:46
treider
Событие содержится не классе Document а в классе Application. Получается, что класс WordObject ставится классом Application вашего Word-а и внутри этого класса могут быть описаны события. И если есть Email могу выслать Exempl.

Добавлено: 15 сен 2005, 12:57
Sokl

Добавлено: 16 сен 2005, 05:56
Sokl
treider, спасибо! Все получилось!