打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel中表单控件和ACTIVEX控件主要区别

作者:iamlasong

最近研究了一下Excel控件。使用时可以插入两种类型的控件,一种是表单控件(在早期版本中也称为窗体控件,英文Form Controls),另一种是ActiveX控件。表单控件只能在工作表中添加和使用(呵呵,叫表单控件,但却不在表单Form中使用,Form中使用的反而是ActiveX控件),并且只能通过设置控件格式或者指定宏来使用它;而ActiveX控件不仅可以在工作表中使用,还可以在用户窗体中使用,并且具备了众多的属性和事件,提供了更多的使用方式。

关于两者网上说明很多,看了有点眼晕,我觉得,两种控件大部分功能是相同的,比如都可以指定宏,一个主要区别就是表单控件可以和单元格关联,操作控件可以修改单元格的值(不用编程),所以用于工作表,而ACTIVEX控件虽然属性强大,可控性强,但不能和单元格关联,所以用于表单Form。

在EXCEL 2003版中,“视图—工具栏”下有两个工具栏“窗体”和“控件工具箱”(而2007版中,“开发工具—插入”下就称为表单控件和ACTIVEX控件),都可以添加控件到工作表。窗体控件即是表单控件,通过控件工具箱添加的控件即是ActiveX控件。ActiveX控件比表单控件拥有更多的事件与方法,如果仅以编辑数据为目的,使用表单控件可减小文件的尺寸,缩小文件的存储空间,如果在编辑数据的同时需要对其它数据的操纵控制,使用ActiveX控件会比表单控件更灵活。

附:Excel中的窗体控件和ActiveX控件

Excel中有两种不同的控件。一种是窗体工具条控件(Forms toolbar controls),通过点击菜单“视图”->“工具栏”,在弹出菜单上选择“窗体”,将出现“窗体”工具条控件窗口。另外一种是ActiveX控件,通过点击菜单“视图”->“工具栏”,在弹出菜单上选择“控件工具箱”(也可以选择“Visual Basic”,然后再在工具栏上选择“控件工具箱”),将出现“控件工具箱”窗口。 窗口工具条控件是Excel5和Excel95留下来的东西(在Excel 97后的版本中,添加一个Dialog Sheet后,将可以看到这个窗体工具条窗口),从Excel 97开始,Dialog Sheet被UserForm代替,并且开始使用ActiveX控件。 
从某些角度来讲,窗体控件甚至比ActiveX控件更有优势。 
1. 如果你需要在Chart工作表中添加控件,只能使用窗体工具条控件。  2. 更加方便使用VBA代码创建窗体控件以及定义事件过程。  
3. 窗体控件的事件过程可以放在标准模块,可以使用任何有效的VBA过程名称,可以
在控件创建之前就创建事件过程。  4. 可以给多个控件赋于一个相同的过程。  
5. 可以使用Application.Caller来获取窗体控件的名称。  

窗体控件比ActiveX控件简单,基本上只有一个Click事件。而ActiveX控件可以响应丰富的事件,ActiveX控件的事件只能放在控件所在的类模块(工作表模块)或窗体模块。过程名称由控件名和事件名称组成。如果你在控件不存在的时候就创建这个控件的事件过程,然后再在代码中引用这个控件,将会出现编译错误,所以必须使用代码创建事件过程。

在VBA中控制窗体控件的方法有点不同,可以使用对象名称,但这些对象名称在对象浏览器中被隐藏,这样输入代码时没有方法和属性提示(你可以在“对象浏览器”的“类”一栏中单击右键,然后选择“显示隐含成员”查看这些窗体控件)。另外有一个简单的方法就是所有的窗体控件都用DrawingObjects来表示。 

下面就是窗体控件的示例代码,相对应的控件从字面上很容易理解。对于复选框和选项按钮,赋值xlOn给Value属性表示选择,赋值xlOff则表示取消选择。下拉和列表框的Value属性则表示选择的第几个项目,从1开始。

  1. Sub ChangeControls() 
  2. 'Sheet1.Labels("标签 1").Caption = "我是标签1"     
  3. 'Sheet1.Buttons("按钮 2").Caption = "点击我吧!"     
  4. 'Sheet1.CheckBoxes("复选 3").Value = xlOn     
  5. 'Sheet1.OptionButtons("选项按钮 4").Value = xlOn     
  6. 'Sheet1.ListBoxes("列表框 5").Value = 2     
  7. 'Sheet1.DropDowns("下拉框 6").Value = 4 
  8.     Sheet1.DrawingObjects("标签 1").Caption = "我是标签1" 
  9. Sheet1.DrawingObjects("按钮 2").Caption = "点击我吧!" 
  10. Sheet1.DrawingObjects("复选框 3").Value = xlOn 
  11. Sheet1.DrawingObjects("选项按钮 4").Value = xlOn
  12. Sheet1.DrawingObjects("列表框 5").Value = 2 
  13. Sheet1.DrawingObjects("下拉框 6").Value = 4 
  14. End Sub 
  15. '这个是使用VBA代码在工作表中添加窗体控件的例子。 
  16. Sub InsertDropDown() 
  17. Dim ctl As DropDown         ' 声明下列列表变量 
  18.     Sheet2.Select
  19.  Cells(3, 3).Select
  20.  With ActiveCell 
  21. ' 在活动单元格位置创建下列列表    
  22.      Set ctl = Sheet2.DropDowns.Add(.Left, .Top, .Width, .Height) ' 给下拉列表指定事件过程 
  23.      ctl.OnAction = "EnterData" ctl.AddItem "Item 1" 
  24. ctl.AddItem "Item 2"
  25.  ctl.AddItem "Item 3"
  26.  ctl.AddItem "Item 4"
  27.  ctl.AddItem "Item 5" 
  28. ctl.ListIndex = 1   ' 第一个项目的ListIndex是0
  29. End With
  30. End Sub 
  31. Sub EnterData() 
  32. ' 通过Application.Caller来获得下拉列表对象
  33.     With Sheet2.DropDowns(Application.Caller) 
  34. Cells(1, 1) = .List(.ListIndex) 
  35. End With 
  36. End Sub 
  37. '这是使用VBA代码添加ActiveX控件的例子
  38. Sub InsertComboBox() 
  39. Dim ole As OLEObject 
  40. Dim ctl As MSForms.ComboBox 
  41. Dim iLine As Long 
  42. Dim objCodeModule As Object   
  43. Sheet2.Select 
  44. Cells(3, 5).Select 
  45. ' 插入复合框     
  46. Set ole = Sheet2.OLEObjects.Add(ClassType:="Forms.ComboBox.1") 
  47. ' 命名 
  48.     ole.Name = "Combo" 
  49. Set ctl = ole.Object 
  50. ctl.Name = "Combo"   
  51. ctl.AddItem "Item1"
  52.  ctl.AddItem "Item2" 
  53. ctl.AddItem "Item3" 
  54. ctl.AddItem "Item4" 
  55. ctl.AddItem "Item5" 
  56. ctl.ListIndex = 0       ' 第一个项目的ListIndex是0  
  57. ' 添加Click事件,需要引用Microsoft Visual Basic for Application Extensibility库 
  58.     Set objCodeModule = ThisWorkbook.VBProject.VBComponents("Sheet2").CodeModule 
  59. iLine = objCodeModule.createeventproc("Click", "Combo") 
  60. Call objCodeModule.ReplaceLine(iLine + 1, " EnterData1")
  61. End Sub 
  62. Sub EnterData1() 
  63. ' 要使用OLEObject对象的Object属性来获得ComboBox对象 
  64.    With Sheet2.OLEObjects("Combo") 
  65. Cells(2, 1) = .Object.Text
  66.  End With
  67. End Sub 
  68. '过程InsertComboBox将在Sheet2的工作表模块中自动生成复合框的Click事件过程。 
  69. Private Sub Combo_Click() 
  70. EnterData1 
  71. End Sub


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel中的窗体控件和ActiveX控件
表单控件和ActiveX控件
在excel中,如何利用组合窗口制作下拉菜单栏?
【从零学学VBA5】表单控件(2003版本中称之为“窗体控件”)和ActiveX控件有何区别?
Excel VBA 学习总结 - 开发模式
Excel技巧应用篇:利用窗体控件绘制动态图表
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服