1、Excel VBA第二版 第一讲 VB 语法基础Excel VBA(第二版)第一讲VB语法基础leaf2011-12-211. 宏及录制带出最重要的几个VBE结构组成:代码窗口、工程资源管理器、菜单栏、工具栏、立即窗口2. 可运行的代码由什么组成?子过程的定义Private | Public | Friend Static Sub name (arglist) statementsExit SubstatementsEnd SubSub Macro1() With Selection.Font .Color = -16776961 .TintAndShade = 0 End WithEnd S
2、ub有返回值的函数Public | Private | Friend Static Function name (arglist) As typestatementsname = expressionExit Function statementsname = expressionEnd Function 返回指定单元格的字体颜色Funcion GetFontColor(Target As Range) As LongDim lCellColor As Long If IsNumeric(Target.Value) Then lCellColor = Target.Font.Color End
3、 If GetFontColor = lCellColorEnd Sub几何运算函数 计算圆的面积Function CircleArea(R As Double) As DoubleConst PI As Double = 3.14159265358979 CircleArea = PI * R 2End Function子过程如何被调用运行的? 自动计算当前单元格为半径的圆的面积Sub AutoCalculateCircleArea() ActiveCell.Offset(0,1).Value = CircleArea(ActiveCell.Value)End Function3. 变量和常
4、量、数据类型变量声明方式Public | Private | Friend | Dim | Static WithEvents varname(subscripts) As New type ,WithEvents varname(subscripts) As New type . . .Dim lLoopRow As Long常量声明方式Public | Private Const constname As type = expression基本数据类型字符串型、数值型数据、字节型、货币性、对象型、日期型、布尔型和变体数据类型String, Byte, Integer, Long, Sing
5、le, Double, Currency, Date, Boolean, Object, Variant命名规则 名字只能由字母、数字和下划线组成; 名字的第一个字母必须是英文字母,最后一个字符可以是类型说明符; 名字的字符的最长长度是255个; 不能使用VBA的保留字为变量名 名字中的字母不区分大小写。 同一范围内命名必须唯一,所谓的作用域就是变量的作用范围。变量的赋值Let | Set varname = expression4. 运算符与表达式算术运算符运算运算符表达式举例说明幂X Y取负-X乘法*X * Y浮点除法/X / Y整数除法X Y截去小数,不舍入取模ModX Mod Y加法+
6、X + Y减法-X - Y连接运算符运算运算符表达式举例说明连接&Hello & World返回Hello World如果 expression 不是字符串,则将其转换成 String 变体。如果两个表达式都是字符串表达式,则 result 的数据类型是 String;否则 result 是 String 变体。如果两个表达式都是 Null,则 result 也是 Null。但是,只要有一个 expression 是 Null,那么在与其它表达式连接时,都将其作为长度为零的字符串 () 处理。任何 Empty 类型表达式也作为长度为零的字符串处理。连接+Hello & World返回Hello
7、 World在使用 + 运算符时有可能无法确定是做加法还是做字符串连接。为避免混淆,请使用 & 运算符进行连接,并且改进程序代码的可读性。比较运算符测试关系运算符表达式举例等于=X=Y不等于或XY小于XXY小于等于=X=X=Y比较样式LikeBAT123khg Like B?T* 返回 True比较对象变量Is使用 Is 运算符来比较两个对象引用逻辑运算符逻辑运算符表达式举例说明非NotNot X原来为真,否定为假与AndX And Y其一为假,结果为假或OrX Or Y其一为真,结果为真异或XorX Xor Y不同为真,相同为假等价EqvX Eqv Y相同为真,不同为假蕴含ImpX Imp
8、YX为真,Y为假,结果为假XYNot XX And YX Or YX Xor YX EqvYX Imp Y-1-10-1-10-1-1-1000-1-1000-1-10-1-10-100-1000-1-1表达式执行顺序 首先执行函数运算。 其次算术运算,算术运算符优先顺序:幂、取负、乘和浮点除、整除、取模、加和减、连接 再次关系运算。 最后进行逻辑运算,优先顺序为:Not、And、Or、Xor、Eqv、Imp。 注意: 在运算中,括号内的运算的优先于括号外的运算。 字符串连接运算符不是算术运算符,它的优先级高于比较运算符,低于算术运算符。 Like和比较运算符的优先顺序相同。进行模式匹配处理,
9、应该注意?和*两个通配符。Is是对象比较运算符,它不考虑对象的值,只是针对两个对象是否参照了相同的对象。 当使用幂时,负号优先,例如:4-2,表示4的负2次方。表达式书写的注意事项 乘号(*)不能省略,也不能用“ ”代替。 一般情况下,不允许两个运算符相连,应当用括号隔开。 表达式中的括号只能是圆括号。 幂运算符表示自乘,如AB表示A的B次方,即B个A连乘。当A和(或)B不是单个常量或变量,要用括号括起来。如(A+B)(C+D)5. VBA的控制结构选择控制结构1 If选择结构If condition Then statementsElse elsestatements或者,可以使用块形式的语
10、法:If condition ThenstatementsElseIf condition-n Thenelseifstatements .ElseelsestatementsEnd If(1) IfThen单向选择结构。Public Sub IfDemo1()IfThen示例Dim dPoints As Double dPoints = InputBox(请输入得分!, 选择结构示例) If dPoints = 320 Then Call MsgBox(达到或超过分数线,录取了!, vbExclamation, IfThen示例)End Sub(2) IfThenElse双向选择结构。简单示
11、例Public Sub IfDemo2()IfThenElse简单示例Dim dPoints As Double dPoints = InputBox(请输入得分!, IfThen) If dPoints = 320 Then Call MsgBox(达到或超过录取分数线,录取了!, vbExclamation, IfThen示例) Else Call MsgBox(没有超过录取分数线,没被录取!, vbExclamation, IfThen示例) End IfEnd Sub嵌套示例Public Sub IfDemo3()IfThenElse嵌套示例Dim dPoints As Double
12、dPoints = InputBox(请输入得分!, 选择结构示例) If dPoints = 550 Then Call MsgBox(达到或超过本科分数线,本科录取了!, vbExclamation, IfThenElse嵌套示例) Else If dPoints = 320 Then Call MsgBox(达到或超过专科分数线并且没到本科分数线,专科录取了!, vbExclamation, IfThenElse嵌套示例) Else Call MsgBox(没有超过录取分数线,没被录取!, vbExclamation, IfThenElse嵌套示例) End If End IfEnd S
13、ub组合示例Public Sub IfDemo4()IfThenElse组合示例Dim dPoints As DoubledPoints = InputBox(请输入得分!, 选择结构示例) If dPoints = 550 Then Call MsgBox(达到或超过本科分数线,本科录取了!, vbExclamation, IfThenElse组合示例) End If If dPoints = 320 And dPoints 550 Then Call MsgBox(达到或超过专科分数线并且没到本科分数线,专科录取了!, vbExclamation, IfThenElse组合示例) End
14、If If dPoints = 550 Then Call MsgBox(达到或超过本科分数线,本科录取了!, vbExclamation, IfElseIfElse示例) ElseIf dPoints = 320 Then Call MsgBox(达到或超过专科分数线并且没到本科分数线,专科录取了!, vbExclamation, IfElseIfElse示例) Else Call MsgBox(没有超过录取分数线,没被录取!, vbExclamation, IfElseIfElse示例) End IfEnd Sub2 IIf函数属于双向的选择结构.Public Sub IIfDemo()I
15、If函数示例Dim dPoints As DoubleDim sResult As String dPoints = InputBox(请输入得分!, 选择结构示例) sResult = IIf(dPoints = 320, 达到或超过录取分数线,录取了!, 没有超过录取分数线,没被录取!) Call MsgBox(sResult, vbExclamation, IIf函数示例)End Sub分支控制结构1 SelectCase 语句Select Case 语句功能根据表达式的值,来决定执行几组语句中的其中之一。Public Sub SelectCase()SelectCase示例Dim dP
16、oints As Double dPoints = InputBox(请输入得分!, 分支结构示例) Select Case dPoints Case 0 To 319.99 Call MsgBox(没有超过录取分数线,没被录取!, vbExclamation, SelectCase示例) Case 320 To 549.99 Call MsgBox(达到或超过专科分数线并且没到本科分数线,专科录取了!, vbExclamation, SelectCase示例) Case 550 To 700 Call MsgBox(达到或超过本科分数线,本科录取了!, vbExclamation, Sele
17、ctCase示例) Case Else Call MsgBox(非法输入,不能判断!, vbExclamation, SelectCase示例) End SelectEnd Sub2 Switch函数Switch(expr-1, value-1, expr-2, value-2 _ , expr-n,value-n)计算一组表达式列表的值,然后返回与表达式列表中最先为 True 的表达式所相关的 Variant 数值或表达式3 Choose函数Choose(index, choice-1, choice-2, . , choice-n)根据索引值(Index)来输出索引值数组中的对象循环控制结
18、构1 For循环(1)ForNextFor counter = start To end Step stepstatementsExit ForstatementsNext counterFor i = 1 To 10 For J = 1 To 10 For K = 1 To 10 . Next K Next JNext i(2)For EachNextFor Each element In groupstatementsExit ForstatementsNext element2 While循环While conditionstatementsWend3 DoLoop循环Do While
19、| Until conditionstatementsExit DostatementsLoop或DostatementsExit DostatementsLoop While | Until condition6. 常用函数测试函数函数说明IsNumeric(expression) 返回 Boolean 值,指出表达式的运算结果是否为数。IsDate(expression) 返回 Boolean 值,指出一个表达式是否可以转换成日期。IsEmpty(expression) 返回 Boolean 值,指出变量是否已经初始化。IsArray(varname)返回 Boolean 值,指出变量是否
20、为一个数组。IsError(expression)返回 Boolean 值,指出表达式是否为一个错误值IsNull(expression)返回 Boolean 值,指出表达式是否不包含任何有效数据 (Null)。IsObject(identifier)返回 Boolean 值,指出标识符是否表示对象变量。IsMissing(argname)返回 Boolean 值,指出一个可选的 Variant 参数是否已经传递给过程。数学函数函数说明Sin(number)返回一 Double,指定参数的 sine(正弦)值。Cos(number)返回一个 Double,指定一个角的余弦值。Tan(numbe
21、r)返回一个 Double 的值,指定一个角的正切值。Atn(number)返回一个 Double,指定一个数的反正切值。Log(number)返回一个 Double,指定参数的自然对数值。Exp(number)返回 Double,指定 e(自然对数的底)的某次方。Abs(number x)返回参数的绝对值,其类型和参数相同。Int(number)、Fix(number) 都返回参数的整数部分,区别:Int将-8.4转换成-9,而Fix将-8.4转换成-8Sgn(number) 返回一个 Variant (Integer),指出参数的正负号。number大于 0返回1number等于 0返回0
22、number小于 0返回-1Sqr(number) 返回一个Double,指定参数的平方根Rnd(number)返回0-1之间的单精度数据,x为随机种子注意: Sin、Cos、Tan和Atn中的参数number表示一个以弧度为单位的角。一般参数是以角度给定,我们可以使用公式转换成弧度:1度=/180=3.1415926/180 Rnd函数可以产生随机数,当应用程序反复使用随机数时,同一序列的随机数会反复出现,用Randomize(x)语句可以消除这种情况。x是整型数(即种子),可以省略。字符串函数函数说明Trim(string)、Ltrim(string)、Rtrim(string)返回 Va
23、riant (String),其中包含指定字符串的拷贝,没有前导空白 (LTrim)、尾随空白 (RTrim) 或前导和尾随空白 (Trim)。Len(string | varname)返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。Left(string, length)返回 Variant (String),其中包含字符串中从左边算起指定数量的字符。Right(string, length)返回 Variant (String),其中包含从字符串右边取出的指定数量的字符。Mid(string, start, length)返回 Variant (String),其中
24、包含字符串中指定数量的字符。Ucase(string)返回 Variant (String),其中包含转成大写的字符串。Lcase(string)返回转成小写的 String。Space(number)返回特定数目空格的 Variant (String)。Asc(string)返回一个 Integer,代表字符串中首字母的字符代码。Chr(charcode) 返回返回 String,其中包含有与指定的字符代码相关的字符 。StrComp(string1,string2,compare)返回 Variant (Integer),为字符串比较的结果。StrConv(string,conversio
25、n, LCID)返回按指定类型转换的 Variant (String)。Format(expression,format, firstdayofweek, firstweekofyear)返回 Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。转换函数函数说明CBool(expression)转换为Boolean型。CByte(expression)转换为Byte型。CCur(expression)转换为Currency型。CDate(expression)转换为Date型。CDbl(expression)转换为Double型。CDec(express
26、ion)转换为Decemal型。CInt(expression)转换为Integer型。CLng(expression)转换为Long型。CSng(expression)转换为Single型。CStr(expression)转换为String型。CVar(expression)转换为Variant型。Val(string)返回包含于字符串内的数字,字符串中是一个适当类型的数值。Str(number)返回代表一数值的 Variant (String)。日期与时间函数说明Now返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。Date返回包含系统日期的 Var
27、iant (Date)。Time返回一个指明当前系统时间的 Variant (Date)。Timer返回一个Single,代表从午夜开始到现在经过的秒数。TimeSerial(hour,minute,second)返回一个Variant(Date),包含具有具体时、分、秒的时间。TimeValue(time)返回一个包含时间的 Variant (Date)。DateDiff(interval,date1,date2,firstdayofweek,firstweekofyear)返回Variant(Long)的值,表示两个指定日期间的时间间隔数目。Second(time)返回一个Variant(Integer),其值为0到59之间的整数,表示一分钟之中的某个秒。Minute(time)返回一个Variant(Integer),其值为0到59之间的整数,表示一小时中的某分钟。Hour(time)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1