如何在Userform上使用带有选项按钮控件的事件

sab*_*iri 0 excel controls vba excel-vba

我正在尝试从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
Run Code Online (Sandbox Code Playgroud)

我想创建一个事件处理程序,以便radiobtn1在从用户运行代码时选择if .虽然我得到了很多答案,但这些是用于工作表用户表单的.

我的目的是处理VBA用户表单.请帮我解决一下你的想法.

ash*_*awg 5

只有一种类型的用户形式,但是对于Excel可用的两种类型的控件存在[永恒]混淆- 不同的在线资源使用的对比术语加剧了这种混淆. (只有关于ActiveX控件的部分才适用于用户表单.) 也许我可以通过将其放在帮助理解的单词中来帮助解决问题.


概述:

  • 两种类型的控件:表单控件ActiveX控件:

    • 这两种类型的控件可以在工作表上使用,但只的ActiveX控件可以使用用户窗体.

    • 表单控件是Shapes集合的一部分(就像绘图对象一样),因此被称为: *<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,或,

        • 单击New...,或,在VBE中创建一个新过程

        • 单击Record...,或,录制新宏

        • 要删除指定的事件,Macro Name请从字段中删除其名称,然后单击OK.

        分配事件 (点击图片放大.)

      要重命名,编辑或删除现有宏,请按Alt+ F8打开Macro界面:

      宏对话框


      ActiveX控件事件

      ActiveX控件具有更广泛的事件列表,可以将它们设置为响应.

      要将事件分配给ActiveX控件,请右键单击该控件并选择View Code.在VBE中,您可以粘贴代码,或从VBE窗口右上角的下拉列表中选择特定事件.

      activeX事件 (点击图片放大.)

      控制用户表单上的事件处理:

      事件也可用于用户表单的控件.由于只能将ActiveX控件放置为用户表单,因此您将获得"更多编码+更多功能"的权衡.

      ActiveX控件添加到用户表单的方式与添加到工作表中的方式相同.请记住,分配给用户表单本身的任何事件(即背景)将在控件覆盖的任何区域中"被阻止",因此您可能需要将相同的事件分配给控件和用户表单.

      例如,为了使此userform响应MouseMove 表单上的任何位置,相同的事件代码应用于userform,textboxes,选项按钮和框架:

      具有响应事件的控件的userform


      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
      
      Run Code Online (Sandbox Code Playgroud)

      使用VBA添加/修改/删除ActiveX命令按钮:

      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
      
      Run Code Online (Sandbox Code Playgroud)

      在表单控件组合框中添加/删除项目:

      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  
      
      Run Code Online (Sandbox Code Playgroud)

      从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  
      
      Run Code Online (Sandbox Code Playgroud)

      更多信息: