gpt4 book ai didi

excel - 概述Excel中的窗体控件和ActiveX控件之间的差异

转载 作者:行者123 更新时间:2023-12-01 17:37:59 32 4
gpt4 key购买 nike

为什么Excel中提供两种控件? (2个按钮,2个组合框,2个复选框等)

窗体控件和ActiveX控件有什么区别?我应该使用哪一个?



我发现一些代码示例可以在控件上在线使用,而另一些则不能。怎么会?

如何处理每种类型,如何区分?

最佳答案

Excel可用的两种控件存在[永恒的]混淆-不同的在线资源使用的对比术语加剧了这种情况。

这只是Form Controls和ActiveX Controls之间差异的一般概述(基于我的旧笔记,这些内容最终帮助我找出了差异!)请访问随附的链接,以获取有关每个控件(包括代码和示例项目)的更多详细信息。 ☺

(改编自我的原始帖子here-现在已关闭)



概述:


控件有两种类型:表单控件和ActiveX控件:


两种类型的控件都可以在工作表上使用,但只有ActiveX控件可以在用户窗体上使用。
表单控件是Shapes集合的一部分(就像“绘图对象”一样),因此被称为:
ActiveX控件基本上是工作表的一部分,因此被称为:

两种类型的控件都可以在工作表中创建,修改和删除,也可以使用VBA进行编程删除,但是,两种类型的控件在使用VBA引用它们时的语法略有不同。

一些讨论的站点还讨论了数据表单。这仅是专门为数据输入/处理而设计的用户表单,因此将它们(听起来更熟悉)称为“数据输入用户表单”会更有意义。
Office文档有时也将工作表称为表单。尽管从技术上讲这是正确的,但不要让此混淆。认为“形式”一词是一般意义上的使用:






两种控制方式


表单控件
ActiveX控件


两者的外观,行为和控制类似,但不完全相同。 (列出here。)

例如,让我们比较两种组合框。在某些编程语言中,可比较的控件称为“下拉菜单”或“下拉列表”。在Excel中,我们有一个“表单控件组合框”和一个“ ActiveX控件组合框”:

compare control types(点击图片放大。)

☆“默认名称”适用于手动创建的控件。以编程方式创建的控件没有(或不需要)默认名称,因此应在创建后立即分配一个默认名称。



differences between controls

(来源:my answer



控制可用性

下图显示了在工作表和用户表单中通常可以使用哪些常用控件。

chart of controls

其他因素可能会影响控件的可用性。


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
MSDN:Add Controls to a User Form





关于ActiveX控件和相关的安全问题

ActiveX控件是VBA工具箱的扩展。您可以像使用任何标准内置控件一样使用ActiveX控件,例如CheckBox控件。当您将ActiveX控件添加到应用程序时,它将成为开发和运行时环境的一部分,并为您的应用程序提供新功能。


ActiveX控件被实现为可在任何OLE容器中使用的进程内服务器(通常是小对象)。请注意,仅当在旨在了解ActiveX控件的OLE容器中使用ActiveX控件的全部功能时,才可用。
这种容器类型称为控件容器或控件对象,可以使用控件的属性和方法来操作ActiveX控件,并以事件的形式接收来自ActiveX控件的通知。下图演示了这种交互:


(来源:thisthis



也可以看看:


维基百科:ActiveX
Symantec.com:Discussion of ActiveX Vulnerabilities
极客方法:What ActiveX Controls Are and Why They’re Dangerous




选项按钮(单选按钮)

在Excel中,两种类型的单选按钮实际上称为“选项按钮”。进一步混淆事项:


表单控件的默认名称为OptionButton1
ActiveX控件的默认名称为Option Button 1


区分它们的一个好方法是打开控件的“属性”列表(在“开发”选项卡下的功能区上,或右键单击该控件并选择Properties,或单击F4),因为ActiveX控件具有更多的选项,表单控制更简单。


通过将选项按钮和复选框放置在共享的“组框”中,可以将它们绑定在一起(因此一次只能从该组中选择一个选项)。

选择组框控件,然后在选择要分组的其他每个控件时按住Ctrl。右键单击组框控件,然后选择GroupingGroup


下面的前两个链接是用于处理每种类型的选项按钮的独立指令集。



处理控制事件:

表单控制事件(仅Click事件)

表单控制事件只能响应以下一个事件:Click事件。 (更多信息here。)请注意,此部分不适用于用户窗体,因为它们仅使用ActiveX控件。

Click事件添加过程:


右键单击该控件,然后选择Assign Macro...
在“分配宏”对话框中:


选择一个现有过程,然后单击“确定”,或者,
通过单击“新建...”在VBE中创建一个新过程,或者
通过单击“记录...”来记录新的宏,或者,
要删除分配的事件,请从Macro Name字段中删除其名称,然后单击“确定”。


assign events(点击图片放大。)


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





ActiveX控件事件

ActiveX控件具有可设置为响应的事件的更广泛的列表。

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

activeX events(点击图片放大。)

在用户窗体上控制事件处理:

事件也可以在用户窗体的控件中使用。由于只能将ActiveX控件放置在用户窗体中,因此需要进行“更多编码+更多功能”的权衡。

ActiveX控件的添加方式与添加到工作表的方式相同。请记住,分配给用户窗体本身(即背景)的任何事件都会在控件所覆盖的任何区域中被“阻止”,因此您可能需要为控件和用户窗体分配相同的事件。

例如,为了使此用户窗体在窗体上的任何地方响应MouseMove,将相同的事件代码应用于用户窗体,文本框,选项按钮和框架:

A userform with controls responding to events



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



Shapes.AddShape Method (Excel)
Shape Properties (Excel)
Characters Object (Excel)




使用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



OLEObjects.Add Method (Excel)
BackColor, ForeColor Properties (ActiveX Controls)




从窗体控件组合框中添加/删除项目:

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: Add a checkbox or option button (Form controls)
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
MSDN: Using ActiveX Controls on Sheets (Office)
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
堆栈溢出: What is the difference between “Form Controls” and “ActiveX Control” in Excel 2010?

关于excel - 概述Excel中的窗体控件和ActiveX控件之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144020/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com