ash*_*awg 24
围绕Excel可用的两种控件存在[永恒的]混淆- 不同的在线资源使用的对比术语加剧了这种混淆.
这只是表单控件和ActiveX控件之间差异的一般概述(基于我的旧笔记,帮助我最终找出差异!)访问包含的链接,获取有关每个控件的更多详细信息,包括代码和示例项目.☺
(从原来的职位适应这里 -现已关闭)
有两种类型的控件:表单控件和ActiveX控件:
这两种类型的控件可以在工作表上使用,但只的ActiveX控件可以使用用户窗体.
表单控件是Shapes集合的一部分(就像绘图对象一样),因此被称为:
Properties或点击F4),因为ActiveX控件具有更多更简单的表单控件的选项.
选项按钮和复选框可以绑定在一起(因此可以从组中选择一次只能选择一个选项),方法是将它们放在共享的组框中.
选择组框控件,然后Ctrl在选择要分组的其他每个控件时按住.右键单击组框控件,然后选择
Grouping→Group.
下面的前两个链接是用于处理每种类型的选项按钮的单独指令集.
Click仅限活动)窗体控件事件只能对一个事件作出回应:该Click事件.(此处有更多信息.)请注意,本节不适用于用户表单,因为它们仅使用ActiveX控件.
要为Click事件添加过程:
右键单击该控件并选择 Assign Macro...
在"分配宏"对话框中:
选择现有过程,然后单击OK,或,
单击New...,或,在VBE中创建一个新过程
单击Record...,或,录制新宏
要删除指定的事件,Macro Name请从字段中删除其名称,然后单击OK.
要重命名,编辑或删除现有宏,请按Alt+ F8打开Macro界面:

ActiveX控件具有更广泛的事件列表,可以将它们设置为响应.
要将事件分配给ActiveX控件,请右键单击该控件并选择View Code.在VBE中,您可以粘贴代码,或从VBE窗口右上角的下拉列表中选择特定事件.
事件也可用于用户表单的控件.由于只能将ActiveX控件放置为用户表单,因此您将获得"更多编码+更多功能"的权衡.
ActiveX控件添加到用户表单的方式与添加到工作表中的方式相同.请记住,分配给用户表单本身的任何事件(即背景)将在控件覆盖的任何区域中"被阻止",因此您可能需要将相同的事件分配给控件和用户表单.
例如,为了使此userform响应MouseMove 表单上的任何位置,相同的事件代码应用于userform,textboxes,选项按钮和框架:
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)
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)
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)
Office.com:添加复选框或选项按钮(表单控件)
Office.com:添加复选框,选项按钮或切换按钮(ActiveX控件)
Office.com:工作表上的表单,表单控件和ActiveX控件概述
Office.com:通过选择控件(检查和列表框)启用选择
Office.com:使用数据表单添加,编辑,查找和删除行
MSDN:VBA形状成员
Exceldemy:如何在Excel中使用表单控件
Microsoft TechNet:嵌入在Office文档中的ActiveX控件的行为
Stack Overflow:Excel 2010中"表单控件"和"ActiveX控件"之间有什么区别?