VBA基础教程Day02: 操作工作簿

2-1、工作簿的表示方法

VBA中,经常要在不同工作簿之间转换,工作簿的表示方法很重要,我们来看看

工作簿有几种表示方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub 工作簿引索号表示法()
 
MsgBox Workbooks(2).Name '返回工作簿的名称
 
End Sub
 
Sub 窗口表示法()
 
MsgBox Windows.Count '返回当前excel工作簿打开的个数
 
msgboxc Windows(1).Parent.Name '返回第几个工作簿的名称
 
End Sub
 
Sub 工作簿实例workbooks法()
 
Dim i
 
    For i = 1 To Workbooks.Count
 
       Cells(i, 1) = Workbooks(i).Name
 
    Next
 
End Sub
 
Sub 工作簿实例windows方法()<br>
Dim i
 
    For i = 1 To Windows.Count
 
       Cells(i, 2) = Windows(i).Parent.Name
 
    Next
 
End Sub

2-2.当前工作簿与活动工作簿

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Option Explicit
 
thisworkbook当前工作簿,代码所在工作簿
 
activeworkbook活动工作簿,被激活的工作簿
 
Sub 当前与活动工作簿区别实例()
 
MsgBox ThisWorkbook.Name & "---" & ActiveWorkbook.Name
 
End Sub
 
Sub 运用()
 
MsgBox ThisWorkbook.Path & Chr(10) & ThisWorkbook.FullName
 
End Sub
 
Sub 验证当前工作簿是否已打开()
 
Dim wk As Workbook, a
 
For Each wk In Workbooks
 
a = wk.Name
 
    If wk.Name = "学习VBA.xlsm" Then
 
        wk.Activate
 
        MsgBox "已激活工作簿" & wk.Name
 
        Exit Sub
 
    End If
 
Next wk
 
MsgBox "没有发现工作簿:学习VBA.xlsm"
 
End Sub
 
思考题:用workbooks.count和windows.count来做上面这道题?

2-3.工作簿基础操作

workbooks由当前所有在内存中打开的workbook对象组成

workbooks添加workbook对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1.新建工作簿
 
Sub 新建工作簿()
 
Dim wkb As Workbook '声明wkb为工作簿
 
Set wkb = Workbooks.Add '新建工作秒簿
 
wkb.SaveAs "c:\123.xls" '保存为工作簿
 
End Sub
 
2.打开工作簿
 
Sub 打开工作簿()
 
Dim wkb As Workbook
 
Set wkb = Workbooks.Open("c:\123.xls")
 
End Sub
 
3.关闭工作簿
 
Sub 关闭()
 
Workbooks("123").Close True
 
End Sub
 
4.文件复制与删除
 
Sub 文件复制与删除()
 
FileCopy "c:\123.txt", "c:\321.txt"  '对所有文件类型都起作用
 
Kill "c:\321.txt"
 
End Sub

2-4.工作簿实例应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub 文件是否存在()
 
   a = Dir("c:\123.xls")
 
   If a = "" Then
 
        MsgBox "不存在"
 
   Else
 
        MsgBox "存在"
 
   End If
 
End Sub
 
Sub 打开指定目录下的文件()
 
Dim a$, n!, wbs As Workbook
 
a = Dir("c:\*.txt")
 
Workbooks.Open "c:\" & a
 
Do
 
    a = Dir
 
    If a <> "" Then
 
        Workbooks.Open "c:\" & a
 
    Else
 
        Exit Sub
 
    End If
 
Loop
 
End Sub

2-5.工作表的表示方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
在workbook对象中,有一个SHEETS集合,其成员是worksheet对象或chart对象。
 
worksheets仅指的是工作表,而sheets包含图表,工作表,宏表等等
 
VBA中,经常在工作表之间转换或者对不同工作表中的单元格区域进行操作.
 
通常有下面几种方法:
 
Sub 直接使用工作表名称法()
 
MsgBox Worksheets("我的工作表").Name
 
MsgBox Sheets("我的图表").Name
 
End Sub
 
Sub 索引号表示法()
 
MsgBox Worksheets(1).Name
 
End Sub
 
Sub 工作表代码索引号表示法()
 
MsgBox Sheets(1).Name
 
End Sub
 
Sub 直接取工作代码法()
 
MsgBox Sheet1.Name
 
End Sub
 
Sub 活动工作表()
 
MsgBox ActiveSheet.Name
 
End Sub
 
注意:当工作簿包括工作表、宏表、图表等时,
 
使用索引号引用工作表如Sheets(1)与
 
WorkSheets(1)引用的可能不是同一个表。
 
Sub worksheetss()
 
MsgBox Worksheets(1).Name
 
MsgBox Sheets(1).Name
 
End Sub
 
Sub sheetss()
 
For i = 1 To Sheets.Count
 
MsgBox Sheets(i).Name
 
Next
 
End Sub

2-6.工作表集合应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Sub 遍历sheets下的所有对象()
 
For Each shs In Sheets
 
    k = k + 1
 
    Cells(k, 1) = shs.Name
 
Next
 
End Sub
 
  
Sub 遍历worksheets下的所能对象()
 
For Each shs In Worksheets
 
    k = k + 1
 
    Cells(k, 2) = shs.Name
 
Next
 
End Sub
 
 
Sub 工作表存在与否()
 
Dim sn$
 
For Each sht In Sheets
 
    sn = sht.Name
 
    If sn = "我的工作表" Then
 
        MsgBox "存在"
 
        Exit Sub
 
    End If
 
Next
 
    MsgBox "不存在"
 
End Sub
 
 
Sub 工作表存在与否1()
 
Dim sn$
 
For i = 1 To Sheets.Count
 
        a = Sheets(i).Name
 
    If Sheets(i).Name = "我的工作表" Then
 
        MsgBox "存在"
 
        Exit Sub
 
    End If
 
Next
 
     MsgBox "不存在"
 
End Sub

2-7.工作表增加与删除

1
2
3
4
5
6
7
8
9
10
11
Option Explicit
 
Sub 宏4()
 
宏4 宏
 
    Sheets("Sheet8").Select
 
    ActiveWindow.SelectedSheets.Delete
 
End Sub

2-8.工作表增加删除实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
如果想批量新建工作表,可以结果循环来制作
 
Sub 新建1到12月份的工作表()
 
Dim j%
 
For j = 12 To 1 Step -1
 
    Sheets.Add.Name = j & "月"
 
Next
 
End Sub
 
删除工作表
 
Sub 删除sheet()
 
On Error Resume Next
 
Application.DisplayAlerts = False
 
Dim i%
 
For i = 1 To 12
 
    Sheets(i & "月").Delete
 
Next
 
Application.DisplayAlerts = True
 
End Sub

2-9.工作表移动与复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit
 
表达式.Move(Before, After)
 
表达式.copy(Before, After)
 
Sub 移动()
 
Sheet1.Move , Sheet3
 
End Sub
 
Sub 复制()
 
Sheet1.Copy Sheets(Sheets.Count)
 
End Sub
 
Sub 实例()
 
Dim i%, sth As Worksheet
 
For i = 1 To 12
 
    Set sth = Sheets.Add
 
          sth.Move after:=Sheets(Sheets.Count)
 
          sth.Name = i & "月"
 
Next
 
End Sub

2-10.工作表选择与激活

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit
 
Worksheet.Select 方法
 
选择对象
 
Worksheet.Activate 方法
 
使当前工作表成为活动工作表
 
工作表的选择select与activate
 
Sub 工作表选择()
 
Sheet3.Select '不支持隐藏选取
 
Sheet3.Activate '支持
 
End Sub
 
Sub 快速选择所有工作表()
 
Worksheets.Select
 
Sheets.Select
 
End Sub
 
Sub 自定义选择()
 
Worksheets(Array(1, 3, 5)).Select
 
End Sub

2-11.工作簿综合运用(拆分工作簿)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub 拆分到工作簿()
 
Dim wk As Workbook, ss$, k%
 
Application.DisplayAlerts = False
 
For Each sht In Workbooks("2-11.工作簿综合运用(拆分工作簿)").Sheets
 
    Set wk = Workbooks.Add
 
    k = k + 1
 
    Workbooks(1).Sheets(k).Copy Workbooks(2).Sheets(1)
 
    ss = ThisWorkbook.Path & "\" & sht.Name & ".xlsx"
 
    wk.SaveAs ss
 
    wk.Close
 
Next
 
Application.DisplayAlerts = True
 
MsgBox "拆分工作簿完成!"
 
End Sub
posted @   海平线上的晴雨天  阅读(951)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示