|
楼主 |
发表于 2009-4-26 16:02
|
显示全部楼层
第8部分 控件与用户窗体
技巧129 在工作表中添加ActiveX控件
技巧128 中使用代码在工作表中添加的是窗体控件,而本例中使用代码在工作表中添加的是ActiveX控件,两者是有区别的,在工作表中前者是使用窗体对话框添加,而后者是使用控件工具箱添加,如图所示。
129-1 使用Add方法
使用Add方法在工作表中添加ActiveX控件,如下面的代码所示。- #001 Sub AddObj()
- #002 Dim Obj As New OLEObject
- #003 On Error Resume Next
- #004 Sheet1.OLEObjects("MyButton").Delete
- #005 Set Obj = Sheet1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
- #006 Left:=108, Top:=72, Width:=108, Height:=27)
- #007 With Obj
- #008 .Name = "MyButton"
- #009 .Object.Caption = "新建的按钮"
- #010 .Object.Font.Size = 16
- #011 .Object.ForeColor = &HFF&
- #012 End With
- #013 With ActiveWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule
- #014 If .Lines(1, 1) <> "Option Explicit" Then
- #015 .InsertLines 1, "Option Explicit"
- #016 End If
- #017 If .Lines(2, 1) = "Private Sub MyButton_Click()" Then Exit Sub
- #018 .InsertLines 2, "Private Sub MyButton_Click()"
- #019 .InsertLines 3, vbTab & "MsgBox ""这是使用Add方法新建的按钮!"""
- #020 .InsertLines 4, "End Sub"
- #021 End With
- #022 End Sub
复制代码 代码解析:
AddOLEObject过程使用Add方法在向工作表中添加ActiveX控件中的命令按钮和相应的代码。
第3、4行代码为了避免在工作表中重复添加按钮控件,先删除工作表中的名称为“myButton”的按钮。
第5、6行代码,使用Add方法在向工作表中添加ActiveX控件中的命令按钮,Add方法应用于OLEObjects 对象的语法如下:
expression.Add(ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)
其中参数expression是必需的,返回一个 OLEObjects 对象。
参数ClassType是可选的,创建的对象的程序标识符。如果指定了 ClassType参数,则忽略FileName参数和Link参数。
在本例中指定添加控件的程序标识符为“Forms.CommandButton.1”,即命令按钮控件,关于对象的程序标识符请参阅技巧119-3。
参数Left和参数Top是必需的,以磅为单位给出新对象的初始坐标,该坐标是相对于工作表上单元格 A1 的左上角或图表的左上角的坐标。
参数Width和参数Height是可选的,以磅为单位给出OLE对象的初始大小。
第8行代码,设置命令按钮的名称为“MyButton”。
第9行代码,设置命令按钮的文字为“新建的按钮”
第10行代码,设置命令按钮的文字的大小。
第11行代码,设置命令按钮的文字的颜色。
第13行到第21行代码,在工作表中写入新添加的命令按钮的单击事件代码。
ActiveX控件不能像窗体控件用OnAction属性来指定宏,需要使用CodeModule对象的InsertLines方法在工作表中插入代码。
应用于CodeModule对象的InsertLines方法的语法如下:
object.InsertLines(line, code)
参数object是必需的,一个有效的对象。
参数line是必需的,用来指定要插入代码的位置。
参数code是必需的,要插入的代码。
第14行到第16行代码判断首行内容是否为要求变量声明,如不是则添加要求变量声明语句。
第17行到第20行代码判断是否已存在相同名称的过程,如不存在则使用InsertLines方法在工作表中插入代码。
运行AddOLEObject过程,将在工作表中添加一个命令按钮和相应的代码,单击按钮显示一个消息框,如图所示。
129-2 使用AddOLEObject方法
在工作表中添加ActiveX控件,还可以使用AddOLEObject方法,如下面的代码所示。- #001 Sub AddShapes()
- #002 Dim ShpBut As Shape
- #003 On Error Resume Next
- #004 Sheet1.OLEObjects("MyButton").Delete
- #005 Set ShpBut = Sheet1.Shapes.AddOLEObject(ClassType:="Forms.CommandButton.1", _
- #006 Left:=108, Top:=72, Width:=108, Height:=27)
- #007 ShpBut.Name = "MyButton"
- #008 With ActiveWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule
- #009 If .Lines(1, 1) <> "Option Explicit" Then
- #010 .InsertLines 1, "Option Explicit"
- #011 End If
- #012 If .Lines(2, 1) = "Private Sub MyButton_Click()" Then Exit Sub
- #013 .InsertLines 2, "Private Sub MyButton_Click()"
- #014 .InsertLines 3, vbTab & "MsgBox ""这是使用AddOLEObject方法新建的按钮!"""
- #015 .InsertLines 4, "End Sub"
- #016 End With
- #017 End Sub
复制代码 代码解析:
AddShapes过程使用AddOLEObject方法在向工作表中添加ActiveX控件中的命令按钮和相应的代码。
第5、6行代码,使用AddOLEObject方法在向工作表中添加ActiveX控件中的命令按钮,AddOLEObject方法创建OLE对象,语法如下:
expression.AddOLEObject(ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)
AddOLEObject方法参数与Add方法类似,请参阅技巧129-1。
运行AddShapes过程,将在工作表中添加一个命令按钮和相应的代码,单击按钮显示一个消息框,如图所示。
|
|