Excel中的窗体控件和ActiveX控件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Excel中的窗体控件和ActiveX控件

2009年1月21日

评论发表评论

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开始。

Sub ChangeControls()

'bels("标签 1").Caption = "我是标签1"

'Sheet1.Buttons("按钮 2").Caption = "点击我吧!"

'Sheet1.CheckBoxes("复选框 3").Value = xlOn

'Sheet1.OptionButtons("选项按钮 4").Value = xlOn

'Sheet1.ListBoxes("列表框 5").Value = 2

'Sheet1.DropDowns("下拉框 6").Value = 4

Sheet1.DrawingObjects("标签 1").Caption = "我是标签1" Sheet1.DrawingObjects("按钮 2").Caption = "点击我吧!"

Sheet1.DrawingObjects("复选框 3").Value = xlOn

Sheet1.DrawingObjects("选项按钮 4").Value = xlOn

Sheet1.DrawingObjects("列表框 5").Value = 2

Sheet1.DrawingObjects("下拉框 6").Value = 4

End Sub

这个是使用VBA代码在工作表中添加窗体控件的例子。

Sub InsertDropDown()

Dim ctl As DropDown ' 声明下列列表变量

Sheet2.Select

Cells(3, 3).Select

With ActiveCell

' 在活动单元格位置创建下列列表

Set ctl =

Sheet2.DropDowns.Add(.Left, .Top, .Width, .Height) ' 给下拉列表指定事件过程

ctl.OnAction = "EnterData"

ctl.AddItem "Item 1"

ctl.AddItem "Item 2"

ctl.AddItem "Item 3"

ctl.AddItem "Item 4"

ctl.AddItem "Item 5"

ctl.ListIndex = 1 ' 第一个项目的ListIndex是0

End With

End Sub

Sub EnterData()

' 通过Application.Caller来获得下拉列表对象

With Sheet2.DropDowns(Application.Caller)

Cells(1, 1) = .List(.ListIndex)

End With

End Sub

这是使用VBA代码添加ActiveX控件的例子。

Sub InsertComboBox()

Dim ole As OLEObject

Dim ctl As boBox

Dim iLine As Long

Dim objCodeModule As Object

Sheet2.Select

Cells(3, 5).Select

' 插入复合框

Set ole =

Sheet2.OLEObjects.Add(ClassType:="boBox.1")

' 命名

= "Combo"

Set ctl = ole.Object

= "Combo"

ctl.AddItem "Item1"

ctl.AddItem "Item2"

ctl.AddItem "Item3"

ctl.AddItem "Item4"

ctl.AddItem "Item5"

ctl.ListIndex = 0 ' 第一个项目的ListIndex是0

' 添加Click事件,需要引用Microsoft Visual Basic for Application Extensibility库

Set objCodeModule =

ThisWorkbook.VBProject.VBComponents("Sheet2").CodeModule iLine = objCodeModule.createeventproc("Click", "Combo") Call objCodeModule.ReplaceLine(iLine + 1, " EnterData1") End Sub

Sub EnterData1()

' 要使用OLEObject对象的Object属性来获得ComboBox对象With Sheet2.OLEObjects("Combo")

相关文档
最新文档