VBA基础知识整理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
版权
最近由于项目的需要,需要在Excel自定义一些函数,来完成特殊的处理,为了完成工作,就囫囵吞枣的写了一些代码,现在闲暇下来,就好好的学习一下,VBA的基础知识。1.变量    1.Dim <<variable_name>> As <<variable_type>>    2.规则        变量名称必须使用一个字母作为第一个字符。        变量名称不能使用空格,句点(.),感叹号(!)或字符@,&,$,#。        变量名称的长度不能超过255个字符。        不能使用Visual Basic保留关键字作为变量名称。    3.         Sub var()            Dim str As String            str = "string"            MsgBox (str)        End Sub2.常量    1.Const <<constant_name>> As <<constant_type>> = <<constant_value>>    2.规则        常量名称必须使用一个字母作为第一个字符。        常量名称不能在名称中使用空格,句点(.),感叹号(!)或字符@,&,$,#。        常量名称的长度不能超过255个字符。        不能使用Visual Basic保留关键字作为常量名称。    3.        Sub const_var()            Const MyInteger As Integer = 720            MsgBox (MyInteger)        End Sub3.数组    1.数组声明的方式与声明变量相同,只是数组变量的声明使用括号    2.规则        若数组大小被指定为5,但是当数组索引从零开始时,它可以保持6个值        数组索引不能是负数        可以在一个数组变量中存储一个整数,字符串或字符。    2.数组声明        定义            1. Dim arr1()              2. Dim arr2(5)            3. arr3 = Array("apple","Orange","Grapes")        赋值            Dim arr(5)            arr(0) = "1"            arr(2) = 100             arr(3) = 2.45            arr(4) = #10/07/2013#   ’日期            arr(5) = #12.45 PM#  '时间    3.多维数组        定义            1. Dim arr(2,3)        赋值            arr(0,0) = "Apple"             arr(0,1) = "Orange"            arr(1,0) = "cucumber"    4.数组方法        LBound(ArrayName[,dimension])            '返回指定数组的最小下标,数组的LBound的结果是零。            MsgBox ("Line 1 : " & LBound(Array(5, 2, 3)))        UBound(ArrayName[,dimension])            '返回指定数组的最大下标。            MsgBox ("Line 1 : " & UBound(Array(5, 2, 3)))        Split(expression[,delimiter[,count[,compare]]])            '返回一个数组,其中包含基于分隔符分割的特定数量的值。            Split("Red $ Blue $ Yellow","$")        Join(List[,delimiter])            '返回一个包含数组中指定数量的子串的字符串            MsgBox ("Line 1" & " is :" & Join(Array("Red", "Blue", "Yellow"), "---"))        Filter(inputstrings,value[,include[,compare]])            '函数返回一个基于零的数组,其中包含基于特定过滤条件的字符串数组的子集。        IsArray(variablename)            '返回一个布尔值,指示指定的输入变量是否是数组变量            msgbox("Line 1 : " & IsArray(Array(1,2,3)))            msgbox("Line 1 : " & IsArray("sdfadd"))4.ReDim语句    ’用于声明动态数组变量并分配或重新分配存储空间    ReDim [Preserve] varname(subscripts) [, varname(subscripts)]    Sub Constant_demo_Click()       Dim a() as variant       i = 0       redim a(5)       a(0) = "XYZ"       a(1) = 41.25       a(2) = 22       REDIM PRESERVE a(7)       For i = 3 to 7       a(i) = i       Next       'to Fetch the output       For i = 0 to ubound(a)          Msgbox a(i)       Next    End Sub5.运算符    1.算术操作符        + : 两个操作数相加        - : 两个操作数相减        * : 两个操作数相乘        / : 两个操作数相除        % : 模运算符,整数除法后的余数        ^ : 指数运算符    2.比较运算符        = : 检查两个操作数的值是否相等。如果是,那么条件是真。           <> : 检查两个操作数的值是否不相等。如果值不相等,则条件为真。           > : 检查左操作数的值是否大于右操作数的值。如果是,那么条件是真。          < : 检查左操作数的值是否小于右操作数的值。如果是,那么条件是真。          >= : 检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件是真。         <= : 检查左操作数的值是否小于或等于右操作数的值。如果是,那么条件是真。      3.逻辑运算符        AND : 两个条件都为真,则表达式为真。        OR : 如果两个条件中的任何一个为真,则条件为真。        NOT : 用于反转其操作数的逻辑状态。 如果条件成立,那么逻辑非运算符结果是条件不成立。        XOR : 如果表达式中只有一个表达式的值为True,则结果为True。    4.连接操作符        & : 连接两个值            1 & 2 = 12            "1" & "2" = 12        + : 将两个值添加为变量,其值是数字            1 + 2 = 3            "1" + "2" = 126.单元格的格式方法    1.Range        Range("A1")  '表示A1单元格        Range("A1:A9")    '表示A1-A9单元格    2.[]        [A1]    '表示A1单元格        [A1:A9]     '表示A1到A9单元格    3.Cells(第几行,第几列)        Cells(1,1)   '表达第一行第一列的单元格7.VBA对单元格的操作    1.获取单元格的值        Sub alert()            'A1 = Sheets(1).[a1]    '获取第一个工作表(表名为工作表1)中A1的值赋值给X            'A1 = Sheets("工作表1").[a1]            'A1 = Sheets(1).Cells(1, 1)            'A1 = Sheets("工作表1").Cells(1, 1)            A1Range("A1").Value    '获取当前工作表A1的值            MsgBox (A1)   '弹出对话框        End Sub    1.单元格赋值        Sub setVal()            Range("A1").Value = 100   '点击VBAProject窗口的'运行子过程'        End Sub    2.设置单元格的填充色        Sub setColor()            Range("B3").Interior.ColorIndex = 3   '值有1-56,代表56种颜色        End Sub    3.单元格的复制、粘贴        Sub cut()            Range("B3").copy Range("C3")   '将B3的值,复制到C3单元格        End Sub    4.单元格的剪切        Sub cut()            Range("A1").cut Range("B3")  '将A1的值,剪切到B3单元格        End Sub8.条件判断结构    if then 语句        Sub if_test()            B3 = Range("B3").Value            If B3 > 10 Then                MsgBox ("大于10")    '弹出字符串时,必须为双引号            ElseIf B3 < 10 Then                MsgBox ("小于10")            Else                MsgBox ("aaaa")            End If            MsgBox (B3)        End Sub9.选择判断结构    Select Case 语句        Sub select_test()            B3 = Range("B3").Value            Select Case B3            Case 1 To 10                msg = "1到10之间"            Case 11 To 20                msg = "11到20之间"            Case 21, 22                msg = "21,22的值"            Case Else                msg = "其他的值"            End Select            MsgBox (msg)        End Sub10.循环结构    for next 语句        Sub for_test()            For i = 1 To 10 Step 1                If i > 5 Then                        Exit For    '跳出for循环                End If                Range("D" & i).Value = i    '循环赋值给D1-D10            Next i        End Sub    for each 语句:用于为数组或集合中的每个元素        Sub for_ecah_test()            fruits = Array("苹果", "香蕉", "雪梨")            For Each Item In fruits                MsgBox (Item)            Next        End Sub    do  while  loop         Sub do_while_loop_test()           Do While i < 5    '在循环开始时,判断条件是否符合              If i > 3 Then                  MsgBox ("跳出循环")                  Exit Do              End If              i = i + 1              MsgBox ("The value of i is : " & i)           Loop        End Sub        Sub do_while_loop_test()           Do               If i > 3 Then                  MsgBox ("跳出循环")                  Exit Do              End If              i = i + 1              MsgBox ("The value of i is : " & i)           Loop While i < 5    '在循环结束时,判断条件是否符合        End Sub11.sub 与 function 的区别    子过程不需要有返回一个值,而函数可能会或可能不会有返回一个值。    子程序可以不用call关键字来调用。    子程序总是包含在Sub和End Sub语句中。    过程调用函数:        Function function_test(ByVal col, ByVal start_row, ByVal end_row)            total = 0                For i = start_row To end_row Step 1                    total = total + Range(col & i).Value                Next i            function_test = total        End Function        Sub call_function()            MsgBox ("总和为:" & function_test("A", 1, 5))        End Sub    函数调用过程        Sub test(name As String, age As Integer)           MsgBox ("姓名:" & name & "年龄 :" & age)        End Sub        Function call_sub()            test "aaa", 22        End Function12.字符串函数    InStr([start,]string1,string2[,compare])         '函数返回一个字符串第一次出现在一个字符串,从左到右搜索。返回搜索到的字符索引位置。        MsgBox ("Line 1 : " & InStr(1, “safdfasdf”, "s"))     InStrRev(string1,string2[,start,[compare]])        '函数返回一个字符串在另一个字符串中的第一次出现。搜索从右到左        msgbox("Line 1 : " & InStrRev("asdfasdf","s",10))    Lcase(String)        '将字符串转换为小写字母后返回字符串        msgbox("Line 1 : " & LCase("DJUEG"))    UCase(String)        '将字符串转换为大写字母后返回字符串        msgbox("Line 1 : " & LCase("ioek"))    Left(String, Length)        '从字符串的左侧返回指定数量的字符        msgbox("Line 1 : " & Left("adfasdf",2))    Right(String, Length)        '从字符串的右侧返回指定数量的字符        msgbox("Line 1 : " & Right("adfasdf",2))    Mid(String,start[,Length])        ’返回给定输入字符串中指定数量的字符        msgbox("Line 1 : " & Mid("adfsd",2))    Ltrim(String)        '删除字符串左侧的空格。        msgbox "After Ltrim : " & LTrim("   adfasdfsd")    RTrim(String)        '删除字符串右侧的空格        msgbox "After Ltrim : " & RTrim("adfasdfsd  ")    Trim(String)        '删除给定输入字符串的前导空格和尾随空格        msgbox "After Ltrim : " & RTrim("   adfasdfsd  ")    Len(String)        '返回给定输入字符串的长度,包括空格        msgbox("Length of var1 is : " & Len("sdf sdfsd  "))    space(number)        '用特定数量的空格填充字符串        msgbox("aaa" & Space(2)& "bbb")    StrComp(string1,string2[,compare])        '比较两个给定字符串后,返回一个整数值。        msgbox("Line 1 :" & StrComp("Microsoft","Microsoft"))    Replace ( string1, find, replacement, [start, [count, [compare]]] )        '用另一个字符串替换字符串后返回字符串。        msgbox("Line 1 :" & Replace("alphabet", "a", "e", 1, 1))    String(number,character)        '使用指定的字符填充指定次数的字符串        msgbox("Line 1 :" & String(3,"$"))    StrReverse(string)        '反转指定的字符串         msgbox("Line 1 : " & StrReverse("VBSCRIPT"))13.日期函数    date()        '返回当前的系统日期        msgbox("The Value of a : " & a)    cdate(date)        '将有效的日期和时间表达式转换为类型日期        MsgBox ("The Value of a : " & CDate("Jan 01 2020"))    DateAdd(interval,number,date)        '将有效的日期和时间表达式转换为类型日期        msgbox("Line 1 : " &DateAdd("h",1,"01-Jan-2013 12:00:00"))    DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])        '返回两个指定的时间间隔之间的差值。        msgbox("Line 2 : " &DateDiff("q","01-Jan-09 00:00:00","01-Jan-10 23:59:00"))    DatePart(interval,date[,firstdayofweek[,firstweekofyear]])        '返回给定日期的特定部分        msgbox("Line 4 : " & DatePart("m","2013-01-15"))    Day(date)        '返回1到31之间的数字,表示指定日期的一天        msgbox(Day("2018-06-30"))    DateSerial(year,month,day)        '返回指定的日期,月份和年份参数的日期        msgbox(DateSerial(2018,5,10))    FormatDateTime(date,format)        '格式化并返回有效的日期和时间表达式        msgbox("Line 5 : " & FormatDateTime("2018-08-15 20:25",4))    IsDate(expression)        '判断是否为日期,它都会返回一个布尔值           msgbox("Line 1 : " & IsDate("Nov 03, 1950"))    Month(date)        '返回1到12之间的数字,表示指定日期的月份。        msgbox("当前的月份的值是:"&Month("2018-06-30"))    Year(date)        '返回一个表示指定日期的年份的整数        msgbox(Year("2018-06-30"))    MonthName(month[,toabbreviate])        '回指定日期的月份名称。        msgbox("Line 1 : " & MonthName(01,True))        msgbox("Line 2 : " & MonthName(01,false))    Weekday(date[,firstdayofweek])        '返回一个从1到7的整数,表示指定日期的星期几。        msgbox("Line 1: " & Weekday("2013-05-16",1))    WeekdayName(weekday[,abbreviate[,firstdayofweek]])        '返回指定日期的工作日名称        msgbox("Line 2 : " &WeekdayName(2,True))        msgbox("Line 3 : " &WeekdayName(1,False))        msgbox("Line 4 : " &WeekdayName(2,True,0))        msgbox("Line 5 : " &WeekdayName(1,False,1))
(0)

相关推荐