Excel_2016_VBA学习笔记_工作簿与工作表篇②

1.定义

工作簿,就是Excel的一个文件,这个文件是由多张工作表组成。

工作簿可以看做一本书,而工作表可以看做是表里的每一页。

工作表能建立多少个取决去内存的大小。

重要性:工作簿(workbook)与工作表(worksheet)是Excel vba中非常重要的两个对象。

1
2
3
Sub workbooke1()
MsgBox Workbooks(1).Name
End Sub
1
2
3
4
Sub workbooke2()
MsgBox Windows.Count ' 1
MsgBox Windows(1).Parent.Name
End Sub

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

thisworkbook 当前工作簿,代码所在工作簿

activeworkbook活动工作簿,别激活的工作簿

1
2
3
4
'当前活动工作簿也可能是活动工作簿,活动工作簿主要为当前打开的使用的工作簿
Sub 当前与活动工作簿区别()
MsgBox ThisWorkbook.Name & "--" & ActiveWorkbook.Name
End Sub
1
2
3
4
'path为当前文档所在的目录,fullname为文档具体的路径
Sub 运行()
MsgBox ThisWorkbook.Path & Chr(10) & ThisWorkbook.FullName
End Sub

3.工作簿基本操作

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

向workbooks添加workbook对象

如果声明的变量是一个对象时,需要在变量前增加一个set

1
2
3
4
5
Sub 新建工作簿()
Dim wkb As Workbook
Set wkb = Workbooks.Add
wkb.SaveAs "C:\Users\shiyan\Desktop\123.xls"
End Sub
1
2
3
4
Sub 打开工作簿()
Dim wkb As Workbook
Set wkb = Workbooks.Open("C:\Users\shiyan\Desktop\123.xls")
End Sub
1
2
3
4
5
6
7
Sub 关闭工作簿1()
Workbooks("123.xls").Close True ' 这个true为默认保存关闭
End Sub

Sub 关闭工作簿2()
Workbooks("123.xls").Close ' 这里是关闭,但是如果有新增的内容,在关闭时需要手动点击保存
End Sub
1
2
3
4
Sub 文件复制与删除()
FileCopy "C:\Users\shiyan\Desktop\123.xls", "C:\Users\shiyan\Desktop\321.xls"
Kill "C:\Users\shiyan\Desktop\123.xls"
End Sub

4.工作表的表示方法

在workbook对象中,有一个sheets集合,其成员时worksheet对象或者chart对象。

worksheets仅指的是工作表,而sheets包含图表,工作表,宏表,等等

vba中,经常在工作表之间转换或者对不同工作表中的单元格区域进行操作

1
2
3
4
sub 直接使用工作表名称法()
msgbox worksheets("我的工作表").name
msgbox sheets("我的图表”).name
end sub
1
2
3
sub 索引号表示法()
msgbox worksheets(1).name
end sub
1
2
3
sub 工作表代码索引号表示法()
msgbox sheets(1).name ' 该方法只是显示的哪个sheet在第一个顺序就弹出哪个,而不是固定的sheet标识序号。
end sub
1
2
3
sub 直接取工作代码法()
msgbox sheet1.name
end sub
1
2
3
sub 活动工作表()
msgbox activesheet.name
end sub

备注:

当工作簿包括工作表、宏表、图表等时,使用索引号引用工作表如sheets(1)与worksheets(1)引用的可能不是同一个表。

5.工作表的增加与删除

sheets.add 方法

表达式.add(before,after,count,type)

xlsheettype 常量之一

xlworksheet 工作表

xlchart 图表

xlexcel4macrosheet 宏表

xlexcel4intlmacrosheet 对话框

默认值为 xlworksheet

1
2
3
4
5
6
7
sub 新建sheets()
sheets.add ' 默认创建一个工作表
sheets.add sheets("abc") '默认创建一个工作表在ABC表前方
sheets.add , sheets("abc") '默认创建一个工作表在ABC表后方
sheets.add after:=sheets("abc") ' 默认创建一个工作表在ABC表后方
sheets.add ,,, xlchart ' 新建一个图表
end sub
1
2
3
sub 删除工作表()
sheet1.delete
end sub

6.工作表移动与复制

表达式 .move(before,after)

表达式 .copy(before,after)

1
2
3
4
5
sub 移动()
sheet1.move sheet2 ' 移动sheet2到sheet1前面
sheet1.move ,sheet2 ' 移动sheet2到sheet1后面
sheet1.move after:=sheet2 ' 移动sheet2到sheet1后面
end sub
1
2
3
4
sub 复制()
sheet1.copy sheets(sheets.count) ' 把sheet1复制到当前工作簿中最后一个sheet的前面
sheet1.copy sheet3 ' 复制sheet1到sheet3的前面
end sub

7.工作表的选择与激活

worksheet.select 方法

选择对象

worksheet.activate 方法

使当前工作表成为活动工作表

工作表的选择select与activate

1
2
3
4
sub 工作表选择()
sheet3.select ' 如果sheet3为隐藏时,则会报错,提示无法选择到该表
sheet3.activate ' 如果sheet3为隐藏时,不会报错,理论已激活选择,但是因为隐藏并未选择显示到改页
end sub
1
2
3
4
sub 快速选择所有工作表()
worksheets.select ' 选择当前工作簿中所有工作表,如果有隐藏表时会报错
sheets.select ' 选择全部sheet,不管工作表还是图表
end sub
1
2
3
sub 自定义选择()
worksheets(array(1,2,3)).select ' 只选择自己选择的1,2,3
end sub

8.关闭警告提示

application.displayalerts = False 关系警告提示

application.displayalerts = true 开启警告提示

9.实战拆分工作簿到其它表

需求如下,把工作簿1中的所有工作表,拆分到其他新建的工作簿中,实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub 拆分到工作簿()
Dim wk As Workbook, ss$, k%
Application.DisplayAlerts = False
For Each sht In Workbooks(1).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

Excel_2016_VBA学习笔记_工作簿与工作表篇②
https://sh1yan.top/2019/05/11/excel-vba-2/
作者
shiyan
发布于
2019年5月11日
许可协议