还有一种等级的作用域称为公共级。公共级变量可以在应用程序的任何过程中使用,不论过程和变量是否定义在一个模块。这就使得公共级变量在使用中十分灵活,但是公共级变量在程序运行时一直保留在内存中,这样就占用了系统资源。要创建公共级变量,可以用Public语句,具体语法如下: Public variablename As datatype
要创建公共级常量,具体语法如下: Public const CONSTANAME datatype = value
公共级变量或常量必须在模块顶部的“通用声明”区域中定义。
4.7 小结
本课的重点是变量和常量。在本课中你学会了如何创建变量来保存非静态的数据。我们了解了VBA的数据类型,我们也学会了创建常量来保存静态的数据。本课的最后部分我们学习了变量和常量的作用域。
4.8 疑难解答
1.如果希望在多个位置使用变量的数据,应该在何处定义该
变量?
答:必须在模块顶部的“通用声明”区域内定义。对于模块级变量用Dim语句,对于公共级变量用Public语句 2.模块是否独立于工作簿?
答:不,实际上模块是工作簿的一部分,当保存工作簿时,对模块所做的改变也同时保存下来.
3.为什么不应该将所有变量定义为Variant数据类型? 答:Variant类型的数据,占用较多的内存,并且影响应用程序的性能.
<[dvnews_page=(5):利用VBA设置工作表使用权限]
一般保护工作表采取的方法是用excel菜单中的“保护”命令,有时这尚嫌不足,比如一些机密文件根本要让某些使用者无法看到,但又需要他来操作工作簿中的其他表,怎么办?
可以打开VBA编辑器,打开“工程资源管理器”,双击该工作表,现在出现的是设置该表的属性的编辑窗口,单击窗口左上的下拉
列表框,选择worksheet ,这时再从该窗口右上方的列表框中选择Active(“激活”),这时自动显示如下的语句块: Private Sub Worksheet_Activate() End Sub
在其中加入代码:(假设用\作为密码,Sheet\机密文档\为限制权限文档,sheet\普通文档\为工作簿中你认为任何适合的工作表)
If Application.InputBox(\请输入操作权限密码:\ Range(\ Else
Msgbox \密码错误,即将退出!\ Sheets(\普通文档\ End if
程序如下:
Private Sub Worksheet_Activate()
If Application.InputBox(\请输入操作权限密码:\ Range(\ Else
MsgBox \密码错误,即将退出!\ Sheets(\普通文档\
End If End Sub
这样做仍有一个问题,就是越权使用者仍会看到一些文件的片段,即在提示密码的那段时间。好,你可以这样做,用上述方法选择工作表的Deactivate事件,输入以下代码: Sheets(\机密文档\
这段程序使得此工作表在不被激活时,所有文字为白色。然后,在第一个程序中的Range(\后插入一行,写入以下代码:
ActiveSheet.Cells.Font.ColorIndex = 56
这段程序,在你输入正确密码后,将该表所有文字转变为深灰色。 完整的程序如下:
Private Sub Worksheet_Activate()
If Application.InputBox(\请输入操作权限密码:\ Range(\
Sheets(\机密文档\ Else
MsgBox \密码错误,即将退出!\ Sheets(\普通文档\
End If
<[dvnews_page=(6):提高excel中VBA的效率]
由于Microsoft office办公套件的广泛应用,以及该软件版本的不断提升,功能不断完善,在office办公套件平台上开发出的的VBA应用程序越来越多,而VBA是一种宏语言,在运行速度上有很大的限制。因此VBA编程的方法直接关系到VBA程序运行的效率,本文列举了一些提高VBA程序运行效率的方法。
方法1:尽量使用VBA原有的属性、方法和Worksheet函数 由于excel对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能对它们不全部了解,这就产生了编程者经常编写与excel对象的属性、方法相同功能的VBA代码段,而这些代码段的运行效率显然与excel对象的属性、方法完成任务的速度相差甚大。例如用Range的属性CurrentRegion来返回Range 对象,该对象代表当前区。(当前区指以任意空白行及空白列的组合为边界的区域)。同样功能的VBA代码需数十行。因此编程前应尽可能多地了解excel对象的属性、方法。