友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
八万小说网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第9部分

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



    2)选择〃工具〃…〃宏〃…〃Visual Basic 编辑器〃,打开 VBA编辑器窗口。  
    3)在‘VBA 编辑器的左面,可以看到〃工程资源管理器〃窗口。在工程资源管理器窗口的 
〃Thisworkbook〃上单击鼠标右键,选择〃插入〃…〃模块〃,这样就将一个模块添加到应用程序中了。 
(如果你没有看见〃工程资源管理器〃窗口,可以按 Ctrl+R)  
    4)选择〃插入〃〃过程〃,显示〃添加过程〃对话框。  
    5)输入〃第一个工程〃作为过程名字。在〃类型〃分组框中,确认选择了〃子程序〃。单击〃确 
定〃按钮。这样一个新的过程就添加到模块中了。可以在模块中看到以 Public Sub 第一个过程 
 ()开始,以 End Sub结束的语句结构。  
    6)在过程中插入光标,输入以下语句并回车:  
Msgbox 〃这是我的第一个过程〃  
在输入 Msgbox 后,会自动弹出一个消息框告诉你有关这条命令的信息,称之为自动列表技术。 
输入完成的过程如下所示:  
Public Sub 第一个过程()  
Msgbox 〃这是我的第一个过程〃  
End Sub  
    VBA 对子程序和函数有如下的命名规则:  
    * 名字中可以包含字母数字和下划线。  
    * 名字中不能包含空格句号惊叹号,也不能包含字符@ &  #。  
    * 名字最多可以包含 255 个字符。  
    

                                          8 

… 页面 25…

Visual BASIC 程序设计网络教学                                                   橄榄树 
整                                                                                   理 
    4。2。2 运行宏   
    创建这个过程后,可以运行一下。运行一个过程有几种方法:可以直接使用〃运行〃菜单,〃 
运行子程序/用户窗体〃工具栏按钮或按下 F5 键。要运行一个过程,可以按照如下步骤:   
    1)单击〃运行子程序/用户窗体〃工具栏按钮,过程执行并显示一个消息框。  
    2)单击消息框之中的〃确定〃按钮,关闭该消息框。  

    4。3 保存对模块所做的改变   

    要保存新过程;需要保存过程所驻留的工作簿。可以用 VBA 编辑器保存工作簿。具体步骤如 
下:   
    1)选择〃文件〃…〃保存工作簿〃。因为本工作簿还没有保存过;所以要给它命名。  
    2)输入〃HOUR4〃作为文件名并按回车键;则工作簿和模块与过程都保存下来了。 第四课 理 
解变量和变量的作用  
Excel Home   

    4。4 变量   

    变量是用于临时保存数值的地方。每次应用程序运行时;变量可能包含不同的数值;而在程 
序运行时;变量的数值可以改变。   
    为了说明为什么需要变量;可以按照如下步骤创建一个简单的过程:   
    1)创建一个名为〃你叫什么名字〃的过程。  
    2)在过程中输入如下代码:  
    Inputbox 〃输入你的名字:〃  
    现在不要担心 inputbox 语句的语法;将在第六学时中了解到有关这条命令的更多信息。  
    3)按下F5 键运行过程;这时会显示一个输入框;要求输入你的名字。  
    4)输入你的名字并按〃确定〃按钮;则结束该过程。   
    你输入的名字到那里去了?如何找到用户在输入框中输入的信息?在这种情况下;需要使用 
变量来存储用户输入的结果。  
    4。4。1 变量的数据类型   
    使用变量的第一步是了解变量的数据类型。变量的数据类型控制变量允许保存何种类型的 
数据。表 4…1 列出了 VBA 支持的数据类型;还列出了各种类型的变量所需要的存储空间和能够存 
储的数值范围。   
数据类型          存储空间        数值范围  
Byte              1 字节            0 … 255  
Booleam            2 字节          True 或者False  
Integer            2 字节          …32768 … 32767  
Long(长整型)        4字节        …2147483648 … 2147483647  
Single              4字节          负值范围:…3。402823E38 … …1。401298E…45  
                                     正值范围:1。401298E…45 … 3。402823E38  
Double                      8  字 节             负 值 范 围 :…1。79769313486232E308  …  
…494065645841247E…324  
                                    正    值   范    围   :4。94065645841247E…324      …  
1。79769313486232E308  
Currency            8字节        …922337203685477 … 922337203685477  
Decimal            14字节        不包括小数时:+/…79228162514264337593543950335  
                                    包括小数时:+/7。9228162514264337593543950335  
Date              8 字节          1000年 1月 1 日 … 9999年 12 月31 日  
Object            4 字节          任何引用对象  
String(长字符串)  10字节+1 字节/字符      0 … 约 20 亿  
String(固定长度)  字符串的长度            1 … 约65400  
Varient(数字)    16字节                  Double 范围内的任何数值  
Varient(文本)    22字节+1 字节/字符        数据范围和变长字符串相同  
    表 4…1 VBA数据类型   
    作为 ABV 程序员,一个目标是选择需要存储空间尽量小的数据类型来保存所需要的数据, 
这正是表 4…1 提供各种数据类型存储空间的原因。例如,要保存诸如班级学生总数这样的小数 

                                           9 

… 页面 26…

Visual BASIC 程序设计网络教学                                                 橄榄树 
整                                                                                理 
字,那么 Byte 数据类型就足够了。在这种情况下,使用 Single 数据类型只是对计算机存储空 
间的浪费。  
    4。4。2 用 Dim 语句创建变量(声明变量)   
    现在;你对变量可以使用的数据类型已经比较熟悉了;以下我们将创建变量。创建变量可以 
使用 Dim 语句;创建变量通常成为〃声明变量〃 Dim语句的基本语法如下:   
    Dim 变量名 AS 数据类型   
    这条语法中的变量名代表将要创建的变量名。对变量的命名规则和对过程的命名规则相同。 
这条语句中的数据类型部分可以是表 4…1 中的任何一种数据类型。   
    变量名必须以字母开始;并且只能包含字母数字和特定的特殊字符;不能包含空格句号惊叹 
号;也不能包含字符@ &  #。名字最大长度为 255个字符   
    在接下来的练习中将说明如何在 VBA 中使用变量;你将要输入你的名字;并用一个消息框将 
其显示出来。具体步骤如下:   
    1)创建一个名为〃显示你的名字〃的子程序。  
    2)输入以下代码:  
    Public Sub 显示你的名字()  
    Dim s 名字 As String  
    s 名字 = Inputbox(〃请输入你的名字:〃)  
    Msgbox 〃你好〃& s 名字  
    End Sub  
    3)将鼠标放到过程中的任何地方;按下 F5键运行过程;会显示一个输入框。  
    4)输入你自己的名字并按回车键;会显示一个消息框;显示的文字中包含你自己的名字。  
    5)单击〃确定〃按钮;返回过程中。   
    在 Dim 语句中不必提供数据类型。如果没有数据类型;变量将被定义为 Variant 类型;因为 
VBA 中默认的数据类型是 Variant。你知道这一点后;最初的反应也许是觉得应该不用自己决定 
数据类型;而将一切抛给 VBA。这种观念是完全错误的。你必须决定选择使用何种数据类型。因为 
Variant 数据类型占用存储空间较大(16 或 22 字节)而且它将影响程序的性能。VBA必须辨别 
Variant 类型的变量中存储了何种类型的数据。  
    4。4。3 变量命名的惯例   
    下表给出了推荐的变量命名惯例   
数据类型        短前缀        长前缀  
Array            a            ary  
Boolean          f            bin  
Byte              b            bit  
Currency          c            cur  
Double            d            dbl  
Date/Time        dt            dtm/dat  
Integer          i            int  
Long              l            lng  
Object            o            obj  
Single                        sng  
String            s            str  
Variant          v            var  
    表 4…2 变量命名的前缀   
    4。4。4 使用数组   
    如果你使用过其他编程序语言;可能对数组已经比较熟悉了。数组是具有相同数据类型并共 
同享有一个名字的一组变量的集合。数组中的元素通过索引数字加以区分;定义数组的方法如 
下:   
    Dim array_name(n) As type (其中 n 是数组元素的个数)   
    例如;如果要创建保存 10 个学生名字的数组;可以用以下语句:  
         Dim s 学生名字(9) As Integer  
    注意;括号中的数字是 9 而不是 10。这是因为在默认的情况下;第一个索引数字是 0。数组在 
处理相似信息时非常有用。假设要处理15门考试成绩;可以创建15个独立的变量;这意味着要使 
用 15 个 Dim语句。也可以创建一个数组来保存考试成绩,具体如下:  

                                         10 

… 页面 27…

Visual BASIC 程序设计网络教学                                                  橄榄树 
整                                                                                 理 
    Dim s 考试成绩(14) As Integer  
    声明数组时的另一种方法是不给定大小。可以在程序运行时定义其大小。通过创建动态数 
组就可以做到。例如,你的程序要创建一表格,可以提示用户输入表格的行和列的数目。声明 
动态数组的语法如下:  
    Dim dyn_array() As type  
    对数组声明后可以在程序运行时用:ReDim语句指定数组的大小:  
    ReDim dyn_array()(array_size)  
    参数 array_size 代表数组的新大小。如果要保留数组的数值,请在 ReDim 语句后使用保留 
字 Preserve;具体语法如下:  
    ReDim Preserve dyn_array(array_size)  
    4。4。5 变量赋值   
    声明变量后就可以给变量赋值。请注意下列语句中为数组变量赋值时索引数字的使用。   
    程序清单 4…4  
    Dim i 人数 As Integer  
    Dim i 考试成绩 As Integer  
    Dim i As Integer  
    i 人数 = inputbox(〃输入学生的人数:〃)  
    ReDim Preserve i 考试成绩(i 数量)  
    For i = 1 to i 人数  
    i 考试成绩(i) = inputbox(〃输入考试成绩〃& i )  
    Next   

                          第五课 利用 VBA 设置工作表使用权限  

Excel Home   
一般保护工作表采取的方法是用 EXCEL 菜单中的〃保护〃命令,有时这尚嫌不足,比如一些机密 
文件根本要让某些使用者无法看到,但又需要他来操作工作簿中的其他表,怎么办?   
可以打开 VBA 编辑器,打开〃工程资源管理器〃,双击该工作表,现在出现的是设置该表的属性 
的编辑窗口,单击窗口左上的下拉列表框,选择 worksheet ;这时再从该窗口右上方的列表框 
中选择 Active(〃激活〃),这时自动显示如下的语句块:  
Private Sub Worksheet_Activate()  
End Sub  
在其中加入代码:(假设用〃123〃作为密码;Sheet〃机密文档〃为限制权限文  
档;sheet〃普通文档〃为工作簿中你认为任何适合的工作表)  
If Application。InputBox(〃请输入操作权限密码:〃) = 123 Then  
Range(〃A1〃)。Select  
Else  
Msgbox 〃密码错误;即将退出!〃  
Sheets(〃普通文档〃)。Select  
End if  
程序如下:  
Private Sub Worksheet_Activate()  
If Application。InputBox(〃请输入操作权限密码:〃) = 123 Then  
Range(〃A1〃)。Select  
Else  
MsgBox 〃密码错误;即将退出!〃  
Sheets(〃普通文档〃)。Select  
End If  
End Sub  
这样做仍有一个问题,就是越权使用者仍会看到一些文件的片段,即在提示密码的那段时间。 
好,你可以这样做,用上述方法选择工作表的 Deactivate 事件;输入以下代码:  
Sheets(〃机密文档〃)。Cells。FontlorIndex = 2  
这段程序使得此工作表在不被激活时,所有文字为白色。然后,在第一个程序中的 
Range(〃A1〃)。Select 后插入一行,写入以下代码:  

                                          11 

… 页面 28…

Visual BASIC 程序设计网络教学                                                   橄榄树 
整                                                                                   理 
ActiveSheet。Cells。FontlorIndex = 56  
这段程序,在你输入正确密码后,将该表所有文字转变为深灰色。  
完整的程序如下:  
Private Sub Worksheet_Activate()  
If Application。InputBox(〃请输入操作权限密码:〃) = 123 Then  
Range(〃A1〃)。Select  
Sheets(〃机密文档〃)。Cells。FontlorIndex = 56  
Else  
MsgBox 〃密码错误;即将退出!〃  
Sheets(〃普通文档〃)。Select  
End If  
End Sub  

                            第六课 提高 Excel 中 VBA 的效率  

    由于 Microsoft Office 办公套件的广泛应用,以及该软件版本的不断提升,功能不断完善, 
在 Office 办公套件平台上开发出的的 VBA 应用程序越来越多,而 VBA 是一种宏语言,在运行速 
度上有很大的限制。因此 VBA 编程的方法直接关系到 VBA 程序运行的效率,本文列举了一些提 
高 VBA 程序运行效率的方法。   

方法 1:尽量使用 VBA 原有的属性、方法和 Worksheet 函数   

    由于 Excel 对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能对 
它们不全部了解,这就产生了编程者经常编写与 Excel 对象的属性、方法相同功能的 VBA 代码 
段,而这些代码段的运行效率显然与 Excel 对象的属性、方法完成任务的速度相差甚大。例如 
用 Range 的属性 CurrentRegion 来返回 Range 对象,该对象代表当前区。(当前区指以任意空 
白行及空白列的组合为边界的区域)。同样功能的 VBA 代码需数十行。因此编程前应尽可能多地 
了解 Excel对象的属性、方法。   
    充分利用 Worksheet 函数是提高程序运行速度的极度有效的方法。如求平均工资的例子:   
        For Each c In  
          Worksheet(1)。Range(″A1:A1000″)  
    TotalValue = TotalValue + c。Value  
    Next  
    AverageValue = TotalValue / Worksheet(1)。Range(″A1:A1000″)。Rowsunt  
    而下面代码程序比上面例子快得多:  
         AverageValue=Application。WorksheetFunction。Average(Worksheets(1)。Range( ″ 
A1:A1000″))  
    其它函数如 Count;Counta;Countif;Match;Lookup 等等,都能代替相同功能的 VBA 程序代 
码,提高程序的运行速度。   

方法 2:尽量减少使用对象引用,尤其在循环中   

    每一个 Excel 对象的属性、方法的调用都需要通过 OLE 接口的一个或多个调用,这些 OLE 
调用都是需要时间的,减少使用对象引用能加快 VBA 代码的运行。例如   
    1.使用 With 语句。  
    Workbooks(1)。Sheets(1)。Range(″A1:A1000″)。Font。Name=″Pay″  
    Workbooks(1)。Sheets(1)。Range(″A1:A1000″)。Font。FontStyle=″Bold″ 。。。  
  则以下语句比上面的快  
  With Workbooks(1)。Sheets(1)。Range(″A1:A1000″)。Font  
     。Name = ″Pay″  
     。FontStyle = ″Bold″  
     。。。  
    End With   
    2.使用对象变量。  
    如果你发现一个对象引用被多次使用,则你可以将此对象用 Set 设置为对象变量�
返回目录 上一页 下一页 回到顶部 3 3
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!