37
VBA 程程程程程程 程程程 : 程程 程程程程程程程程

VBA 程序设计概述

  • Upload
    wauna

  • View
    96

  • Download
    9

Embed Size (px)

DESCRIPTION

VBA 程序设计概述. 主讲人 : 何宁. 武汉大学东湖分校. 第八章 宏与模块. 内容提要. 8.1 宏与 VBA 8.2 宏的创建 8.3 模块. 8.4 VBA 程序设计概述. 8 .4 VBA 程序设计概述. VBA 编程环境 VBA 基础知识 程序控制语句. VBA 编程环境. 进入 VBA 编程环境 从数据库窗体对象列表上选择“模块”,单击工具栏上的“新建”按钮 VBE 窗口 在 VBE 环境中编写 VBA 代码. VBA基础知识. 数据类型 常量 变量 数组 表达式. VBA基础知识. 数据类型 标准数据类型 - PowerPoint PPT Presentation

Citation preview

Page 1: VBA 程序设计概述

VBA 程序设计概述

主讲人 : 何宁

武汉大学东湖分校

Page 2: VBA 程序设计概述

第八章 宏与模块

Page 3: VBA 程序设计概述

内容提要8.1 宏与 VBA8.2 宏的创建8.3 模块8.4 VBA 程序设计概述

Page 4: VBA 程序设计概述

8 .4   VBA 程序设计概述VBA 编程环境VBA 基础知识程序控制语句

Page 5: VBA 程序设计概述

VBA 编程环境进入 VBA 编程环境

从数据库窗体对象列表上选择“模块”,单击工具栏上的“新建”按钮

VBE 窗口在 VBE 环境中编写 VBA 代码

Page 6: VBA 程序设计概述

VBA 基础知识数据类型常量变量数组表达式

Page 7: VBA 程序设计概述

VBA 基础知识数据类型

标准数据类型

用户自定义数据类型对象数据类型

Page 8: VBA 程序设计概述

VBA 基础知识常量

VBA 在运行时其值始终保持不变的量字符串常量放在一对 " 内,日期 / 时间型常量

放在一对 # 内。如 " 中国 " 、 #9/1/2005# 等。符号常量:用标识符保存一个常量值

使用 Const 语句定义符号常量,如 Const Pai = 3.141569

Page 9: VBA 程序设计概述

VBA 基础知识变量

变量的命名原则第一个字符必须是字母包含的字符数不超过 255 个不得与 VBA 的关键字同名,如不能使用 Sub 、 For 等不能使用下列字符: ! @ & $ # (空格)

变量的声明变量在使用前应该用 Dim 语句进行声明Dim < 变量 1> As < 类型 1>[, < 变量 2> As < 类型 2>[,...]]Dim StudentName As StringDim Grade As Integer, AvgGrade As SingleDim Passed As Boolean, ExamDate As Date默认情况下,变量可以不经声明即可使用,该变量被自动声

明为 Variant 类型变量的应用范围

Page 10: VBA 程序设计概述

VBA 基础知识数组

数组是一种数据存储结构,它用一个命名的一个集合体,用不同的下标予以区分

数组具有以下特性 ( 数组中的每个数据称为元素 ) :每个元素类型相同,占用同样大小的存储空间数组中的元素在内存中连续存放通过下标可访问数组中的每个元素。下标的类型可以是整数,

常量、变量或算术表达式。数组分为一维数组、二维数组和多维数组

Array(0)=17Array(1)=19……

Page 11: VBA 程序设计概述

VBA 基础知识数组

维数组中的元素呈直线状排列,每个下标对应一个元素。

数组在使用前必须先行定义,语法格式是: Dim < 数组名 >([< 下界 >] To 上界 ) As

数据类型若省略下标下界,则数组的最小下标为 0

例如: Dim B(20) As Double B 数组共有 21 个元素 ( 下标的起止范围是 0~20)

Page 12: VBA 程序设计概述

VBA 基础知识数组

二维数组中数据排列呈平面状,可保存一个二维表的信息。

数组元素使用行下标和列下标定位,定义格式:

Dim < 数组名 >([< 下界 > To] 上界 ,[< 下界 > To] 上界 ) As 数据类型

如果省略下标的下界值,则下界值默认为 0 例如, Dim C(2,3) As Integer ,声明的 C 数组有 2*3=6 个元素。二维数组的操作通常需要与双重循环相结合。

Page 13: VBA 程序设计概述

VBA 基础知识运算符

数学运算符^ 、 * 、 / 、 \ 、 mod 、 + 、 -

关系运算符= 、 <> 、 < 、 > 、 <= 、 >=返回值为逻辑值: True 或 False

逻辑运算符Not 、 and 、 or

连接运算符& 、 +连接两个字符串

Page 14: VBA 程序设计概述

VBA 基础知识表达式

表达式:用运算符将常量、变量、函数等连接起来的式子,书写在一行上。

表达式可分为:算术表达式,如 Count=x+1 关系表达式,如 C<>20 逻辑表达式,如 Age<=5 Or Age>=60

a

acbb

2

42 → (-b+Sqr(b^2-4*a*c))/(2*a)

Page 15: VBA 程序设计概述

VBA 基础知识函数

数学函数:完成数学计算功能。绝对值函数 abs(< 表达式 >) : 返回数值表达式的绝对值取整函数 Int(< 数值表达式 >) : 返回数值表达式的整数部分开平方函数 Sqr Int(< 数值表达式 >) : 计算数值表达式的平方

根产生随机数函数 Rnd (< 数值表达式 >) : 产生一个 0-1 之间的

随机数小数字符函数 : 完成字符串处理功能日期时间函数 : 处理日期和时间类型转换函数:将数据类型进行转换

Page 16: VBA 程序设计概述

VBA 基础知识函数

人机交互函数和过程:完成人与机器之间的交互。InputBox() 函数

– InputBox( 提示 [, 标题 ][, 默认 ])

– “ 提示” : 字符表达式 , 在对话框中作为信息显示– “ 标题” : 字符表达式 , 在对话框中的标题区显示– “ 默认” : 字符表达式 , 在输入对话框中无输入时 , 该默认值作为输入

的内容Sub test()

Dim strname As String, strs1 As String

strs1 = " 请输入你的姓名 , 然后单击确定 "

strname = InputBox$(strs1, " 输入框 ")

End Sub

Page 17: VBA 程序设计概述

VBA 基础知识

MsgBox 过程– MsgBox 提示 [, 按钮 ][, 标题 ]

– “ 标题” : 字符表达式 , 在对话框中的标题区显示– “ 按钮” : 整型表达式 , 决定信息按钮的数目及出现在信息框

上的图标类型Sub test()

Dim strname As String, strs1 As String

strs1 = " 请输入你的姓名 , 然后单击确定 "

strname = InputBox$(strs1, " 输入框 ")

MsgBox " 你的姓名是 " & strname

End Sub

Page 18: VBA 程序设计概述

程序控制语句顺序结构控制选择结构控制循环结构控制

Page 19: VBA 程序设计概述

顺序结构控制1 )注释语句

注释语句以 Rem 开头,但一般用撇号“‘”引导注释内容,用撇号引导的注释可以直接出现在语句后面。

2 )声明语句声明语句用于命名和定义常量、变量、数组和过

程。如 :Sub sample() Const PI=3.14159 Dim I as Integer …End Sub

Page 20: VBA 程序设计概述

顺序结构控制3 )赋值语句

赋值语句是任何程序设计中最基本的语句。赋值语句为变量指定一个值或表达式。赋值语句的形式如下:

变量名 = 表达式Dim I as Integer

i=i+1

Page 21: VBA 程序设计概述

选择结构控制If…Then… 语句

格式:If < 关系表达式或逻辑表达式 > Then < 语句 > 关系表达式或逻辑表达式成立时执行 Then 后的语

句,否则直接执行 If 的下一条语句。< 语句 > 可以一条语句,也可以是若干条用冒号

“ :”隔开的 VBA 语句组。

Page 22: VBA 程序设计概述

选择结构控制随机出一道两位数加法题让小学生回答

Sub test()

Dim A As Integer, B As Integer, Sum As Integer

Randomize Timer

A = 10 + Rnd * 89: B = 10 + Rnd * 89

Sum = InputBox(A & "+" & B & "=?", " 两位数加法 ")

If Sum = A + B Then MsgBox "答案正确! "

If Sum <> A + B Then MsgBox "答错了!正确答案是 " & A + B

End Sub

Page 23: VBA 程序设计概述

选择结构控制If…Then…Else… 语句

格式: If < 关系或逻辑表达式 > Then < 语句 1> Else < 语句 2> If 后的表达式成立时执行 Then 后的语句,不成立时执

行 Else 后的语句;然后程序继续执行 If 后的其他语句。例:

Sub Passed() Dim Grade As Integer Grade = InputBox(" 请输入考试分数: ") If Grade >= 60 Then MsgBox (" 合格 ") Else MsgBox

(" 不合格 ")End Sub

Page 24: VBA 程序设计概述

选择结构控制选择分之语句

格式:If < 关系或逻辑表达式 > Then < 语句组 >End If

或If < 关系或逻辑表达式 > Then < 语句组 1>Else < 语句组 2>End If

If Grade >= 60 Then

MsgBox (" 合格 ")

Else

MsgBox (" 不合格 ")

End If

Page 25: VBA 程序设计概述

选择结构控制例

Sub Grade() Dim Grade As Integer, Evalu As String Grade = InputBox(" 请输入考试分数: ") If Grade < 60 Then Evalu = " 不合格 " ElseIf Grade < 90 Then Evalu = " 合格 " Else Evalu = "优秀 " End If MsgBox Grade & " 分的等级为 " & EvaluEnd Sub

Page 26: VBA 程序设计概述

选择结构控制Select Case 语句

格式Select Case <测试表达式 >

Case < 表达式 1>

< 语句 1>

Case < 表达式 2>

< 语句 2>

[Case Else

< 语句 n+1>]

End Select

Page 27: VBA 程序设计概述

选择结构控制 例

Sub Grade1() Dim Grade As Integer, Evalu As String Grade = InputBox(" 请输入考试分数: ") Select Case Grade Case 100: Evalu = "满分 " Case 90 To 99: Evalu = "优秀 " Case 80 To 89: Evalu = "良好 " Case 70 To 79: Evalu = " 中 " Case 60 To 69: Evalu = " 合格 " Case Is < 60: Evalu = " 不合格 " Case Else: Evalu = " 数据错误 " End Select MsgBox Grade & " 分的等级为 " & EvaluEnd Sub

Page 28: VBA 程序设计概述

循环结构控制FOR 语句

语法格式:For < 循环变量 >=初值 To 终值 [Step <步长值 >]

[ 循环体 ]

Next [ 循环变量 ]步长值为 1 时可省略 Step 子句

Page 29: VBA 程序设计概述

循环结构控制编写 Even() 过程,输出 10~20 的所有偶数之

和Sub Even()

Dim I As Integer, S As Integer

For I = 10 To 20 Step 2

S = S + I

Next I

MsgBox S, , "10至 20 之间的偶数之和 "

End Sub

Page 30: VBA 程序设计概述

循环结构控制编写 E2() 过程,输出 100 以内的所有奇数之

和Sub E2()

Dim I As Integer, S As Integer

For I = 1 To 100 Step 2

S = S + I

Next I

MsgBox S, , "100 以内奇数之和 "

End Sub

Page 31: VBA 程序设计概述

循环结构控制编写 E3() 过程,输出 4 !

Sub E3()

Dim i As Integer, s As Single

s = 1

For i = 1 To 4

s = s * i

Next i

MsgBox s, , "4!"

End Sub

Page 32: VBA 程序设计概述

循环结构控制编写 E4() 过程,输出 1!+2!+3!+4 !

Sub E4()

Dim i As Integer, s As Single, y As Single

s = 1

For i = 1 To 4

s = s * i

y = y + s

Next i

MsgBox y, , "4!"

End Sub

Page 33: VBA 程序设计概述

循环结构控制循环的嵌套:输出 1 ! +2 ! +3 ! +4 !

Sub E4() Dim i As Integer, j As Integer, s As Single, y As Single For i = 1 To 4 s = 1 For j = 1 To i s = s * j Next j y = y + s Next i MsgBox y, , “4! 为 "End Sub注意“ s=1” 语句的作用和在程序中的位置

Page 34: VBA 程序设计概述

循环结构控制 编程求水仙花数。所谓“水仙花数”是指一个三位数,其各位数字的立

方和等于该数本身(如 153=13+53+33 )。 Sub E5() Dim a As Integer, b As Integer, c As Integer, y As Single For a = 1 To 9For b = 0 To 9For c = 0 To 9 y = a * 100 + b * 10 + c If y = a * a * a + b * b * b + c * c * c Then MsgBox y, , "水仙花数 "

Next cNext bNext aEnd Sub

Page 35: VBA 程序设计概述

循环结构控制Do While...Loop 语句

Do While...Loop 通常用于循环次数未知的过程语法格式:

Do While < 循环条件表达式 >

[ 循环体 ]

Loop

循环体中必须有“破坏”循环条件成立的语句,以免“死循环”

强制终止循环的语句是 Exit Do ,跳出循环后执行 Loop 后的语句。

Page 36: VBA 程序设计概述

循环结构控制我国有 13 亿人口,按人口年增长 0.8% 计算,多少

年后我国人口超过 26 亿。 Sub Popu()

x=13

n=0

Do While x<26

x=x*1.008

n=n+1

Loop

MsgBox n

End Sub

Page 37: VBA 程序设计概述

循环结构控制有一张厚 0.5mm 面积足够大的纸,将它不断对折。

问对折多少次后其厚度超过珠穆朗玛峰的高度( 8848000mm )。 Sub zmlm() h = 0.5 n = 0 Do While H < 8848000 h= h * 2 n = n + 1 Loop MsgBox n, , "折叠的次数 " End Sub