2016-03-20 3 views
0

Я пытаюсь разработать динамическую форму пользователя в документе Word, которая создаст радиокнопку ActiveX с общим именем, а затем переименуйте созданный переключатель, чтобы сделать его определенным числом на основе по его расположению в форме.Изменение свойств имени компонента ActiveX Динамически в Word

До сих пор я считаю, что у меня есть все компоненты для написания кода, потому что я могу создать кнопку. Я создаю кнопку, используя VBA для импорта быстрой части, которая имеет переключатель с определенным именем radioButtonX, и я могу изменить свойство имени этого переключателя на radioButton1, например. Проблема, с которой я сталкиваюсь, заключается в том, что мой код введет быструю часть с общим именем radioButtonX, а затем не сможет изменить имя кнопки радио, потому что он говорит, что radioButtonX не существует. Тем не менее, я могу вручную запустить вторую часть кода после того, как radioButtonX был вставлен, и я могу успешно изменить имя кнопки радио, что дает мне конечный результат, который я ищу в двух отдельных шагах.

Я являюсь самообучающимся скриптом VBA за последний год, поэтому я далек от эксперта по кодированию. Некоторые из стратегий, которые я принял до сих пор были:

  • Put в ждет (думая, что приостановив сценарий даст сценарий времени, чтобы распознать новый переключатель)
  • Расстались код в различные подводные лодки один из которых создает радиокнопку, а затем вызывает подменю для изменения имени (надеясь, что это будет обновлять VBA)
  • Разделил код на разные модули, имеющие один модуль, создающий радиокнопку, а затем вызовите модули для изменения имени (надеясь это обновит VBA)

Я надеялся на некоторые советы, стратегии или примеры кода, которые я могу использовать, чтобы заставить VBA распознать новый переключатель, который я вставил во время работы кода. Другая мысль, что у меня была, может быть, есть команда, которая существует, которая будет иметь VBA обновить свои знания переменных, но мне не повезло найти что-то подобное в моих веб-поисках до этого момента.

+2

Это будет очень сложно ответить на этот вопрос, не видя ваш код. Не могли бы вы изменить свой вопрос, чтобы включить его (в частности, часть, в которой вы создаете и добавляете переключатель). – Ambie

ответ

0

Я попытался упростить код, над которым работал, и вытащить код, который будет выполнять функцию, которую я запрашивал. Выполнение более простого кода было успешным и приведено ниже.

Private Sub AddRadioButton() 
    Selection.TypeText Text:="TestRadioButton" 
    Selection.Range.InsertAutoText 
    ActiveWindow.View.ShowXMLMarkup = wdToggle 

    ChangeButtonName 
End Sub 

Private Sub ChangeButtonName() 
    ThisDocument.radioButtonX.Name = "radioButton1" 
End Sub 

Чтобы этот сценарий работал, вы должны создать быструю часть или переключатель, названный TestRadioButton. Я думаю, что теперь основная проблема связана с временем, которое выглядело так, будто оно не работает, потому что сценарий, из которого пришел этот код, использует быструю часть с несколькими универсальными переключателями в нем, поэтому выполнение скрипта не распознает новые переключатели во время бега.

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