2014-10-09 2 views
0

Надеюсь, это будет легко. У меня есть документ Word, заполненный флажками. Есть ли способ доступа к этим флажкам в виде коллекции, которую я могу выполнить, и проверить/установить свойства, такие как идентификатор и значение?Word 2010 VBA Checkboxes

Для справки, я уже пробовал коллекцию ActiveDocument.ContentControls; Пусто. Я также пробовал ActiveDocument.Fields. Это фактически содержит то же количество флажков, что и на странице, но я не могу отдать его флажку для доступа к свойствам, которые мне нужны.

Последний вопрос: можно ли динамически назначить обработчик события клику?

Спасибо заранее

+0

Какую версию слова вы используете? Кроме того, являются ли флажки «нормальными» или объектами ActiveX? –

+0

Word 2010. Я не уверен, знаете ли вы, как быстро проверить? Если это помогает, это тип Microsoft Forms 2.0 CheckBox – Ryuu

+0

Щелкните правой кнопкой мыши на объекте и посмотрите, есть ли у вас запись «Управление форматом ...» в контекстном меню. Если да, то это ActiveX. Если это не нормальный флажок или устаревший (BTW, сколько лет этот документ?). Предложение: поставьте версию Word в своем сообщении для всеобщего обозрения. –

ответ

0

Совокупность всех полей ActiveX, внедренных в документ (скажем, его имя ThisDocument) является коллекция ThisDocument.Fields. Элементами этой коллекции являются объекты класса Field.

Для запроса стоимости объектов в этой коллекции, вы бы использовать что-то вдоль линий:

ThisDocument.Fields.Item(1).OLEFormat.Object.Value 

Чтобы добавить код в обработчики событий, просто щелкните правой кнопкой мыши на элементе управления ActiveX, и затем выберите «Просмотреть код» в контекстном меню. Вы получите обработчик события Нажмите:

Private Sub CheckBox1_Click() 
    ' empty if event handler not set, VBA code otherwise ' 
End Sub 

Чтобы вставить код динамически, вам нужно манипулировать модуль кода, и добавить строку обработчиков событий по линии. Это может быть сложно, но, в принципе, вы могли бы сделать что-то вроде:

ThisDocument _ 
    .VBProject _ 
    .VBComponents(ThisDocument.CodeName) _ 
    .CodeModule _ 
    .InsertLines(<<Line>>, <<String>>) 

где <<Line>> где вы хотите вставить (номер), и <<String>> текст, который вы хотите вставить. Будьте осторожны, чтобы не вставлять середину существующего Sub, Function или определение пользовательского типа (очевидно).

+0

Возможно ли динамически установить для него обработчик событий onclick? – Ryuu

+0

Как ни странно, по мере того, как вы опубликовали это, мне удалось найти очень похожий код с помощью повторного поиска в googling и head-desking. Конечно, ваш код более информативен и немного чище. Теперь, чтобы выяснить, как сделать динамическую вставку кода только один раз. Однако просто вопрос, является ли это единственным способом назначить обработчик On_Click для флажка? – Ryuu

+0

@Ryuu Нет. Как я уже сказал, есть также * ручной способ: вы щелкните правой кнопкой мыши все элементы управления и введите/вставьте код. Это не так весело, как добавлять их программно, но у вас будет меньше головных болей. :-) –

Смежные вопросы