Почти ничего раньше не делал в VBA-Word :? (всегда, в основном, с Excel)... А тут Word. В общем-то можно книгу почитать, но форум лучше! Хотя книжку тоже почитаю вечерком. Короче...
1. В документе есть таблица;
2. Состав ячеек таблицы строго стандартизован (типа штампа на чертеже);
3. При сохранении документа необходимо данные из таблицы переносить в свойства документа
Примечание: в ячейках таблицы есть просто текст, вводимый каждый раз при создании документа вручную, а есть поля ("Имя файла", "Дата создания" и др.)
В связи с этим основные вопросы:
1. Как получить текст из какой-то определенной ячейки таблицы в документе?
2. По какому событию вносить изменения в свойства документа (я думал в Word'е есть что-то вроде Excel'евского ".BeforeSave")?
Был бы очень признателен :P за высказывание Вашего варианта решения задачи. Спасибо.
Автозаполнение свойств документа (Word)
Модератор: Naeel Maqsudov
Предлагаю следующий варииант решения
1. Создаем Class Modul- называем его скажем WordObject
2.Пишем в нем следующие
3. Инициализируем класс - уже не посредственно в тексте проекта Word
4. Тепер в описании класса WordObject мы можем описывать событиийные процедуры. Есть и BeforeSave
В итоге ClassModule WordObject может содержать например следующие
Будет выдовать сообщение при сохранении документа
1. Создаем Class Modul- называем его скажем WordObject
2.Пишем в нем следующие
Код: Выделить всё
Public WithEvents App As Word.Application
Код: Выделить всё
Dim X As New WordObject
Sub Document_Open()
Set X.App = Word.Application
End Sub
В итоге 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
Опыт объектно-ориентированного программирования я имею, но не в 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. Спасибо!
Судя по приведенным примерам:
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. Спасибо!
Событие содержится не классе Document а в классе Application. Получается, что класс WordObject ставится классом Application вашего Word-а и внутри этого класса могут быть описаны события. И если есть Email могу выслать Exempl.
treider, спасибо! Все получилось!