Как использовать события с кнопками управления опциями в пользовательской форме

Я пытаюсь добавить кнопку выбора из диапазона на листе 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 (точно так же, как рисованные объекты), и поэтому называются так: code> рабочий лист </ code> * ** <code>OptionButton1</code>,</p></li><li><p>имя по умолчанию для элемента управления ActiveX <code>Option Button 1</code>,</p></li></ul><p>Хороший способ их различить - открыть список свойств элемента управления (на ленте на вкладке Properties или нажатием клавиши F4), поскольку элемент управления ActiveX имеет гораздо больше параметров, чем более простой элемент управления формы.

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

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

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


      СОБЫТИЯ УПРАВЛЕНИЯ ОБРАЩЕНИЕМ:

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

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

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

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

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

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

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

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

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

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

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

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


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

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

      Чтобы назначить события элементам управления ActiveX, щелкните правой кнопкой мыши элемент управления и выберите View Code, В VBE вы можете вставить код или выбрать определенные события из выпадающего списка в правом верхнем углу окна 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
      

      Добавить / изменить / удалить командную кнопку 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  
      

      Дополнительная информация:

Другие вопросы по тегам