VBA典型实例:368例 下载本文

— dddddd为地址码(省地县三级)18位中的和15位中的不完全相同。 — yyyymmdd yymmdd 为出生年月日。 — xx序号类编码。 — p性别。

— 18位中末尾的y为校验码。

2.关键技术

在If…Then语句中,条件不成立时不执行任何语句。在很多时候需要根据条件是否成立分别执行两段不同的代码,这时可用If…Then…Else语句,其语法格式如下:

If 逻辑表达式 Then 语句序列1 Else 语句序列2 End If

VBA判断“逻辑表达式”的值,如果它为True,将执行“语句序列1”中的各条语句,当“逻辑表达式”的值为False时,就执行“语句序列2”中的各条语句。其流程图如图3-14所示。

3.编写代码

(1)新建Excel工作簿,在VBE中插入一个模块。

(2)在模块中编写以下代码: Sub 根据身份证号码确定性别()

sid = InputBox(\请输入身份证号码:\ i = Len(sid)

If i <> 15 And i <> 18 Then '判断身份证号长度是否正确 MsgBox \身份证号码只能为15位或18位!\ Exit Sub End If

If i = 15 Then '长度为15位 s = Right(sid, 1) '取最右侧的数字 Else '长度为18度

s = Mid(sid, 17, 1) '取倒数第2位数 End If

If Int(s / 2) = s / 2 Then '为偶数 sex = \女\ Else sex = \男\ End If

MsgBox \性别:\+ sex End Sub

(3)切换到Excel环境,添加一个按钮“从身份证号码提取性别”,并指定执行上步创建的宏。

(4)单击“从身份证号码提取性别”按钮,弹出如图3-15所示对话框。

(5)输入身份证号码后单击“确定”按钮,将在如图3-16所示对话框中显示性别。

图3-15 输入身份证号码 图3-16 显示性别

例022 评定成绩等级

1.案例说明

本例将成绩表中的百分制成绩按一定规则划分为A、B、C、D、E五个等级,如图3-17所示。

图3-17 评定成绩等级

其中各等级对应的成绩分别为: — A:大于等于90分;

— B:大于等于80分,小于90分; — C:大于等于70分,小于80分; — D:大于等于60分,小于70分; — E:小于60分。

2.关键技术

本例共有五个分支,使用If…Then…Else这种二路分支结构也可完成,但需要复杂的嵌套结构才能解决该问题。其实VBA中提供了一种If…Then…ElseIf的多分支结构,其语法格式如下:

If 逻辑表达式1 Then

语句序列1

ElseIf 逻辑表达式2 Then 语句序列2.

ElseIf 逻辑表达式3 Then 语句序列3 ... … Else 语句序列n End If

在以上结构中,可以包括任意数量的ElseIf子句和条件,ElseIf子句总是出现在Else子句之前。

VBA首先判断“逻辑表达式1”的值。如果它为False,再判断“逻辑表达式2”的值,依此类推,当找到一个为True的条件,就会执行相应的语句块,然后执行End If后面的代码。如果所有“逻辑表达式”都为False,且包含Else语句块,则执行Else语句块。其流程图如图3-18所示。

图3-18 If…Then…ElseIf语句流程图

3.编写代码

(1)在Excel中打开成绩表。

(2)按快捷键“Alt+F11”进入VBE开发环境。

(3)单击“插入/模块”命令向工程中插入一个模块,并编写以下VBA代码: Sub 评定等级() Dim i As Integer For i = 3 To 11