По умолчанию VBA обеспечивает легкий доступ к типам, необходимым для работы с элементами управления формами, размещенными на листе.
В редакторе VBA либо нажмите функциональную клавишу «F2», либо в меню «Вид» -> «Обозреватель объектов». Откроется окно «Обозреватель объектов». Если вы ищете библиотеку Excel для «OptionButton», вы не найдете ничего полезного для данной задачи.
Однако, если вы щелкните правой кнопкой мыши в «Library Window» и нажмите на кнопку «Показать Hidden членов», вы будете вознаграждены с полным списком классов, которые вы можете использовать. После того, как вы включили «Скрытые члены», Intellisense VBA также продемонстрирует вам эти классы.
элементов формы добавляются в рабочий лист как Shape, но сам объект Shape не имеет какого-либо имущества, что позволяет увидеть, если кнопка Option проверяется или нет. Вы можете получить доступ к OptionButton через свойство «OLEFormat.Object», но на данный момент это всего лишь тип «Объект». Однако вы можете применить объект к элементу Excel.OptionButton, как показано в следующем коде. Вы заметите, что я предисловие «OptionButton» с именем пространства имен «Excel» (Library). Делая это, Intellisense начнет работу, как только вы наберете «.». и предоставить вам список классов на выбор. Класс OptionButton предоставляет свойство «Значение», которое позволяет проверить, проверено ли оно (значение = 1) или не отмечено (значение = 0).
Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Worksheets.Item("Sheet2")
Dim btn As Shape
Set btn = ws.Shapes.Item("Option Button 1")
Dim optBtn1 As Excel.OptionButton
Set optBtn1 = Sheet2.Shapes.Item("Option Button 1").OLEFormat.Object
If optBtn1.Value = 1 Then ' it is checked
Debug.Print "Option Button 1 is checked"
End If
Теперь это все работает, но теперь, когда у вас есть доступ ко Hidden членов, вы также имеете доступ к коллекции OptionButtons, которая существует на объекте WorkSheet, и вы можете пропустить доступ к нему в качестве формы объекта.
Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Worksheets.Item("Sheet2")
Dim optBtn2 As Excel.OptionButton
Set optBtn2 = ws.OptionButtons.Item("Option Button 2")
If optBtn2.Value = 1 Then ' it is checked
Debug.Print "Option Button 2 is checked"
End If
Благодарим за подробный ответ. Я понял, как ссылаться на него, наконец, на Activesheet.Optionbuttons («myButton»), как у вас есть на дне. Я не думаю, что могу установить кнопки, как у вас есть, потому что мой рабочий лист позволяет пользователю скопировать его, и я думаю, что это создаст конфликт имен, следовательно, я использую Activesheet. Считаете ли вы, что все это было бы проще, если бы вместо AcitveX OptionButton? – KingKong
Как вы ссылаетесь на рабочий лист, это не имеет значения. Если вам нужен ActiveSheet, используйте его. Использование элементов управления формы вместо элементов управления ActiveX рекомендуется из-за многих странных проблем, возникающих в последних версиях Excel при использовании элементов управления ActiveX. Например, см. Http://blogs.technet.com/b/the_microsoft_excel_support_team_blog/archive/2012/11/27/activex-and-form-controls-resize-themselves-when-clicked-doing-a-print-preview -или-resolution-changed.aspx. – TnTinMn
Я использовал метод «OptionButton ob.Value», и я получаю 1.0 для значения, если он установлен, и -4169, если флажок OptionButton не установлен. Любая идея, откуда приходит -4169. Правильно ли значение 1.0 равно как значение true? – AudioDev