搜索
查看: 1981|回复: 0

VBA基础语法一篇

[复制链接]

977

主题

1093

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
15931
发表于 2019-10-19 16:19:47 | 显示全部楼层 |阅读模式

1.变量

    1.Dim <> As <>
    2.规则
        变量名称必须使用一个字母作为第一个字符?
        变量名称不能使用空格,句点(.),感叹号(!)或字符@,&,$,#。
        变量名称的长度不能超过255个字符?
        不能使用Visual Basic保留关键字作为变量名称?
    3.
        Sub var()
            Dim str As String
            str = "string"
            MsgBox (str)
        End Sub


2.常量
    1.Const <> As <> = <>
    2.规则
        常量名称必须使用一个字母作为第一个字符?
        常量名称不能在名称中使用空格,句点(.),感叹号(!)或字符@,&,$,#。
        常量名称的长度不能超过255个字符?
        不能使用Visual Basic保留关键字作为常量名称?
    3.
        Sub const_var()
            Const MyInteger As Integer = 720
            MsgBox (MyInteger)
        End Sub


3.数组
    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/7/2013#    '日期
            arr(5) = #12:45:00 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 Sub



5.运算符
    1.算术操作符
        + : 两个操作数相加
        - : 两个操作数相减
        * : 两个操作数相乘
        / : 两个操作数相除
        % : 模运算符,整数除法后的余数
        ^ : 指数运算符
    2.比较运算符
        = : 检查两个操作数的值是否相等。如果是,那么条件是真。
        <> : 检查两个操作数的值是否不相等。如果值不相等,则条件为真。
        > : 检查左操作数的值是否大于右操作数的值。如果是,那么条件是真。
        < : 检查左操作数的值是否小于右操作数的值。如果是,那么条件是真。
        >= : 检查左操作数的值是否大于或等于右操作数的值。 如果是,那么条件是真。
        <= : 检查左操作数的值是否小于或等于右操作数的值。如果是,那么条件是真。
    3.逻辑运算符
        AND : 两个条件都为真,则表达式为真。
        or : 如果两个条件中的任何一个为真,则条件为真。
        NOT : 用于反转其操作数的逻辑状态。 如果条件成立,那么逻辑非运算符结果是条件不成立。
        XOR : 如果表达式中只有一个表达式的值为True,则结果为True。
    4.连接操作符
        & : 连接两个值
            1 & 2 = 12
            "1" & "2" = 12
        + : 将两个值添加为变量,其值是数字
            1 + 2 = 3
            "1" + "2" = 12



6.单元格的格式方法
    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 Sub



8.条件判断结构
    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 Sub


9.选择判断结构
    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 Sub


10.循环结构
    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 Sub



11.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 Function



12.字符串函数
    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(1, True))
        MsgBox ("Line 2 : " & MonthName(1, 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))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

表格智创网

网站简介:表格智创网,是一家以表格设计和技能分享的专业社区,由会计帮帮网投资建设,尽专业,助提高专业技能。

表格智创网欢迎您!

联系我们

  • 工作时间:早上9:00-16:00
  • 客服电话:18668755857
  • 本站网址:www.excelwps.com
  • 淘宝店址:kjbbw.taobao.com

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表