vba基础

一、基础部分

(一)快捷键

alt + f11,打开编辑窗口

f1,帮助

f5,全部执行

f8,单步执行


(二)基本概念

1. 对象

1.1 定义:

一切可操作的东西,比如:工作簿、工作表、单元格、图表、透视表等。

集合:一种特殊的对象,一群对象的统称。

1.2 常用对象:
1.2.1 工作簿(Workbooks)

Workbooks(N) 第N个工作簿

Workbooks("工作簿名")

ActiveWorkbook 活动工作簿

ThisWorkBook 代码所在工作簿

1.2.2 工作表(Worksheets)

Sheets(N) 第N个工作表

Sheets("工作表名")

SheetN 第N个工作表

ActiveSheet 活动工作表

1.2.3 单元格(cells)

Range("单元格地址")

Cells(行号,列号)

[A1] 单元格简写

Activecell 活动单元格

Selection 当前被选取的区域

2. 属性

2.1 定义:

对象的特性。

2.2 例子:
Sub 名称属性()
    Sheet1.Name = "表1"
End Sub


Sub 值属性()
    Sheet1.Range("a1").Value = "赋值测试"
End Sub

3. 方法

3.1 定义:

是对对象的一种操作行为

3.2 例子:
Sub 选择方法()
    Sheet1.Range("a1:a10").Select
End Sub

    
Sub 复制方法()
    Sheet1.Range("a1:a10") = 1
    Sheet2.Range("a11:a20").Copy Sheet1.Range("a1")
End Sub

    
Sub 添加方法()
    Sheets.Add After:=ActiveSheet
End Sub

    
Sub 删除方法()
    ActiveSheet.Delete
    Sheets(3).Delete  '删除第三个sheets
    Sheet1.Range("a1,a3").Delete
End Sub

4. 常量与变量

Sub 声明变量()
    Dim bianliang As String  'as [数据类型] 可省略
    bianliang = "变量"
End Sub


Sub 声明常量()
    Const changliang As Single = 3.14  'as [数据类型] 可省略
End Sub


Sub 声明对象()
    Dim book_1 As Workbook, sheet_1 As Worksheet, range_1 As Range
    Set range_1 = [a1]  '给将对象赋值给变量时要用Set
End Sub

5. 常用运算符

Sub 算数运算符()
    MsgBox 2 + 3  '加
    MsgBox 2 - 3  '减
    MsgBox 2 * 3  '乘
    MsgBox 2 / 3  '除
    MsgBox 20 \ 3  '整除
    MsgBox 20 Mod 3  '求余
    MsgBox 2 ^ 3  '求幂
End Sub


Sub 字符连接符()
    MsgBox "字符" + "运算符"
    MsgBox "字符" & "运算符"
End Sub


Sub 比较运算符()
    MsgBox 1 = 1
    MsgBox 2 < 1
    MsgBox 2 > 1
    MsgBox 2 <= 1
    MsgBox 2 >= 1
    MsgBox 2 <> 1
End Sub


Sub 逻辑运算符()
    MsgBox 1 < 2 And 2 > 3
    MsgBox 1 < 2 Or 2 > 3
    MsgBox Not 1 < 2
End Sub

(三)基本语句结构

1. 条件语句

1.1 if 语句
'if语句
Sub 单条件语句()
    Dim num As Integer
    num = 50
    If num >= 60 Then
        MsgBox "及格"
    Else
        MsgBox "不及格"
    End If
End Sub


Sub 多条件语句()
    Dim num As Integer
    num = 81
    If num >= 90 Then
        MsgBox "优秀"
    ElseIf num >= 80 Then
        MsgBox "良好"
    ElseIf num >= 60 Then
        MsgBox "及格"
    Else
    MsgBox "不及格"
    End If
End Sub


Sub 函数型条件语句()
    Dim num As Integer
    num = 45
    MsgBox IIf(num >= 90, "优秀", IIf(num >= 80, "良好", IIf(num >= 60, "及格", "不及格")))
End Sub
1.2 select case 语句
'select case语句
Sub 单条件语句()
    Dim num%  '同 as integer
    
start:  '定位标记
    num = InputBox("请输入成绩:")
    
    Select Case num
    Case Is >= 60
        MsgBox "及格"
    Case Else
        MsgBox "不及格"
        GoTo start  '定位到重新开始的地方
    End Select
    
End Sub


Sub 多条件语句_1()
    Dim num%  '同as integer
    num = InputBox("请输入成绩:")
    
    Select Case num
    Case Is >= 90
        MsgBox "优秀"
    Case Is >= 80
        MsgBox "良好"
    Case Is >= 60
        MsgBox "及格"
    Case Else
        MsgBox "不及格"
    End Select
    
End Sub


Sub 多条件语句_2()
    Dim num%  '同as integer
    num = InputBox("请输入成绩:")
    
    Select Case num
    Case 90 To 100
        MsgBox "优秀"
    Case 80 To 89
        MsgBox "良好"
    Case 60 To 79
        MsgBox "及格"
    Case Else
        MsgBox "不及格"
    End Select
    
End Sub

2. 循环语句

2.1 for ... next 语句
'for ... next 语句
Sub 循环语句_1()
    ActiveSheet.Select
    For num = 2 To 29
        '将单元格cells(num行, 2列) 与 单元格cells(num行, 3列)相乘,赋值给单元格cells(num行, 4列)
        Cells(num, 4) = Cells(num, 2) * Cells(num, 3)
    Next num    
End Sub


Sub 循环语句_2()
    Dim pas, i
    For i = 3 To 1 Step -1
        pas = InputBox("请输入密码:")
        If pas = 666 Then
            MsgBox "密码正确,欢迎使用!"
            Exit For
        Else
            MsgBox "您还有" & i & "次机会"
        End If
    Next i
End Sub


Sub 循环语句_嵌套()
    ActiveSheet.Select
    Dim i, j As Integer
    For i = 1 To 9
        For j = i To 9
        	Cells(j, i) = i & "x" & j & "=" & i * j
        Next j
    Next i
End Sub
2.2 for each ... next 语句

主要用来循环集合、数组。

集合:

workbooks(当前打开的所有工作簿)

worksheets(指定工作簿下的所有工作表)

range("a1:a6")(指定单元格区域下的所有单元格)

'for each ... next 语句
Sub 循环语句_1()
    Dim book_1 As Workbook
    For Each book_1 In Workbooks
        MsgBox book_1.Name
    Next book_1
End Sub


Sub 循环语句_2()
    Workbooks("test.xlsb").Activate
    Dim sheet_1 As Worksheet
    For Each sheet_1 In Worksheets
        MsgBox sheet_1.Name
    Next sheet_1
End Sub


Sub 循环语句_3()
    Dim rng As Range
    For Each rng In Range("a1:d3")
        MsgBox rng.Address & ":" & rng.Value
    Next rng
End Sub


Sub 循环语句_一个例子()
    Dim rng  As Range
    For Each rng In Range("b2:b11")
        rng.Offset(0, 1) = rng.Value * 0.1  'offset(行, 列) 偏移函数
    Next rng
End Sub
2.3 do ... loop 系列语句
do ... loop
do until ... loop
do while ... loop
do ... loop until
do ... loop while
'do ... loop 语句
Sub 循环语句_1()
    Dim num%
    num = 1
    Do
        num = num + 1
        If num <= 9 Then
            MsgBox num
        Else
            Exit Do
        End If
    Loop
End Sub

    
Sub 循环语句_一个例子()
    Dim row_num%
    row_num = 1
    Do
        row_num = row_num + 1
        If Cells(row_num, "a") <> "" Then
            Cells(row_num, "d") = Cells(row_num, "b") * Cells(row_num, "c")
        Else
            Exit Do
        End If
    Loop
End Sub
        

'do until ... loop 语句
Sub 循环语句_until_1()
    Dim num%
    num = 1
    Do Until num > 9
        num = num + 1
        MsgBox num
    Loop
End Sub

        
Sub 循环语句_until_一个例子()
    Dim row_num%
    row_num = 1
    Do Until Cells(row_num + 1, "a") = ""
        row_num = row_num + 1
        Cells(row_num, "d") = Cells(row_num, "b") * Cells(row_num, "c")
    Loop
End Sub
        
        
'do while ... loop 语句        
Sub 循环语句_while_1()
    Dim num%
    num = 1
    Do While num <= 9
        num = num + 1
        MsgBox num
    Loop
End Sub
        
        
Sub 循环语句_while_一个例子()
    Dim row_num%
    row_num = 1
    Do While Cells(row_num + 1, "a") <> ""
        row_num = row_num + 1
        Cells(row_num, "d") = Cells(row_num, "b") * Cells(row_num, "c")
    Loop
End Sub


'do ... loop until 语句
Sub 循环语句_until_2()
    Dim num%
    num = 1
    Do
        num = num + 1
        MsgBox num
    Loop Until num > 9
End Sub

  
'do ... loop while 语句
Sub 循环语句_while_2()
    Dim num%
    num = 1
    Do
        num = num + 1
        MsgBox num
    Loop While num <= 9
End Sub

二、案例部分

todo