Как использовать события с кнопками управления опциями в пользовательской форме
Я пытаюсь добавить кнопку выбора из диапазона на листе 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
выбирается при запуске кода от пользователя. Хотя я получил много ответов, они предназначены для пользовательской формы рабочего листа.
Я намерен работать с формой пользователя VBA. Пожалуйста, помогите мне с вашими мыслями.
1 ответ
Существует только один тип пользовательской формы, однако существует [вечная] путаница вокруг двух типов элементов управления, доступных в Excel, которые усугубляются противоречивой терминологией, используемой различными онлайн-источниками. (К пользовательским формам применимы только разделы об элементах управления ActiveX.) Возможно, я смогу помочь пролить свет на некоторые слова, которые помогут мне понять. ☺
Обзор:
Существует два типа элементов управления: элементы управления формы и элементы управления ActiveX:
Оба типа элементов управления могут использоваться на рабочих листах, но только элементы управления ActiveX могут использоваться на пользовательских формах.
Элементы управления формы являются частью коллекции Shapes (точно так же, как рисованные объекты), и поэтому называются так:
Properties или нажатием клавиши F4), поскольку элемент управления ActiveX имеет гораздо больше параметров, чем более простой элемент управления формы.
Кнопки параметров и флажки можно связать вместе (поэтому из группы можно выбрать только один параметр за раз), поместив их в общий групповой блок.
Выберите элемент управления "Групповое поле", а затем, удерживая нажатой клавишу "Ctrl", выберите все остальные элементы управления, которые хотите сгруппировать. Щелкните правой кнопкой мыши элемент управления группы и выберите
Grouping
→Group
,Первые две ссылки ниже представляют собой отдельные наборы инструкций для обработки каждого типа кнопки выбора.
СОБЫТИЯ УПРАВЛЕНИЯ ОБРАЩЕНИЕМ:
События управления формой (
Click
только событие)События управления формой могут отвечать только на одно событие:
Click
событие (Подробнее см. Здесь.) Обратите внимание, что этот раздел не относится к пользовательским формам, поскольку они используют только элементы управления ActiveX.Чтобы добавить процедуру для
Click
событие:Щелкните правой кнопкой мыши элемент управления и выберите
Assign Macro...
В диалоге "Назначить макрос":
Выберите существующую процедуру и нажмите OK, или,
Создайте новую процедуру в VBE, нажав New..., или,
Запишите новый макрос, нажав Запись... или
Удалить назначенное событие, удалить его имя из
Macro Name
поле и нажмите ОК.
Чтобы переименовать, отредактировать или удалить существующие макросы, нажмите Alt + F8, чтобы открыть
Macro
интерфейс:События управления ActiveX
Элементы управления ActiveX имеют более обширный список событий, на которые они могут быть настроены для ответа.
Чтобы назначить события элементам управления ActiveX, щелкните правой кнопкой мыши элемент управления и выберите
View Code
, В VBE вы можете вставить код или выбрать определенные события из выпадающего списка в правом верхнем углу окна VBE.(Нажмите на изображение, чтобы увеличить.)
Управление обработкой событий в пользовательской форме:
События также могут использоваться в элементах управления для пользовательских форм. Поскольку только пользовательские элементы управления 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
Добавить / изменить / удалить командную кнопку 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
Добавить / удалить элементы из поля со списком управления формой:
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 Shape
MSDN: Использование элементов управления ActiveX на листах (Office)
Exceldemy: как использовать элементы управления формы в Excel
MSDN: Использование элементов управления Windows Forms на листах Excel (Visual Studio)
Microsoft TechNet. Поведение элементов управления ActiveX, встроенных в документы Office