设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

Excel 97/VBA技术讲座之四

1970-1-1 08:00| 发布者: 首都经济贸易大学 赵| 查看: 2746| 评论: 0

 通过上一讲的学习,我们已初步掌握了如何利用VBA控制Excel。但都是利用宏记录器录制的VBA宏语句。在实际应用中,记录宏只能机械地重复执行某些操作,而不能完成其它更复杂的功能。这一讲将介绍如何编写超出记录宏以外的VBA程序,如何在编写宏时构造分支和循环,从而使编写出的宏功能更为强大。
   

一、VBA控制结构

    VBA是由Visual Basic语言发展而成的,其语言结构分为两部分:Visual Basic语言结构和其嵌入软件的对象模块(如Excel对象模块)。其中,Visual Basic是一套完全独立的Windows开发系统,是可视化的、面向对象的、采用事件驱动方式的结构化高级程序设计语言。与其它高级程序设计语言的控制结构一样,Visual Basic程序设计语言的控制结构分为三种:顺序结构、分支结构和循环结构。
    顺序结构:表示在每个过程或函数中程序依顺序执行每条语句,无条件判断转移和循环。原始记录宏的结构就属于顺序结构,既不能根据具体情况作出判断执行不同的操作,也不能对同一类问题自动地重复执行同一组操作。因而,要提高宏的灵活性,增加宏的功能,唯一办法就是修改宏,加入选择、判断、循环控制功能。
   

1. 分支结构

    VBA的分支结构有:If语句和Select Case语句。
   

If 语句

    If语句是根据条件判断控制程序的分支,有三种形式:一是单分支结构,仅当条件为真时执行Then语句块;二是双分支结构,当条件为真时执行Then语句块,条件为假时执行Else语句块;三是多分支结构,格式如下:
   

If 〈条件1〉 Then

〈语句块1〉

ElseIf 〈条件2〉 Then

〈语句块2〉

·

·

·

Else

〈语句块n+1〉

End If

    当条件1为真时执行语句块1,否则,若条件2为真,则执行语句块2……如果所有的条件都不成立,则执行Else后面的语句块n+1。
    例如为了更方便地浏览指定的工作表,希望限定活动单元格指针只能在工作表的3~9列内移动;当活动单元格位于3~9列之外时,将单元格指针移至该行的第3列;当活动单元格位于第9列,再右移时,单元格指针自动移至下一行的第3列。为此可以使用If结构的宏实现。相应的VBA程序如下所示:
   

Sub Move( )

‘在工作表的3~9列内右移单元指针

‘快捷键 Ctrl+Shift+M

If  ActiveCell.Column < 3  Or  ActiveCell.Column > 9  Then

Cells(ActiveCell.Row, 3).Select

ElseIf  ActiveCell.Column = 9  Then

Cells(ActiveCell.Row + 1, 3).Select

Else

ActiveCell.Offset(0, 1).Select

End If

End  Sub

Select Case语句

Select Case语句与If...Then...ElseIf语句非常相似,只是当判断控制仅取决于一个测试变量时,使用Select Case结构更有效、更简捷。Select Case语句的格式如下:

Select Case 〈测试变量〉

Case 〈表达式1〉

〈语句块1〉

Case 〈表达式2〉

〈语句块2〉

·

·

·

Case Else

〈语句块n+1〉

End Select

    该语句的功能是:首先将测试变量的值与Case后面表达式的值相比较,哪个表达式与测试变量匹配就转向执行哪段语句块,执行完毕便转向End Select语句之后继续往下执行。如果所有的条件都不成立,则执行Case Else后面的语句块n+1。
    在Select Case语句中,测试变量可以是变量、属性或表达式。Case语句后面的表达式有可以为一般表达式,也可以为Is关系表达式。
    一般表达式可以由多个表达式组成,其间用“,”和“To”分隔,前者表示“或”,只要其中有一个表达式匹配即执行该Case语句对应的语句块。后者表示范围,指定范围时,表达式值须从小到大排列。例如:Case -20 To -15,15 To 20
    Is关系表达式。表示测试变量应该与Is关键字之后的表达式比较,当指定范围为真,则执行该Case下面的语句块,反之转向比较其它表达式。
    注意:测试变量的类型必须与Case后面表达式的类型一致。
    例如现有学生的考试成绩存放在StScore工作表中,需要根据考试成绩,在其右邻单元给出优、良、中、及格、不及格五个等级。这可以方便地利用Select Case语句实现。相应的VBA宏程序如下所示:

Sub Score( )

‘给出优、良、中、及格、不及格五个等级。

‘快捷键 Ctrl+Shift+S

    Select Case  ActiveCell.Value

      Case  Is < 60

        Cells(ActiveCell.Row, ActiveCell.Column + 1) = "不及格"

      Case  60 To 69.9

        Cells(ActiveCell.Row, ActiveCell.Column + 1) = "及格"

      Case  70 To 79.9

        Cells(ActiveCell.Row, ActiveCell.Column + 1) = "中"

      Case  80 To 89.9

        Cells(ActiveCell.Row, ActiveCell.Column + 1) = "良"

      Case  Else

         Cells(ActiveCell.Row, ActiveCell.Column + 1) = "优"

    End Select

End Sub

最新评论

相关分类

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-28 01:23 , Processed in 0.084091 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部