Sub SetMenu( )
Dim myBar As CommandBar
Dim myButton As CommandBarButton
ZapMenu
Set myBar = CommandBars.Add(Name:=“保险查询系统”, _
Position :=msoBarTop, _
MenuBar :=True)
Set myButton = myBar.Controls.Add(msoControlButton)
myButton.Style = msoButtonCaption
myButton.Caption = “退出[&E]”
myButton.OnAction = “ExitSYS”
Set myButton = myBar.Controls.Add(msoControlButton)
myButton.Style = msoButtonCaption
myButton.Caption = “返回[&R]”
myButton.OnAction = “ReturnMAIN”
myButton.Visible = False
myBar.Protection = msoBarNoMove + msoBarNoCustomize
myBar.Visible = True
End Sub
这个宏包含五部分。第一部分定义了一对变量。第二部分首先运行ZapMenu宏,保证保险查询系统菜单栏是不存在的,然后创建它。参数MenuBar的值设为True,确保这个新创建的命令栏为一菜单栏。第三部分和第四部分将两个命令按钮加入到菜单栏中。并设置ReturnMAIN命令按钮的初始状态为不可见状态。最后一部分保护这个新创建的菜单栏,使用户不能移动也不能自定义新菜单栏。
Sub SetWindow(State)
Const MyWidth = 420
Const MyHeight = 320
Static myOldWidth
Static myOldHeight
Static myOldState
If State = xlOn Then
myOldWidth = Application.Width
myOldHeight = Application.Height
myOldState = Application.WindowState
Application.WindowState = xln1g
Application.Width = myWidth
Application.Height = myHeight
Application.Caption = “保险查询系统”
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
ActiveWindow.DisplayWorkbookTabs = False
Else
Application.Caption = Empty
Application.Width = myOldWidth
Application.Height = myOldHeight
Application.WindowState = myOldState
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
ActiveWindow.DisplayWorkbookTabs = True
End If
End Sub
可以用“SetWindow xlOn”和“SetWindow xlOff”语句设置用户窗口和恢复Excel 97窗口。其中的xlOn、xlOff为Excel 97内置常量。注意其中的“l”是小写英文字母“l”,而不是数字“1”。
Sub SetBars(State)
Static myOldBars As New Collection
Dim myBar
If State = xlOn Then
For Each myBar In Application.CommandBars
If myBar.Type <> 1 And myBar.Visible Then
myOldBars.Add myBar
myBar.Visible = False
End If
Next myBar
Else
For Each myBar In myOldBars
myBar.Visible = True
Next myBar
End If
End Sub
将下述语句添加到ExitSYS宏中:
SetWindow xlOff
Set Bars xlOff
以保证当单击“退出”按钮时,能恢复Excel 97的原来的环境。
Private Sub WorkBook_Open( )
SetMenu
SetWindow xlOn
SetBars xlOn
End Sub
Private Sub WorkBook_BeforeClose(Cancel As Boolean)
ZapMenu
SetWindow xlOff
SetBars xlOff
ActiveWorkbook.Saved = True
End Sub前者使得每次打开该工作簿,都能保证显示系统的主画面以及相应的菜单。后者则使得每次关闭工作簿时(防止用户不通过“退出”按钮,而直接通过窗口的关闭按钮关闭工作簿),能删除用户的自定义菜单,恢复Excel 97的环境。设置活动工作簿的Saved属性值为True,使Excel认为所有的修改均已存盘,不显示提示存盘信息。
到此为止,应用系统已经封装完成了,它虽然简单,但仍不失为一个封装良好、具有一定功能的系统。
通过本讲座的学习,读者不难看出,掌握VBA宏语言,对于更好地应用Excel 97具有十分重要的意义。不仅可以使工作更高效,更方便,而且可以更加自动化,甚至智能化。即使是非计算机专业的人员,也可以利用Excel 97/VBA,方便、快捷地开发出结合自己专业的高水平应用软件。而计算机专业人员开发一些应用于特定领域的系统,也不必非要使用专业的程序开发工具,而可以在Excel 97等软件基础上,利用相应软件的强大功能,再配合有关的宏语言,可以快速、高效的开发出相应的应用软件。(完)