为什么Excel中有 2种类型的控件? (2个按钮,2个组合框,2个复选框等...)
表单控件和 ActiveX控件之间的区别是什么?我应该使用哪一个?
我发现在线的一些代码示例使用我的控件,但其他代码没有。怎么会?
我如何使用每种类型,我如何区分?
答案 0 :(得分:17)
对于Excel可用的两种类型的控件存在[永恒]混淆 - 由不同在线资源使用的对比术语加剧了这种混淆。
这只是对表单控件和 ActiveX控件 之间差异的概述(基于我帮助我最终确定的旧笔记)消除差异!)访问包含的链接,获取有关每个控件的更多详细信息,包括代码和示例项目。 ☺
(改编自我原来的帖子here - 现已关闭)
两种类型的控件:表单控件和 ActiveX控件:
两种类型的控件都可以在工作表中使用,但仅ActiveX 控件可用于 userforms 。
表单控件是 Shapes 集合的一部分(就像绘图对象一样),因此被称为:
ActiveX控件基本上是工作表的一部分,因此被称为:
可以从工作表中创建,修改和删除两种类型的控件,也可以使用VBA以编程方式删除这两种控件类型,但是,当使用VBA引用时,这两种控件的语法略有不同对他们来说。
有些网站讨论也讨论数据表。这只是一个专门用于数据输入/操作数据的
Office文档有时也会将工作表作为表单引用。虽然这在技术上是正确的,但不要让这让您感到困惑。想想"形式"用于一般意义:
表单控件
ActiveX控件
两个人的表现,行为和控制方式相似,但不完全相同。 (列出here。)
例如,让我们比较两种类型的组合框。在某些编程语言中,类似的控件被称为&#34;下拉菜单&#34; 或&#34;下拉列表&#34; 。在Excel中,我们有&#34; 表单控件组合框&#34; ,以及&#34; ActiveX控件组合框< /强>&#34; :
☆&#34;默认名称&#34;适用于手动创建的控件。以编程方式创建的控件没有(或要求)默认名称,因此应在创建时立即分配。 子>
(来源:my answer)
下图显示哪些常用控件通常可用于工作表和用户表单。
其他因素可能会影响控制可用性。
Office.com:Why are form-related commands or controls on the ribbon disabled?
Office.com:Overview of forms, Form controls, and ActiveX controls on a worksheet
关于ActiveX控件和相关的安全问题
ActiveX控件是VBA工具箱的扩展。您可以像使用任何标准内置控件一样使用ActiveX控件,例如CheckBox控件。将ActiveX控件添加到应用程序时,它将成为开发和运行时环境的一部分,并为您的应用程序提供新功能。
另见:
维基百科:ActiveX
Symantec.com:Discussion of ActiveX Vulnerabilities
How-To Geek:What ActiveX Controls Are and Why They’re Dangerous
在Excel中,两种类型的单选按钮实际上称为选项按钮。进一步混淆问题:
表单控件的默认名称为OptionButton1
。
ActiveX控件的默认名称为Option Button 1
。
区分它们的一个好方法是打开控件的属性列表(在“开发”选项卡下的功能区上,或右键单击控件并选择Properties
,或点击 F4 ),因为ActiveX控件有更多更简单的表单控件选项。
可以将选项按钮和复选框绑定在一起(因此可以从组中选择一个选项),方法是将它们放在共享的组框中。 / p>
选择组框控件,然后按住 Ctrl ,同时选择要分组的其他每个控件。右键单击组框控件,然后选择
Grouping
→Group
。
下面的前两个链接是用于处理每种类型的选项按钮的单独指令集。
Click
事件)表单控件事件只能响应一个事件: Click
事件。 (更多信息here。)请注意此部分不适用于用户表单,因为它们仅使用ActiveX控件。
为Click
事件添加程序:
右键单击该控件并选择Assign Macro...
在“分配宏”对话框中:
选择现有程序,然后单击确定,或
点击新建... ,或
点击记录... ,或
删除指定的事件,从Macro Name
字段中删除其名称,然后单击确定。
要重命名,编辑或删除现有宏,请按 Alt + F8 打开Macro
界面:
ActiveX控件有一个更广泛的列表可以设置为响应的事件列表。
要将事件分配给ActiveX控件,请右键单击该控件并选择View Code
。在VBE中,您可以从VBE窗口右上角的下拉列表中粘贴代码或选择特定事件。
事件也可用于用户表单的控件。由于只能将ActiveX控件放置为用户表单,因此您将拥有更多编码+更多功能&#34;交易。
ActiveX控件添加到用户表单的方式与添加到工作表中的方式相同。请记住,分配给userform 本身(即背景)的任何事件都将被阻止&#34;在控件覆盖的任何区域中,您可能需要将相同的事件分配给控件和用户窗体。
例如,为了使此用户表单在表单 的任何位置响应MouseMove
,相同的事件代码为应用于用户形式,文本框,选项按钮和框架:
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
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
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:Add a checkbox, option button, or toggle button (ActiveX controls)
Office.com:Overview of forms, Form controls, and ActiveX controls on a worksheet
Office.com:Enable selection through choice controls (check and list boxes)
Office.com:Add, edit, find, and delete rows by using a data form
MSDN:VBA Shape Members
Exceldemy:How to Use Form Controls in Excel
MSDN:Using Windows Forms Controls on Excel Worksheets (Visual Studio)
Microsoft TechNet:Behaviour of ActiveX controls embedded in Office documents
Stack Overflow:What is the difference between “Form Controls” and “ActiveX Control” in Excel 2010?