Как использовать события с кнопками Option Button на Userform

Я пытаюсь добавить кнопку выбора из диапазона на листе Excel.

For Each Value In OptionList Set opt = UserForm3.Controls.Add("Forms.OptionButton.1", "radioBtn" & i, True) opt.Caption = Value opt.Top = opt.Height * i opt.GroupName = "Options" UserForm3.Width = opt.Width UserForm3.Height = opt.Height * (i + 2) i = i + 1 Next 

Я хочу создать обработчик событий, чтобы при radiobtn1 кода у пользователя был выбран radiobtn1 . Хотя у меня много ответов, они предназначены для пользовательской формы рабочего листа.

Мое намерение состоит в том, чтобы работать с формой пользователя VBA. Пожалуйста, помогите мне с мыслями.

Существует только один тип пользовательской формы, однако существует [вечная] путаница вокруг двух типов элементов управления, доступных для Excel, – усугубляется контрастной терминологией, используемой различными онлайн-источниками. (Только те элементы управления ActiveX применяются к пользовательским формам.) Возможно, я смогу помочь пролить некоторый свет, поставив его на слова, которые помогут мне понять.


Обзор:

  • Существует два типа элементов управления: элементы управления форматом и элементы управления ActiveX :

    • Оба типа элементов управления могут использоваться на листах, но для пользовательских форм могут использоваться только элементы управления ActiveX .

    • Элементы управления формой являются частью коллекции Shapes (подобно Drawing Objects) и, таким образом, называются: * <code/> лист </ code> * ** <code>. </ code> </code><code> Формы ( ** * controlname * ** ") < / код> **">

    • Элементы ActiveX в основном являются частью рабочего листа и поэтому называются:
      * <code/> рабочий лист </ code> * ** <code>. </ code> ** * </code><code> controlname </ code> *

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

  • На некоторых сайтах также обсуждается форма данных . Это не что иное, как пользовательская форма, специально предназначенная для ввода / обработки данных, поэтому было бы разумнее назвать их (более знакомое звучание) «Userform Userform» .

  • Офисная документация также иногда ссылается на рабочий лист как форму. Хотя это технически правильно, не позволяйте этому путать вас. Подумайте, что слово «форма» используется в общем смысле :

    словарь изображение: форма


Два типа элементов управления

  1. Контроль формы

  2. Элементы управления ActiveX

Оба выглядят, ведут себя и контролируются одинаково, но не одинаково. (Перечислите здесь .)

Например, давайте сравним два типа Combo Boxes . В некоторых языках программирования сопоставимые элементы управления называются «раскрывающимся меню» или «раскрывающимся списком» . В Excel у нас есть « Form Control Combo Box » и « ActiveX Control Combo Box » :

сравнить типы управления (Нажмите, чтобы увеличить.)

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


различия между элементами управления

(Источник: мой ответ )


Об элементах ActiveX и связанных с ними проблемах безопасности

Элемент управления ActiveX является расширением для VBA Toolbox. Вы используете элементы управления ActiveX так же, как и любые стандартные встроенные элементы управления, такие как элемент управления CheckBox. Когда вы добавляете элемент управления ActiveX в приложение, он становится частью среды разработки и выполнения и предоставляет новые функции для вашего приложения.

  • Элемент управления ActiveX реализуется как сервер в процессе (обычно это небольшой объект), который может использоваться в любом контейнере OLE. Обратите внимание, что полная функциональность элемента управления ActiveX доступна только при использовании в контейнере OLE, предназначенном для управления элементами ActiveX.

  • Этот тип контейнера, называемый контейнером управления или объектом управления , может управлять элементом управления ActiveX с использованием свойств и методов элемента управления и получать уведомления из элемента управления ActiveX в виде событий. На следующем рисунке показано это взаимодействие:

    пример
    ( Источник : это и это )

Смотрите также:

  • Википедия: ActiveX

  • Symantec.com: Обсуждение уязвимостей ActiveX

  • How-To Geek: какие элементы управления ActiveX и почему они опасны


Кнопки выбора (кнопки радио)

В Excel два типа переключателей на самом деле называются опциональными кнопками . Чтобы еще больше запутать вопросы:

  • по умолчанию для OptionButton1 управления формой является OptionButton1 .

  • имя по умолчанию для элемента управления ActiveX - Option Button 1 .

Хороший способ их отличить - открыть список свойств элемента управления (на ленте на вкладке «Разработка» или щелкнуть правой кнопкой мыши элемент управления и выбрать « Properties или нажать « F4» ), потому что элемент управления ActiveX имеет гораздо больше опций, чем более простая форма контроль.

Опциональные кнопки и флажки могут быть связаны друг с другом (поэтому из группы можно выбрать только один параметр), поместив их в общий групповой ящик .

Выберите элемент управления групповым полем, а затем удерживайте Ctrl, одновременно выбрав каждый из других элементов управления, которые вы хотите сгруппировать. Щелкните правой кнопкой мыши элемент управления групповым полем и выберите GroupingGroup .

Первые две ссылки ниже представляют собой отдельные наборы инструкций для обработки каждого типа кнопки выбора.


СОБЫТИЯ ПО ОБРАБОТКЕ КОНТРОЛЯ:

События управления формой (только событие Click )

События управления формой могут реагировать только на одно событие: событие Click . (Подробнее см . Здесь .) Обратите внимание, что этот раздел не применяется к пользовательским формам, поскольку они используют только элементы управления ActiveX.

Чтобы добавить процедуру для события Click :

  • Щелкните правой кнопкой мыши элемент управления и выберите Assign Macro...

  • В диалоговом окне «Назначить макрос»:

    • Выберите существующую процедуру и нажмите « ОК» , или,

    • Создайте новую процедуру в VBE, нажав кнопку Создать ... или,

    • Запишите новый макрос, нажав « Запись ...» или,

    • Чтобы удалить назначенное событие, удалите его имя из поля « Macro Name и нажмите « ОК» .

    назначать события (Нажмите, чтобы увеличить.)

Чтобы переименовать, отредактировать или удалить существующие macros, нажмите Alt + F8, чтобы открыть интерфейс Macro :

Диалог макросов


События управления ActiveX

Элементы управления ActiveX имеют более обширный список событий, на которые они могут быть настроены для ответа.

Чтобы назначить события элементам ActiveX, щелкните правой кнопкой мыши элемент управления и выберите « View Code . В VBE вы можете вставить код или выбрать определенные события из раскрывающегося списка в правом верхнем углу windows VBE.

События activeX (Нажмите, чтобы увеличить.)

Управление обработкой событий в пользовательской форме:

События также могут использоваться в элементах управления пользовательскими формами. Поскольку только элементы управления ActiveX могут быть размещены в пользовательской форме, у вас будет компромисс «больше кодирования и больше функциональности».

Элементы ActiveX добавляются к пользовательским формам так же, как они добавляются в рабочий лист. Имейте в виду, что любые события, назначенные самой пользовательской форме (то есть, фон), будут «заблокированы» в любых областях, покрываемых элементом управления, поэтому вам может потребоваться присвоить те же события элементам управления, а также пользовательской форме.

Например , чтобы заставить этот пользовательский форму реагировать на MouseMove любом месте формы , тот же код события был применен к пользовательской форме, текстовым полям, кнопкам выбора и рамке :

Пользовательская форма с элементами управления, реагирующими на события


Примеры VBA

Добавить / Изменить / Удалить кнопку управления формой с помощью VBA:

 Sub formControl_add() 'create form control Dim ws As Worksheet: Set ws = ActiveSheet With ws.Shapes.AddFormControl(xlOptionButton, 25, 25, 100, 100) .Name = "cOptionButton1" 'name control immediately (so we can find it later) End With End Sub Sub formControl_modify() 'modify form control's properties Dim ws As Worksheet: Set ws = ActiveSheet ws.Shapes("cOptionButton1").Select With Selection 'shapes must be Selected before changing .Characters.Text = "wxyzabcd" End With End Sub Sub formControl_delete() 'delete form control Dim ws As Worksheet: Set ws = ActiveSheet ws.Shapes("cOptionButton1").Delete End Sub 
  • Метод Shapes.AddShape (Excel)

  • Свойства формы (Excel)

  • Объект символов (Excel)


Добавить / Изменить / Удалить команду ActiveX с помощью VBA:

 Sub activexControl_add() 'create ActiveX control Dim ws As Worksheet: Set ws = ActiveSheet With ws.OLEObjects.Add("Forms.CommandButton.1") .Left = 25 .Top = 25 .Width = 75 .Height = 75 .Name = "xCommandButton1" 'name control immediately (so we can find it later) End With End Sub Sub activexControl_modify() ' modify activeX control's properties Dim ws As Worksheet: Set ws = ActiveSheet With ws.OLEObjects("xCommandButton1").Object .Caption = "abcxyz" .BackColor = vbGreen End With End Sub Sub activexControl_delete() ' delete activeX control Dim ws As Worksheet: Set ws = ActiveSheet ws.OLEObjects("xCommandButton1").Delete End Sub 
  • Метод OLEObjects.Add (Excel)

  • Свойства BackColor, ForeColor (элементы управления ActiveX)


Добавить / удалить элементы из поля управления формы:

 Sub ComboBox_addRemoveItems_FormControl() Dim ws As Worksheet: Set ws = ActiveSheet 'add item to form control combo box ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.AddItem "abcd" 'remove all items from from form control combo bo ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.RemoveAllItems End Sub 

Добавить / удалить элементы из поля со списком ActiveX:

 Sub ComboBox_addRemoveItems_ActiveXControl() Dim ws As Worksheet: Set ws = ActiveSheet 'add items to ActiveX combo box ActiveWorkbook.Sheets("Sheet1").ComboBox1.AddItem "abcd" 'remove all items from ActiveX combo box ActiveWorkbook.Sheets("Sheet1").ComboBox1.Clear End Sub 

Больше информации:

  • Office.com: добавьте флажок или кнопку выбора ( элементы управления формой )

  • Office.com: добавьте флажок, кнопку выбора или кнопку переключения ( элементы управления ActiveX )

  • Office.com: обзор форм, элементов управления форматом и элементов управления ActiveX на листе

  • Office.com: включение выбора с помощью элементов управления выбором (флажки и списки)

  • Office.com: добавлять, редактировать, находить и удалять строки, используя форму данных

  • MSDN: члены формы VBA

  • MSDN: использование элементов управления ActiveX на листе (Office)

  • Exceldemy: как использовать элементы управления формой в Excel

  • MSDN: использование элементов управления Windows Forms на листах Excel (Visual Studio)

  • Microsoft TechNet: поведение элементов управления ActiveX, встроенных в документы Office

Interesting Posts

Являются ли lambda-выражения в закрытии C #?

Установка таймаута базы данных в Entity Framework

Как я могу предотвратить отображение строки состояния и панели навигации во время перехода анимации сцены активности?

Почему firefox показывает некоторые строки вместо Facebook в окнах 8

Изменение существующего содержимого файла в Java

Разница между egrep и grep

Безопасно ли публиковать Firebase apiKey?

Почему передача файлов между дисками использует оперативную память

Замена 32-битного счетчика циклов на 64-битные значения приводит к сумасшедшим отклонениям производительности

Как сохранить CFEXECUTE от подвески после PrintStackTrace

Функции, которые помогают понять структуру json (dict)

Сравнение строк порядка сортировки в Java – один встроенный?

Карта Google подписала ошибки api в Android

Установщик Ubuntu 14.04 не показывает существующие разделы

Общий метод в Java без общего аргумента

Давайте будем гением компьютера.