按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
6: Row 6: Row
7: Cell 7: Cell
8: Column 8: Column
9: Row 9: Row
10: Ply 10: Ply
11: XLM Cell 11: XLM Cell
12: Document 12: Document
13: Desktop 13: Desktop
14: Nondefault Drag and Drop 14: Nondefault Drag and Drop
15: AutoFill 15: AutoFill
16: Button 16: Button
17: Dialog 17: Dialog
18: Series 18: Series
19: Plot Area 19: Plot Area
20: Floor and Walls 20: Floor and Walls
21: Trendline 21: Trendline
22: Chart 22: Chart
23: Format Data Series 23: Format Data Series
24: Format Axis 24: Format Axis
25: Format Legend Entry 25: Format Legend Entry
26: Formula Bar 26: Formula Bar
27: PivotTable Context Menu 27: PivotTable Context Menu
28: Query 28: Query
29: Query Layout 29: Query Layout
30: AutoCalculate 30: AutoCalculate
31: Object/Plot 31: Object/Plot
32: Title Bar (Charting) 32: Title Bar (Charting)
33: Layout 33: Layout
34: Pivot Chart Popup 34: Pivot Chart Popup
35: Phonetic Information 35: Phonetic Information
36: Auto Sum 36: Auto Sum
37: Paste Special Dropdown 37: Paste Special Dropdown
38: Find Format 38: Find Format
39: Replace Format 39: Replace Format
40: Shapes 40: Shapes
41: Inactive Chart 41: Inactive Chart
42: Excel Control 42: Excel Control
43: Curve 43: Curve
44: Curve Node 44: Curve Node
45: Curve Segment 45: Curve Segment
46: Pictures Context Menu 46: Pictures Context Menu
47: OLE Object 47: OLE Object
48: ActiveX Control 48: ActiveX Control
49: WordArt Context Menu 49: WordArt Context Menu
50: Rotate Mode 50: Rotate Mode
51: Connector 51: Connector
52: Script Anchor Popup 52: Script Anchor Popup
245
… 页面 262…
53: Canvas Popup 53: Canvas Popup
54: Organization Chart Popup 54: Organization Chart Popup
55: Diagram 55: Diagram
56: Add mand 56: Layout
57: Built…in Menus 57: Select
58: System 58: List Range Popup
59: Layout 59: List Range Layout Popup
60: Select 60: XML Range Popup
61: List Range Layout Popup
62: Built…in Menus
现在,你已经知道里Excel快捷菜单的准确名称了,你可以轻易地添加其它经常用到的命令到这些
菜单中的任意菜单中去。尽管从工具栏上点击打印图标或者选择文件|打印来打印工作表都是很容
易的事情,但是你可能还是想将该打印命令添加到快捷菜单中去,当你在工作表标签上单击右键时
就会出现在该快捷菜单上。我们来看看如何添加该选项到Ply菜单上去。
2。 输入如下所示地过程AddToPlyMenu:
Sub AddToPlyMenu()
With ApplicationmandBars(〃Ply〃)
。Reset
ntrols。Add(Type:=msoControlButton; Before:=2)。Caption = _
〃Print。。。〃
ntrols(〃Print。。。〃)。OnAction = 〃PrintSheet〃
End With
End Sub
上面所用地Reset方法避免当你多次运行该过程时,将同样的选项放置到该快捷菜单上。
3。 运行过程AddToPlyMenu,然后返回到代码窗口,并且输入下述过程,当你从该快捷菜单上选择
Print选项时,就会执行该过程:
Sub PrintSheet()
Application。Dialogs(xlDialogPrint)。Show
End Sub
4。 切换到Excel应用程序窗口,并且在任何工作表标签上单击右键,选择Print选项,你应该可以
看到当你使用其它内置工具打印时看到的相同的对话框。
图12…10 自定义选项可以添加到内置快捷菜单上(参见Print选项在过程AddToPlyMenu里被添加上
了)
246
… 页面 263…
12。创建快捷菜单
1。 在当前VBA工程的代码窗口里输入过程Create_ShortMenu,如下所示:
Sub Create_ShortMenu()
Dim sm As Object
Set sm = ApplicationmandBars。Add(〃Information〃; msoBarPopup)
With sm
ntrols。Add(Type:=msoControlButton)。Caption = 〃Operating System〃
With ntrols(〃Operating System〃)
。FaceId = 1954
。OnAction = 〃OpSystem〃
End With
ntrols。Add(Type:=msoControlButton)。Caption = 〃Total Memory〃
With ntrols(〃Total Memory〃)
。FaceId = 1977
。OnAction = 〃TotalMemory〃
End With
ntrols。Add(Type:=msoControlButton)。Caption = 〃Used Memory〃
With ntrols(〃Used Memory〃)
。FaceId = 2081
。OnAction = 〃UsedMemory〃
End With
ntrols。Add(Type:=msoControlButton)。Caption = 〃Free Memory〃
With ntrols(〃Free Memory〃)
。FaceId = 2153
。OnAction = 〃FreeMemory〃
End With
End With
End Sub
上面的过程创建了一个名为Information的自定义快捷菜单,并给它添加了四个命令。注意,
每个命令都指定了一个图标。当你从该快捷菜单选择一命令,步骤2里面的相应过程就会被执
行。
2。 输入下面为Create_ShortMenu过程调用的过程:
Sub FreeMemory( )
MsgBox Application。MemoryFree & 〃 bytes〃; ; 〃Free Memory〃
End Sub
Sub OpSystem( )
MsgBox Application。OperatingSystem; ; 〃Operating System〃
End Sub
Sub TotalMemory( )
MsgBox Application。MemoryTotal; ; 〃Total Memory〃
End Sub
Sub UsedMemory( )
MsgBox Application。MemoryUsed; ; 〃Used Memory〃
End Sub
要将名为Information的自定义快捷键显示在屏幕上的话,你可以使用方法ShowPopup,如步
骤3所示。
3。 在立即窗口里输入下述语句:
mandBars(〃Information〃)。ShowPopup 0; 0
对象mandBar的方法ShowPopup接受两个可选参数(x; y),决定快捷菜单在屏幕上的位置。
在上面的例子里,快捷菜单Information将出现在屏幕的左上角。
247
… 页面 264…
假设你正在设计一个自定义窗体,并想要当用户右键单击一个命令按钮时显示一个快捷菜单:
1。 从VB编辑器菜单上,选择插入…用户窗体
2。 使用工具箱上的命令控件,在空白用户窗体的任意位置放置一个按钮
3。 通过点击工程浏览器窗口的查看代码按钮,切换到该窗体的代码窗口
4。 在UserForm1代码窗口里输入下述过程:
Private Sub mandButton1_MouseDown(ByVal Button _
As Integer; _
ByVal Shift As Integer; _
ByVal X As Single; _
ByVal Y As Single)
If Button = 2 Then
Call Show_ShortMenu
Else
MsgBox 〃You must right…click this button。〃
End If
End Sub
当用户右键点击窗体上按钮时,该过程就会调用过程Show_ShortMenu。点击鼠标按钮时VB会有两个
事件过程响应。当你点击鼠标按钮时,VB会执行MouseDown事件过程,当你释放鼠标按键,MouseUp
事件则会发生。
MouseDown和MouseUp事件过程要求下述参数:
* 参数object确定对象,在该例中,是窗体上面的命令按钮名称
* 参数Button是整型数据,确定按下的是哪个鼠标按键
Button参数值 意义
1 鼠标左键
2 鼠标右键
3 鼠标中键
* 参数Shift确定当事件发生时,用户是否按住了Shift; Crel或者Alt键。
Shift参数值 意义
1 Shift键
2 Ctrl键
3 Shift和Ctrl键
4 Alt键
5 Alt和Shift键
6 Alt和Ctrl键
7 Alt; Shift和Ctrl键
5。 在当前工程模块里输入过程Show_ShortMenu代码:
Sub Show_ShortMenu()
Dim shortMenu As Object
Set shortMenu = ApplicationmandBars(〃Information〃)
With shortMenu
。ShowPopup
End With
End Sub
注意,本过程使用的方法ShowPopup没有使用决定快捷菜单屏幕显示位置的可选参数,因此,
菜单将出现在鼠标点击的位置(见图12…11)。
6。 要删除名为Information的快捷菜单的话,请在代码窗口输入并且运行下述过程
Delete_ShortMenu:
Sub Delete_ShortMenu()
ApplicationmandBars(〃Information〃)。Delete
End Sub
248
… 页面 265…
图12…11 当你右键点击一个对象时出现的自定义快捷菜单
13。接下来……
在本章,你学习了如何使用VBA修改内置菜单和工具栏,如何创建和显示你自己的工具栏,菜单和
快捷菜单。当使用菜单和工具栏时,你使用了对象mandBar的各种属性和方法。你学习了三种类
型的对象mandBar:Normal,MenuBar和Popup。使用立即窗口,你试验了示范如何创建自己的工
具栏和控件。
下一章将带你进入错误捕捉和调试,换句话说,你将学习当你的程序工作不正确时,该做些什么。
第十三章 调试 VBA 过程和处理错误
错误要悄悄混入你的VBA过程很容易,事实是,无论你多么仔细,你所有的VBA过程第一次就能全部
运行正确,这是极其少见的事。总有一些事情你错过了或者没有想到过。从第二章起,你就知道有
三种类型的VBA错误:语法错误,逻辑错误和运行时间错误。本章将给介绍许多内置工具,你会发
现它们在你的过程代码的分析和定位错误源的过程中是很有用的。
1。测试 VBA 过程
迄今为止,在本书中,你已经创建和执行了很多过程和函数例子。因为这些程序中的大多数都很短,
所以找错误并不是非常困难。然而,当你编写更长更复杂的过程时,查找错误源就更缓慢和费时了。
幸运的是,VBA编辑器提供了一套方便的工具,让你追踪你VBA问题的过程更简单,更快捷,有更少
的挫折。程序缺陷是电脑程序中的错误,而调试则是定位和解决这些错误的过程。调试让你找到你
的程序为什么不按预期工作的原因。你可以通过步入程序代码或者检查变量值来达到目的。
使用下述指南进行你的VBA程序调试:
* 如果你想要分析你的过程,通过按F8或者选择调试…逐语句,逐语句地执行你的代码
* 如果你怀疑程序的某个地方有错误发生,那么可以使用断点
* 如果你想监测程序中某个变量或者表达式的值,那么可以添加一个监视表达式
* 如果你讨厌在冗长的程序代码中拉动滚动条到你感兴趣的部分去,那么你可以设置一个书签,
快速跳到需要的地方。
每条指南在本章中都有实用的例子进行示范。
2。终止过程
你知道如何终止VB过程吗?如果你想到了按Esc键,那么你对了。如果你在运行程序,并且突然按
下Esc键,那么VB就会中断程序的运行,并显示如图13…1显示的信息。然而除了Esc键,这个在很多
情况下都很有力而且可靠的方法,VBA还提供了很多其它的方法来中断你的过程,进入所谓的中断
模式:
* 按Ctrl+Break
* 设置一个或多个断点
* 插入Stop语句
* 添加监视表达式
当你的程序执行被临时停止时,断点便发生了。VB会从过程的执行中记住所有变量和语句的值,当
用户从工具栏点击运行宏(或者“运行”菜单上的相同名称),或者点击对话框(图13…1)上面的
继续按钮,可以恢复。
249
… 页面 266…
图13…1 在你运行程序时,如果你按下Esc键或者Ctrl+Break键,就会出现该信息
图13…1显示的错误对�