excel_vba_编程教程(完整版)-第68部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
msoBarBottom; False; True)
mandBars(〃Budget Plans〃)。Visible = True
End If
Set bar = Nothing
End Sub
3。删除自定义工具栏
如果你创建了工具栏但不想保留它,那么你可以去掉它而不用关闭Excel应用软件,只要使用Delete
方法就可以了。例如要删除工具栏“Budget Plans”,你可以在立即窗口里输入下述语句:
mandBars(〃Budget Plans〃)。Delete
注意,你不能删除内置工具栏。
4。使用 mandBar 的属性
对象mandBar有许多属性,你在立即窗口里面使用它们中的一些。
1。 使用立即窗口来创建一个叫“My Reports”的工具栏:
set myBar= mandBars。Add(〃My Reports〃; msoBarBottom; False)
2。 使用下述语句来确定某个工具栏是否是内置的:
?mandBars(〃My Reports〃)。BuiltIn
3。 输入下述语句可以确定新工具栏在mandBars集合里的索引号:
?mandBars(〃My Reports〃)。Index
当设置属性Visible为True时,该工具栏将显示在屏幕上;而设置属性Visible为False时则可以隐
藏该工具栏。
5。使用 mandBar 控件
一个空的工具栏并不能做什么,要让你的工具栏有用的话,你就需要将想要地控件放置在上面并且
给它们指定适当的VBA过程。有三种类型的命令条控件,如下表所示:
表12…3:可以放置在工具栏上的控件类型
对象名称 描述
mandBarButton 该对象代表工具栏按钮和菜单选项。当你点击按钮或者选择菜单选项时,
就会执行相应的VBA过程
mandBarPopup 该对象代表弹出控件,点击时显示一菜单或者子菜单
mandBarboBox 该对象代表文本框、列表框或者下拉列表框(例如,格式工具栏上的字
体和字号控件,或者常用工具栏上的缩放控件)
mandBar对象的一个重要属性是Controls属性,该属性返回某特定工具栏上所有控件的集合。
1。 在立即窗口里敲入下述语句:
?mandBars(1)ntrols。 Count
当你按下回车键时,VB就会返回工作表系统菜单条上所有可用控件的总数。
2。 输入下述语句来返回工作表系统菜单条上第一个控件的名称:
?mandBars(1)ntrols(1)。Caption
VB返回第一个控件的名称:&File。字母F前面的字符&表明该菜单选项可以通过键盘按下Alt+F
235
… 页面 252…
来执行。
3。 输入下面的语句来执行一特定选项:
mandBars(1)ntrols(1)。Execute
方法Execute激活该特定的控件,文件菜单应该被打开了。
4。 在当前工程代码窗口里输入过程ControlList,来将活动菜单条上所有控件的名称写入立即窗
口:
Sub ControlList()
Dim bar As mandBar
Dim ctrl As mandBarControl
Set bar = mandBars(1)
Debug。Print bar。Name & 〃: 〃 & barntrolsunt
For Each ctrl In barntrols
Debug。Print ctrl。Caption
Next
End Sub
5。 运行上述过程后,查看立即窗口,你将看到下述清单:
Worksheet Menu Bar: 10
&File
&Edit
&View
&Insert
F&ormat
&Tools
&Data
A&ction
&Window
&Help
为mandBar添加控件
要运行期望的VBA过程的话,那么你可以添加一个内置的或者自定义控件到内置工具栏。如果你更
愿意,你也可以添加控件到自定义工具栏。无论你是添加内置控件还是自定义控件,到内置工具栏
或者到自定义工具栏,总是要使用Add方法,语法如下:
mandBarntrols。Add(Type; Id; Parameter; Before; Temporary)
mandBar是你要添加控件的那个对象。
Type是一常量,决定你添加的自定义控件的类型,你可以从下述类型中选择一个:
msoControlButton 1
msoControlPopup 10
msoControlEdit 2
msoControlDropDown 3
msoControlboBox 4
Id是个整数,指定你想要添加的内置控件编号。
Parameter用来给VB过程发送信息,或者储存关于该控件的信息。
Before参数是新控件添加在之前的那个控件的索引号,如果忽略,那么VB将在该命令条的结尾处添
加控件。
Temporart参数是个逻辑值(True或False),决定控件什么时候被删除。设置该参数为True的话,将
导致应用软件关闭时,该控件将自动被删除。
1。 在代码窗口里输入过程AddBarAndControls,如下所示:
Sub AddBarAndControls( )
With ApplicationmandBars。Add(〃Test〃; ; False; True)
。Visible = True
。Position = msoBarBottom
236
… 页面 253…
With ntrols。Add(msoControlButton)
。Caption = 〃List of Controls〃
。FaceId = 4
。OnAction = 〃ControlList〃
End With
End With
End Sub
该过程创建了一个名为Test的新工具栏,并将它放在应用软件窗口的底部。接下来,Add方法在其
上放置一个名为List of Controls的按钮,并用打印机图标以识别。当用户点击该按钮时,之前已
准备好的过程ControlList就会被执行。
6。理解和使用控件属性
放置在工具栏上的控件有许多属性可供你读取或者设置。要知道某个控件是内置的或者自定义的
话,那么你可以使用属性BuiltIn,如果返回值为True,那么该控件就是内置控件;所有用户定义
的控件将返回值False。如果Enabled属性的值为True,那么该控件就是活动的,并且可以对鼠标点
击作出反应。非活动控件的Enabled属性被设置为False了。不用说,所有控件拥有属性Caption,
可以用来确定或者设置控件标题。
以mandBarboBox对象为代表的组合类型的控件具有一些特殊的属性,例如DropDownLines,
DropDownWidth,List,ListCount,ListIndex以及Text。参见表12…4对这些属性的解释。
表12…4 对象mandBarboBox选取的属性
属性 描述
DropDownLines 返回或者设置当用户点击组合框下拉箭头时,显示的项目数量
DropDownWidth 返回或者设置组合框控件的宽度,以像素为单位
List(Index) 返回或者设置由Index指定的列表项目值(列表里的第一个项目索引号为
0)
ListCount 返回列表清单里总项目数
ListIndex 返回或者设置清单里选定项
Text 返回或者设置出现在组合框控件部分——文字框显示的文本
1。 在代码窗口输入过程Mybo,如下所示:
Sub Mybo()
Dim cbo As mandBarControl
Set cbo = mandBars(4)ntrols。Add(Type:=4; Before:=1)
With cbo
。AddItem Text:=〃Row〃; Index:=1
。AddItem Text:=〃Column〃; Index:=2
。Caption = 〃Insert Row/Column〃
。DropDownLines = 2
。DropDownWidth = 80
End With
End Sub
过程Mybo创建了一个组合框(Type:=4表明msoControlboBox)并将其放置在内置“格式”工
具栏(该工具栏是mandBars集合里的第四个mandBar对象)的最前面。接下来,有两个项目
被添加到组合框控件。该过程也设置了组合框标题以及组合框控件宽度。
2。 切换到Excel窗口检查格式工具栏里的第一个控件
3。 返回到VB编辑器窗口
4。 在立即窗口里输入下述语句,从格式工具栏里删除由Mybo过程创建的组合框控件:
mandBars(4)ntrols(1)。Delete
当你按下回车键后,VB就将格式工具栏里的第一个控件删除了。
由于有放置在其上的图像,这些出现在工具栏上的按钮都很好辨认。如果工具栏上的控件是个
237
… 页面 254…
mandBarButton对象,属性FaceId将返回或者设置按钮上图标的ID编号。大多数情况下, 图标
的ID编号和控件的ID属性是相同的。使用CopyFace方法可以将图标图片复制到Windows的剪切板上。
接下来的过程Images将出现在标准工具栏上的按钮列出到电子表格上。除了按钮名称,该清单同时
也显示它的图标。因为不能复制当前禁用的图标图像(参见标准工具栏上的“撤销”和“恢复”按
钮),所以当VB试图复制按钮的图标至剪切版时,就会遇到错误。过程Images利用On Error GoTo
ErrorHandler语句捕获该错误。 这样一来,当VB遇到错误时,就会跳到ErrorHandler:标志并且执
行该标志下面的指令。最后一条语句Resume Next会让VB回到刚才导致该错误的下面一条语句,并
且该过程会继续直到标准工具栏上所有的按钮都被检查一遍了。你将在下一章学习更多有关错误捕
捉的知识。
图12…3 标准工具栏上图标列表。你可以修改过程Images来列出任何工具栏上的完整按钮和它们的
图标。
Sub Images()
Dim i As Integer
Dim total As Integer
Dim buttonId As Integer
Dim buttonName As String
Dim myControl As mandBarControl
Dim bar As mandBar
On Error GoTo ErrorHandler
Workbooks。Add
Range(〃A1〃)。Select
With ActiveCell
。Value = 〃Image〃
。Offset(0; 1) = 〃Index〃
。Offset(0; 2) = 〃Name〃
。Offset(0; 3) = 〃FaceId〃
End With
Set bar = mandBars(3)
total = barntrolsunt
With bar
For i = 1 To total
238
… 页面 255…
buttonName = ntrols(i)。Caption
buttonId = ntrols(i)。ID
Set myControl = mandBars。FindControl(ID:=buttonId)
myControlpyFace
' error could occur here
ActiveCell。Offset(1; 0)。Select
ActiveSheet。Paste
With ActiveCell
。Offset(0; 1)。Value = buttonId
。Offset(0; 2)。Value = buttonName
。Offset(0; 3)。Value = myControl。FaceId
End With
Next i
Columns(〃C:C〃)。EntireColumn。AutoFit
Exit Sub
ErrorHandler:
Set myControl = mandBars(3)ntrols。Add
With myControl
。FaceId = buttonId
pyFace
。Delete (False)
End With
Resume Next
End With
End Sub
7。控件方法
控件拥有很多相关的方法,这些方法允许你进行一些操作,例如移动、复制和删除控件。假设你想
复制格式工具栏上的“粗体”按钮到标准工具栏上:
1。 在立即窗口里输入下述三条语