分享

第六章 VBA常用语句

 昵称380475 2011-02-05
 
第6章 VBA常用语句
  在VBA的程序代码中,语句是程序的主要成份,或者说是程序的主体部分。每个语句以回车键结束。
  6.1 语句
  在默认情况下,在VBE中输入语句后,VBE将自动进行语法检查,如果发现语法错误,将打开一个提示对话框。
  6.1.1 自动格式化
  输入VBA语句后,VBE将按一定的规则进行简单的格式化处理。如将关键字的首字母大写,在运算符前后加入空格,删除各部分多余的空格等。
  在输入VBA关键字时,可以不区分大小写。例如输入MsgBox时,无论输入的是Msgbox,msgbox,还是MSGBOX,当输入完该函数的参数并按回车键后,VBE都自动将其变为MsgBox。
  为了提高程序的可读性,VBA代码中应加上适当的空格。当按回车键完成语句的输入后,各关键字之间无论插入多少空格,VBE都将其自动调整为一个空格。例如输入以下代码(在关键字“Selection”与“Borders”之间插入了多个 空格,在“=”与“xlNone”之间无空格):
  Selection.Borders (xlDigaonalDown).LineStyle =xlNone
  输入完语句并按回车键后,VBE将其自动格式化以下格式:
  Selection.Borders(xlDigaonalDown).LineStyle =xlNone
        在“=”前后各插入一个空格,同时其他关键字之间的空格被自动删除。
  注意:不能在关键字的中间加入空格。
  6.1.2 复合语句与语句断行
  一般情况下,要求程序中每个语句占一行。但在VBA中,也可以把几个语句放在一行中构成复合语句。各语句之间用冒号(:)分隔,例如:
   Selection.Font.Bold = True: Selection.Font.Size = 20
  与以下两行语句功能相同:
  Selection.Font.Bold = True
  Selection.Font.Size = 20
  在VBE的代码窗口中,每行VBA代码可包含1023个字符。但是,为了使程序便于阅读,建议读者将一条长的语句打断为若干行。VBA中使用空格后接着一个下画线——续行符,可将一行代码延伸成两行以上。例如,以下语句
  ActiveWorkbook.Protect Password: = " abc ",Structure:=Treu,Windows:=False
  可改写为以下格式:
  ActiveWorkbook.Protect _
        Password: = " abc ",_
        Structure:=Treu,_
        Windows:=False
  通过续行符(_)可创建长的逻辑行。一个逻辑行,最多可包含24个连续的续行字符,也就是最多可以包含25个物理行。这样,逻辑行的字符总量可达1023字符。如果超过了字符总量,必须将该行分为若干语句,或指定一些表达式为中间变量。
  6.2赋值语句和注释语句
  赋值语句和注释语句是VBA中用得最多的两类语句。
  6.2.1 赋值语句
  赋值语句的作用是对表达式进行运算,并将运算结果赋给左侧的变量或属性。其语法格式如下:
  [Let]varname = expression
  一般都省略关键字Let.varname为变量或属性的名称,必须遵循标识符的命名约定;Expression为赋给变量或属性的值,可以为一个表达式或一个常量值。
   只有当表达式是一种与变量兼容的数据类型时,该表达式的值才可以赋给变量或属性。不以将字符串表达式的值赋给数值变量,也不能将数值表达式的值赋给字符串变量。否则就会在编译时出现错误。
  可以用字符串或数值表达式赋值给Variant变量,但反过来不一定正确。任何除Null之外的Variant都可以赋给字符串变量,但只有当Variant的值可以解释为某个数时才能赋给数值变量。
  注意:将一种数值类型的表达式赋给另一种数值类型的变量时,会强制将该表达式的值转换为结果变量的数值类型。
  例如,下面的语句使用显式的Let语句将表达式的值赋给变量。
  Dim MyStr,MyInt
        '下面的变量赋值使用了Let语句
  Let MyStr = "Hello World"
        Let MyInt = 5
  下面是没有使用Let语句的相同赋值:
  Dim MyStr,MyInt
  MyStr = "Hello World"
  MyInt = 5
  下面的语句设置工作表“Sheet2”的Visible属性值为“True”(即将该工作表显示出来):
  Sheets("Sheet2").Visible = True
  6.2.2 注释语句
  在程序代码中,适当地加入注释可提高程序的可读性,方便代码的维护。在VBA中,注释以撇号(')开头,或者以Rem关键字开头,再在其后写上注释内容。
  Rem语句的格式如下:
  Rem 注释文本
  也可以使用如下语法:
  '注释文本
  也可不写任何注释文本。在Rem关键字与“注释文本”之间要加一个空格。
  若使用撇号来添加注释文本,则在其他语句行后面使用时不必加冒号。例如:
  Sheets("Sheet2").Visible = True             '设置工作表为可视状态
  如果使用Rem关键字,则需要在两条语句之间加上冒号,如:
  Sheets("Sheet2").Visible = True      :       设置工作表为可视状态
  注释语句在程序中不产生执行代码,只是方便程序员与用户之间交流。
  技巧:在调试程序时,可在不希望执行的代码前面添加注释符号。
  在VBE中,“编辑”工具栏提供了两个按钮:“设置注释块”和“解除注释块”。使用这两个命令按钮可将选中的代码快速设置为注释,或取消其前面的注释符号(撇号),如图6-1所示。
  
 
  6.3 数据输入/输出
  计算机程序一般分为三部分:首先接收用户输入的数据,再按一定的算法对数据进行加工处理,最后输出程序处理的结果。在程序中,输入/输出语句占有很大的比例。在Excel中,可从工作表、用户窗体等多处获取数据,并可将数据输出到这些对象中。数据输入、输出的相关内容将在后续章节中进行介绍,本节主要介绍VBA中标准的输入/输出方法。
  6.3.1 数据输入——InputBox函数
  为了实现数据输入,VBA提供了InputBox函数。该函数将打开一个对话框作为输入数据的界面,等待用户输入数据,并返回所输入的内容。语法格式如下:
  InputBox(prompt[,title][,default] [,xpos] [,ypos] [,helpfile,context])
  该函数有7个参数,其意义分别如下:
  1)Prompt为对话框消息出现的字符串表达式,最大长度为1024个字符。如果需要在对话框中显示多行数据,则可在各行之间用回车换行符来分隔,一般使用VBA的常数vbCrLf代表回车换行符。
  2)Title为对话框标题栏中的字符串。如果省略该参数,则把应用程序名放入标题栏中。
  3)Default为显示在文本框中的字符串。如果省略该参数,则文本框为空。
  4)Xpos应和Ypos成对出现,指定对话框的左边与屏幕左边的水平距离。如果省略该参数,则对话框会在水平方向居中。
  5)Ypos应和Xpos成对出现,指定对话框的上边与屏幕上边的距离。如果省略该参数,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置。
  6)Helpfile设置对话框的帮助文件,可省略。
  7)Context设置对话框的帮助主题编号,可省略。
  例如,使用以下的代码可接收用户输入的数据。
  Sub 使用InputBos函数()
    Dim strPrompt As String
      Dim strTitle As String
    Dim strDefault As String
                Dim strReturn As String
                strPrompt = "请输入用户姓名:"
    strTitle = "输入对话框"
    strReturn = "伍云辉"
    strReturn = InputBox(strPrompt,strTitle,strDefault)
    Debug.Print strReturn
  End Sub
  执行上述代码,显示如图6-2所示的对话框。
  
 
  在文本框中输入新的姓名,单击“确定”按钮,程序将把用户输入的内容输出到“立即窗口”中。使用InputBox函数时,应注意以下几点:
  1)在默认情况下,InputBox函数的返回值是一个字符串类型,而不是变体类型。如果需要使用该函数输入数值,则需要使用Val函数(或其他的转换函数)将返回值转换为相应类型的数值。
  2)在图6-2所示的对话框中,如果用户单击“取消”按钮(或ESC键),则表示不使用当前输入的值,函数将返回一个空字符串。根据这一特性,可以判断用户是否输入数据到对话框中了。
  3)执行一次InputBox函数,只能返回一个值,如果需要输入多个值,则必须多次调用该函数。
  6.3.2 数据输出——Print方法
  在早期版本的Basic中,数据的输出主要通过Print语句来实现。在VB中,Print作为窗体的一个方法,也可用来输出信息。但是在VBA中,用户窗体已经不支持Print方法了,因为在VBA中,Print方法主要用来向“立即窗口”中输出程序的调试信息。
  例如,在上例中使用如下语句向“立即窗口”中输出用户输入的信息:
        Debug.Print strReturn
  Print方法的语法格式如下:
  object.Print [outputlist]
  在VBA中,object只能为Debug对象,表示向“立即窗口”输出内容。
  参数outputlist是要打印的表达式或表达式的列表。如果省略,则打印一个空白行。
  Print首先计算表达式的值,然后输出计算的结果。在outputlist参数中还可以使用分隔符以格式化输出的数据。格式化分隔符有以下4种。
  A)Spc(n):插入n个空格到输出数据之间;
  B)Tab(n):移动光标到适当位置,n为移动的列数;
  C)分号:表示前后两个数据项连在一起输出;
  D)逗号:以14个字符为一个输出区,每个数据输出到对应的输出区。
  例如:在“立即窗口”中输入图6-3所示的语句,可在语句的下方得到输出的结果。
  
  6.3.3 数据输出——MsgBox函数
  使用MsgBox函数打开一个对话框,在对话框中显示一个提示信息,并让用户单击对话框中的按钮,使程序继续执行。MsgBox有语句和函数两种格式,语句格式如下:
  MstBox prompt[,buttons][,title][,helpfile,context]
  函数格式如下:
  Value=MsgBox(prompt[,buttons][,title][,helpfile,context]
  通过函数返回值获得用户单击的按钮,并可根据按钮的不同而选择不同的程序段来执行。
  该函数(或语句)共有5个参数,除第一个参数外,其余参数都可省略。各参数的意义与Inputbox函数参数的意义相同,不同的是多了一个buttons参数。buttons参数用来指定显示按钮的数目及形式、使用提示图标样式、默认按钮,以及消息框的强制响应等,其常数值如表
6-1所示。
             
  图6-1中的数值(或常数)可分为4组,其作用分别为:
  第一组值(0~5)用来决定对话框中按钮的类型与数量。
  第二组值(16,32,48,64)用来决定对话框中显示的图标。
  第三组值(0,256,512,768)设置对话框的默认活动按钮。活动按钮中文字的周围有虚线,按回车键可执行该按钮的单击事件代        码。
  第四组值(0,4096)决定消息框的强制响应性。
  buttons参数可由上面4组数值组成,其组成原则是:从每一类中选择一个值,把这几个累加在一起就是buttons参数的值(大部分时间里都只使用前三组数值的组合),不同的组合可得到不同的结果。
  例如,设置buttons参数为16,得到的对话框如图6-4所示;设置buttons参数为50,得到的对话框如图6-5所示。
  在VBE环境中输入MsgBox函数时,将自动列出常数值,选择了一个buttons常数后,输入加号将再次显示buttons的常数列表,如图6-6所示。
       
  使用下面的代码可以获取用户的选择,再根据用户的选择决定是否退出系统。
  Sub 使用msgbox函数退出系统()
    Dim intReturn AS Integer
    intReturn = MsgBox("真的退出系统码?", vbYesNo + vbQuestion,"提示")
    If intReturn = vbYes Then Application.Quit
  End Sub
  执行以上程序,显示如图6-7所示对话框。
   
  单击“是”按钮,将执行Quit方法退出Excel;单击“否”按钮,将返回应用程序。
  6.4 程序暂停和退出语句
  程序在运行过程中,如果需要查看变量的运算中间值,可在代码中加入暂停语句,使程序暂停运行,然后在立即窗口中查看各变量的值。当满足一定条件时,可使用退出语句结束程序的运行。
  6.4.1 暂停语句
  在需要暂停程序执行的地方放置Stop语句,即可让程序暂停运行。用Stop语句,就相当于在程序代码中设置断点。
  Stop语句会暂停程序的执行,但是它不像End语句,因为Stop不会关闭任何文件,或清除变量。暂停的程序又可以接着执行后续的代码。
  Stop语句主要用在调试程序阶段,在应用程序发布之前需要将程序中的Stop语句删除或注释掉。下面的代码使用Stop语句来暂停“For
……Next”循环里的每一次完成。
  Sub 暂停程序的执行()
    Dim i As Integer
                For i = 1 To 10          '开始For……Next循环
         Debug.Print i         '将变量i的值输出到“立即”窗口
                     Stop                     '每一次的完成都会在此暂停
               Next
  End Sub
  按“F5”键执行以上过程,在“立即窗口”中输出一个数值1,程序就在Stop语句处暂停,再次按“F5”键,在“立即窗口”中输出一个数值2,程序又暂停,如图6-8所示。
   
  在暂停状态下,下一个将要执行的语句的底色显示为黄色,同时在左侧有一个黄色箭头。这时可按“F8”键来逐语句执行,也可按“F5”键继续执行后续的所有代码。
  在暂停状态下,可在“立即窗口”中输入Print语句显示程序中各变量的值,也可通过“本地窗口”查看变量的当前值。有关这两个窗口的使用方法,将在本书第30章中进行介绍。
  6.4.2 退出语句
   所谓的退出有两种意义,一是退出正在执行的VBA代码,返回到VBE编辑环境中;另一种是退出Excel系统。
  1.End语句
  使用End语句可结束程序的运行,返回到VBE编辑环境中。执行End语句会重置所有模块级别变量和所有模块的静态局部变量。若要保留这些变量的值,需改为使用Stop语句,以在保留这些变量值的基础上恢复执行。
  注意:End语句不调用Unload,QueryUnload或Terminate事件或任何其他VBA代码,只是强制性地终止代码执行。窗体和类模块中的Unload,QuerUnload和Terminate事件代码未被执行。类模块创建的对象被破坏,由Open语句打开的文件被关闭,并且释放程序所占用的内存。其他程序的对象引用无效。
  End语句提供了一种强迫终止程序的方法。VBA程序正常结束应该卸载所有的窗体。只要没有其他程序引用该程序公共类模块创建的对象并且无代码执行,程序将立即关闭。
  2. Quit方法
  使用Application对象的Quit方法,将退出Excel。
  使用此方法时,如果未保存的工作簿处于打开状态,则Excel将显示一个对话框,询问是否要保存所做更改。
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多