1 / 37

VBA 程序设计概述

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

wauna
Download Presentation

VBA 程序设计概述

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VBA程序设计概述 主讲人:何宁 武汉大学东湖分校

  2. 第八章 宏与模块

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

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

  5. VBA编程环境 • 进入VBA编程环境 • 从数据库窗体对象列表上选择“模块”,单击工具栏上的“新建”按钮 • VBE窗口 • 在VBE环境中编写VBA代码

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

  7. VBA基础知识 • 数据类型 • 标准数据类型 • 用户自定义数据类型 • 对象数据类型

  8. VBA基础知识 • 常量 • VBA在运行时其值始终保持不变的量 • 字符串常量放在一对"内,日期/时间型常量放在一对#内。如"中国" 、#9/1/2005#等。 • 符号常量:用标识符保存一个常量值 • 使用Const语句定义符号常量,如 Const Pai = 3.141569

  9. VBA基础知识 • 变量 • 变量的命名原则 • 第一个字符必须是字母 • 包含的字符数不超过255个 • 不得与VBA的关键字同名,如不能使用Sub、For等 • 不能使用下列字符:! @ & $ # (空格) • 变量的声明 • 变量在使用前应该用Dim语句进行声明 • Dim <变量1> As <类型1>[, <变量2> As <类型2>[,...]] • Dim StudentName As String • Dim Grade As Integer, AvgGrade As Single • Dim Passed As Boolean, ExamDate As Date • 默认情况下,变量可以不经声明即可使用,该变量被自动声明为Variant类型 • 变量的应用范围

  10. Array(0)=17Array(1)=19…… VBA基础知识 • 数组 • 数组是一种数据存储结构,它用一个命名的一个集合体,用不同的下标予以区分 • 数组具有以下特性(数组中的每个数据称为元素): • 每个元素类型相同,占用同样大小的存储空间 • 数组中的元素在内存中连续存放 • 通过下标可访问数组中的每个元素。下标的类型可以是整数,常量、变量或算术表达式。 • 数组分为一维数组、二维数组和多维数组

  11. VBA基础知识 • 数组 • 维数组中的元素呈直线状排列,每个下标对应一个元素。 • 数组在使用前必须先行定义,语法格式是: • Dim <数组名>([<下界>] To 上界) As 数据类型 • 若省略下标下界,则数组的最小下标为0 • 例如: • Dim B(20) As Double • B数组共有21个元素(下标的起止范围是0~20)

  12. VBA基础知识 • 数组 • 二维数组中数据排列呈平面状,可保存一个二维表的信息。 • 数组元素使用行下标和列下标定位,定义格式: • Dim <数组名>([<下界> To] 上界,[<下界> To] 上界) As 数据类型 • 如果省略下标的下界值,则下界值默认为0 • 例如,Dim C(2,3) As Integer ,声明的C数组 • 有2*3=6个元素。 • 二维数组的操作通常需要与双重循环相结合。

  13. VBA基础知识 • 运算符 • 数学运算符 ^、*、/、\、mod、+、- • 关系运算符 =、<>、<、>、<=、>= 返回值为逻辑值:True或False • 逻辑运算符 Not、and、or • 连接运算符 &、+ 连接两个字符串

  14. → (-b+Sqr(b^2-4*a*c))/(2*a) VBA基础知识 • 表达式 • 表达式:用运算符将常量、变量、函数等连接起来的式子,书写在一行上。 • 表达式可分为: • 算术表达式,如 Count=x+1 • 关系表达式,如 C<>20 • 逻辑表达式,如 Age<=5 Or Age>=60

  15. VBA基础知识 • 函数 • 数学函数:完成数学计算功能。 • 绝对值函数 abs(<表达式>) :返回数值表达式的绝对值 • 取整函数 Int(<数值表达式>) :返回数值表达式的整数部分 • 开平方函数Sqr Int(<数值表达式>) :计算数值表达式的平方根 • 产生随机数函数Rnd (<数值表达式>) :产生一个0-1之间的随机数小数 • 字符函数:完成字符串处理功能 • 日期时间函数:处理日期和时间 • 类型转换函数:将数据类型进行转换

  16. VBA基础知识 • 函数 • 人机交互函数和过程:完成人与机器之间的交互。 • InputBox()函数 • InputBox(提示[,标题][,默认]) • “提示”: 字符表达式,在对话框中作为信息显示 • “标题”:字符表达式,在对话框中的标题区显示 • “默认”:字符表达式,在输入对话框中无输入时,该默认值作为输入的内容 Sub test() Dim strname As String, strs1 As String strs1 = "请输入你的姓名,然后单击确定" strname = InputBox$(strs1, "输入框") End Sub

  17. VBA基础知识 • MsgBox过程 • MsgBox 提示[,按钮][,标题] • “标题”:字符表达式,在对话框中的标题区显示 • “按钮”:整型表达式,决定信息按钮的数目及出现在信息框上的图标类型 Sub test() Dim strname As String, strs1 As String strs1 = "请输入你的姓名,然后单击确定" strname = InputBox$(strs1, "输入框") MsgBox "你的姓名是" & strname End Sub

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

  19. 顺序结构控制 1)注释语句 • 注释语句以Rem开头,但一般用撇号“‘”引导注释内容,用撇号引导的注释可以直接出现在语句后面。 2)声明语句 • 声明语句用于命名和定义常量、变量、数组和过程。如: Sub sample() Const PI=3.14159 Dim I as Integer … End Sub

  20. 顺序结构控制 3)赋值语句 • 赋值语句是任何程序设计中最基本的语句。赋值语句为变量指定一个值或表达式。赋值语句的形式如下: • 变量名=表达式 Dim I as Integer i=i+1

  21. 选择结构控制 • If…Then…语句 • 格式: • If <关系表达式或逻辑表达式> Then <语句> • 关系表达式或逻辑表达式成立时执行Then后的语句,否则直接执行If的下一条语句。 • <语句>可以一条语句,也可以是若干条用冒号“:”隔开的VBA语句组。

  22. 选择结构控制 • 随机出一道两位数加法题让小学生回答 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

  23. 选择结构控制 • 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

  24. 选择结构控制 • 选择分之语句 • 格式: If <关系或逻辑表达式> Then <语句组> End If • 或 If <关系或逻辑表达式> Then <语句组1> Else <语句组2> End If If Grade >= 60 Then MsgBox ("合格") Else MsgBox ("不合格") End If

  25. 选择结构控制 • 例 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 & "分的等级为" & Evalu End Sub

  26. 选择结构控制 • Select Case语句 • 格式 Select Case <测试表达式> Case <表达式1> <语句1> Case <表达式2> <语句2> … [Case Else <语句n+1>] End Select

  27. 选择结构控制 • 例 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 & "分的等级为" & Evalu End Sub

  28. 循环结构控制 • FOR语句 • 语法格式: For <循环变量>=初值 To 终值 [Step <步长值>] [循环体] Next [循环变量] • 步长值为1时可省略Step子句

  29. 循环结构控制 • 编写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

  30. 循环结构控制 • 编写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

  31. 循环结构控制 • 编写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

  32. 循环结构控制 • 编写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

  33. 循环结构控制 • 循环的嵌套:输出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”语句的作用和在程序中的位置

  34. 循环结构控制 • 编程求水仙花数。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身(如153=13+53+33)。 Sub E5() Dim a As Integer, b As Integer, c As Integer, y As Single For a = 1 To 9 For b = 0 To 9 For 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 c Next b Next a End Sub

  35. 循环结构控制 • Do While...Loop语句 • Do While...Loop通常用于循环次数未知的过程 • 语法格式: Do While <循环条件表达式> [循环体] Loop • 循环体中必须有“破坏”循环条件成立的语句,以免“死循环” • 强制终止循环的语句是Exit Do,跳出循环后执行Loop后的语句。

  36. 循环结构控制 • 我国有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

  37. 循环结构控制 • 有一张厚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

More Related