第3章 Excel VBA基础语法 【中】

来源:互联网 发布:javascript中的date 编辑:程序博客网 时间:2024/05/22 04:40
概述:

继续上一篇

4、集合、对象、属性和方法

万物皆对象,属性就是描述对象的形容词,方法就是对象的动作

例如人是一个对象,它属性:身高,体重,肤色, 它动作:走路,吃饭,思考等等。

对象和属性是相对的。它对于上一级它属性,对于下一级的它是属性。例如

工作表是对象,对于工作簿来说 它算是属性  (记住一点就是,总是从大对象一直到小对象,越到后面越具体,它们直接采用“.”进行连接)

例如: Application.Workbooks("Book1").Worksheets("Sheet2").Range("A2")

总结:

  • 1、这句话意思就是先工作簿Book1,然后找到工作表Sheet2,最后找到单元格A2
  • 2、两个对象之间采用“.”进行连接
  • 3、一定由大对象到小对象(越后面越具体)类似地址一样

5、连接的桥梁,VBA中的运算符 (你让它干啥活)

5.1 算术运算符

一说到算术运算,第一想到的四则运算。


注意: Mod用得比较多,“/” 、“\”的区别

5.2 比较运算符



VBA中的通配符(like)



5.3、连接运算符

只有两种 &+

&: 只能字符串拼接

+:会根据两个表达式判断,如果两个表达式是数字,它会执行加法算法,其他情况和&一样功能字符串拼接 

5.4、逻辑运算符



5.5、运算符的优先级

问题来了,这么多运算符,如果混合出现应该执行先执行什么?(其实你编程时候注意一下,你认为优先级高用“()”括起来就行了)


6、内置函数

VBA中已经为我们封装很多函数和属性,比如日期 Date 和 Time() 

Option ExplicitSub wdate()     MsgBox "现在日期是:" & Date & "  " & Time()End Sub



当然还有很多函数,你可以在代码编辑页面按F1查看   或者点击菜单


7、控制程序执行,VBA的基本语句结构

大家应该理解三种语句结构:顺序结构,选择结构(或分支结构),循环结构

7.1、顺序结构

根据代码一直从上往下执行。

7.2、选择结构

也就是有几种情况供你选择,当然选择是有条件的

方法一: If .... then   

语法:
if  条件  then

执行语句1  (当条件满足的执行,也就是条件=true)

Else     

执行语句2   (当条件不满足的执行,也就是条件=false)

End if      (结束if语句结构)

简单流程图


例子:

Option ExplicitSub iftest()     If Range("A1") = "" Then                MsgBox "单元格A1为空"      Else           MsgBox "单元格A1有值"           End IfEnd Sub


当然你可以调试,可以看出执行每一句话,如果是一句一句执行按F8就行



方法二:Select Case 语句

语法:

Select Case  值(条件可以数值表达式或字符串表达式)

Case  (含有IsTo 表达式)

语句1                          (上面为true执行) 

Case  (含有IsTo 表达式)

语句2                         (上面为true执行) 

  ......

Case Else 

语句 n

End Select 

备注:Is 表示是意思, 例如: 值 Is  < 1 (表示条件是否小于1), To 表示到意思, 例如 Case 1 To 3 , 表示值是否在1到3之间,包括1和3

这个if很相似,记住一点就是Select Case 是If的特例,  Select Case 类似枚举意思

例子

Option ExplicitSub caseTest()  Dim score As String    '定义变量保存结果    Select Case Range("A1")   '获取单元格A1的值    Case Is >= 90      score = "优"      Case Is >= 80        score = "良"  Case Is >= 70        score = "中"      Case Is >= 60      score = "及格"     Case Else     score = "不及格"    End Select     Range("B1") = score   '将值写到单元格B1End Sub


7.3、循环结构

方法一: For ... Next 语句

语法:

For  循环变量    Step  数字             (Step表示步长,每隔多少数字,这个是可选的)

  循环体

Next     (下一个)

改变上面的例子,如果有很多学生如何快速给出评判

Option ExplicitSub caseTest()  Dim score As String, i#    '定义变量保存结果,你是否记得#代表整数    For i = 1 To 10 Step 1        Select Case Range("A" & i) '获取单元格Ai的值                Case Is >= 90                      score = "优"                      Case Is >= 80                        score = "良"                  Case Is >= 70                        score = "中"                      Case Is >= 60                      score = "及格"                     Case Else                     score = "不及格"            End Select         Range("B" & i) = score  '将值写到单元格BiNext iEnd Sub


有些时候想要找到某个值之后,立即结束循环,例如按顺序找第一个得到“优”的同学,并把编号和成绩打印出来

需要用到关键字 Exit For


方法二 Do  While 语句

Do  [While  逻辑表达式]    (为true执行,这是可选的)

<循环体>

[Exit Do]        (退出循环)

[循环体]

Loop

备注:“[]” 表示可选

修改上面的例子

Option ExplicitSub caseTest()  Dim score As String, i#    '定义变量保存结果,你是否记得#代表整数  i = 1  Do While Range("A" & i) <> ""  '表示A列直到为空单元格        Select Case Range("A" & i) '获取单元格Ai的值                Case Is >= 90                      score = "优"                      Case Is >= 80                        score = "良"                  Case Is >= 70                        score = "中"                      Case Is >= 60                      score = "及格"                     Case Else                     score = "不及格"            End Select         Range("B" & i) = score  '将值写到单元格Bi        i = i + 1     Loop End Sub



使用Exit Do 退出循环


方法三 Do Until 语句  

直到Until 逻辑表达式为true 结束循环,与Do while 相反

语法:
Do [Until逻辑表达式]  

<循环体>

[Exit Do]

[循环体]

Loop

备注:“[]” 可选的

或语法2:

Do 

<循环体>

[Exit Do]

[循环体]

Loop [Until 逻辑表达式]

修改上面的例子:


方式四: For Each ... Next 语句

一般用Range单元格进行循环,用得比较多

打印工作簿中所有工作表

Option ExplicitSub forEachTest()    Dim sht As Worksheet, i As Integer        i = 1        For Each sht In Worksheets            Range("A" & i) = sht.Name                i = i + 1            Next sht     End Sub


7.7、 其他的常用语句

GoTo语句, 让程序转到另一条语句去执行

尽量不要用,虽然用起来灵活,但是可读性差,尽量将GoTo转换成其他结构选择结构和循环结构(所以这里不打算涉及)

With语句,让代码更加简单

例如打个比如,在上海人一般会说徐汇区而不会说中国上海徐汇区,应该都知道,不必在重复一遍(dry原则 don't repeat yourself)

Option ExplicitSub notWithTest()    Worksheets("Sheet2").Range("A1").Font.Name = "仿宋"  '设置字体        Worksheets("Sheet2").Range("A1").Font.Size = 12   '设置字号        Worksheets("Sheet2").Range("A1").Font.Bold = True '字体加粗        Worksheets("Sheet2").Range("A1").Font.ColorIndex = 3 '设置字体颜色     End SubSub withTest()        With Worksheets("Sheet2").Range("A1").Font            .Name = "仿宋"                .Size = 12                .Bold = True                .ColorIndex = 3            End WithEnd Sub




原创粉丝点击