- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么Excel中提供两种控件? (2个按钮,2个组合框,2个复选框等)
窗体控件和ActiveX控件有什么区别?我应该使用哪一个?
我发现一些代码示例可以在控件上在线使用,而另一些则不能。怎么会?
如何处理每种类型,如何区分?
最佳答案
Excel可用的两种控件存在[永恒的]混淆-不同的在线资源使用的对比术语加剧了这种情况。
这只是Form Controls和ActiveX Controls之间差异的一般概述(基于我的旧笔记,这些内容最终帮助我找出了差异!)请访问随附的链接,以获取有关每个控件(包括代码和示例项目)的更多详细信息。 ☺
(改编自我的原始帖子here-现在已关闭)
概述:
控件有两种类型:表单控件和ActiveX控件:
两种类型的控件都可以在工作表上使用,但只有ActiveX控件可以在用户窗体上使用。
表单控件是Shapes集合的一部分(就像“绘图对象”一样),因此被称为:
ActiveX控件基本上是工作表的一部分,因此被称为:
两种类型的控件都可以在工作表中创建,修改和删除,也可以使用VBA进行编程删除,但是,两种类型的控件在使用VBA引用它们时的语法略有不同。
一些讨论的站点还讨论了数据表单。这仅是专门为数据输入/处理而设计的用户表单,因此将它们(听起来更熟悉)称为“数据输入用户表单”会更有意义。
Office文档有时也将工作表称为表单。尽管从技术上讲这是正确的,但不要让此混淆。认为“形式”一词是一般意义上的使用:
两种控制方式
表单控件
ActiveX控件
两者的外观,行为和控制类似,但不完全相同。 (列出here。)
例如,让我们比较两种组合框。在某些编程语言中,可比较的控件称为“下拉菜单”或“下拉列表”。在Excel中,我们有一个“表单控件组合框”和一个“ ActiveX控件组合框”:
(点击图片放大。)
☆“默认名称”适用于手动创建的控件。以编程方式创建的控件没有(或不需要)默认名称,因此应在创建后立即分配一个默认名称。
(来源: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
MSDN:Add Controls to a User Form
关于ActiveX控件和相关的安全问题
ActiveX控件是VBA工具箱的扩展。您可以像使用任何标准内置控件一样使用ActiveX控件,例如CheckBox控件。当您将ActiveX控件添加到应用程序时,它将成为开发和运行时环境的一部分,并为您的应用程序提供新功能。
ActiveX控件被实现为可在任何OLE容器中使用的进程内服务器(通常是小对象)。请注意,仅当在旨在了解ActiveX控件的OLE容器中使用ActiveX控件的全部功能时,才可用。
这种容器类型称为控件容器或控件对象,可以使用控件的属性和方法来操作ActiveX控件,并以事件的形式接收来自ActiveX控件的通知。下图演示了这种交互:
(来源:this和this)
也可以看看:
维基百科: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。右键单击组框控件,然后选择Grouping
→Group
。
下面的前两个链接是用于处理每种类型的选项按钮的独立指令集。
处理控制事件:
表单控制事件(仅Click
事件)
表单控制事件只能响应以下一个事件:Click
事件。 (更多信息here。)请注意,此部分不适用于用户窗体,因为它们仅使用ActiveX控件。
为Click
事件添加过程:
右键单击该控件,然后选择Assign Macro...
在“分配宏”对话框中:
选择一个现有过程,然后单击“确定”,或者,
通过单击“新建...”在VBE中创建一个新过程,或者
通过单击“记录...”来记录新的宏,或者,
要删除分配的事件,请从Macro Name
字段中删除其名称,然后单击“确定”。
(点击图片放大。)
要重命名,编辑或删除现有的宏,请按Alt + F8打开Macro
界面:
ActiveX控件事件
ActiveX控件具有可设置为响应的事件的更广泛的列表。
要将事件分配给ActiveX控件,请右键单击该控件,然后选择View Code
。在VBE中,您可以粘贴代码,或从VBE窗口右上角的下拉列表中选择特定事件。
(点击图片放大。)
在用户窗体上控制事件处理:
事件也可以在用户窗体的控件中使用。由于只能将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
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
关于excel - 概述Excel中的窗体控件和ActiveX控件之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144020/
**设计模式(Design pattern)**是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理地运
系统定义 系统定位 HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统
我有 dplyr::recode一些因素,我正在寻找一种干净的方法来制作 LaTeX 表,其中比较新旧类别,即级别。 这是使用 cyl 的问题的说明来自`mtcars。首先是一些包, # instal
简介 Blazor 是一种 .NET 前端 Web 框架,同时支持服务器端呈现和客户端交互性。 使用 C# 语言创建丰富的交互式 UI 共享前后端应用逻辑 可以生成
thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法,使用示例如下: 复制代码 代码如下: // 使用d
在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb、.xsd、.vshost.exe、.exe、.exe.config、.vshost.exe.config 项目发布的时
VMware Cloud Foundation(简称 VCF)是 VMware 打造的一套用于 Software Defined Data Center(SDDC)软件定义数据中心的全栈云平台解决方案
HBase 概述 HBase是[Hadoop][]的生态系统,是建立在Hadoop文件系统(HDFS)之上的分布式、面向列的数据库,通过利用Hadoop的文件系统提供容错能力。如果你需要进行实时读写
JUnit – 概述 所谓单元测试是测试应用程序的功能是否能够按需要正常运行,并且确保是在开发人员的水平上,单元测试生成图片。单元测试是一个对单一实体(类或方法)的测试。单元测试是每个软件公司提高产
Maven – 概述 Maven 是什么? Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,
概述 特性说明 下面是一些 Gradle 特性的列表。 基于声明的构建和基于约定的构建 Gradle 的核心在于基于 Groovy 的丰富而可扩展的域描述语言(DSL)。 Groovy 通过声
我正在创建 TopDesk 的概述。我想问你们中的一些人,完成这项工作的最佳方法是什么。 最后,应用程序将设置在大屏幕上,以便每个人都可以看到我们有多少个 topdesk 调用。 我想到了以下选项:
我正在使用 SpriteKit 的 框架制作游戏。我如何使用 SKLabelNodes 制作轮廓文本?似乎没有这样做的内置功能。如果在 SpriteKit 中没有办法做到这一点,我还有什么其他方法可以
函数式编程中非常通用的函数是什么样的? 有人说“我们没有对象,但我们有高阶函数”。高阶函数会取代对象吗? 在编写面向对象的应用程序时,我多次尝试从更一般的想法转向更详细的想法。如果我尝试在函数式编程中
序言 构建这个概念是和应用程序包及资源等相关的,它的特点是使用脚本控制一系列的任务的处理,以减少人力操作带来的成本和操作失误风险。 在UE的概念里,构建往往是和打包相关的(如编译、coo
1. 概述 webpack作用:前端项目构建工具 - 打包工具 - 可解决下面的开发问题 Web开发面对的问题文件依赖关系复杂静态资源请求效率低模块化支持不好浏览器对高级JS语法兼容程度低 不用web
我刚刚收到关于 Compound Literals 错误的评论,并且在此过程中偶然发现了可变长度数组。显然我一直生活在一 block 岩石下。为了更好地理解 C99 中的主要新特性,我应该阅读哪些内容
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
Java UI 插件提供接口(interface) ISharedImages 访问可以在自己的插件中使用的标准图像。 例如 Image image = PlatformUI.getWorkbench
我正在尝试将其设置为角色在图 block 中的位置,当他们向上或向下移动时它会移动到下一个图 block ,但我不确定该怎么做。现在,我设置了角色移动像素的位置,但我希望它移动 1 个方格。 现在的代
我是一名优秀的程序员,十分优秀!