02-00、工作薄和工作表的基础知识
定义与关联:工作薄就是一个Excel文件,这个文件是由多张工作表组成的,比方说如果工作薄看做一本书,而工作表可以看做是表里的每一页。
大小:一本书到底有多厚,工作薄可以建多少个工作表,有的教材上面说是255,实际上是不完全准确的,工作表能建立多少取决于内存的大小
重要性:工作薄(workbook)与工作表(worksheet)是Excel VBA中非常重要的两个对象
工作中经常对几个工作薄中的数据进行汇总,也可能对一个表中的数据进行按不同的方式分单。
分到不同的工作表,甚至分到不同的工作薄,手工操作是一个非常麻烦的事情,所以一般通过VBA来处理,那么就需要我们对VBA中的工作表工作薄的各种表达方式以及操作有一个非常熟悉的了解,才能写出好的代码。
02-01、工作薄的表示方法
VBA中,经常要在不同工作薄之间转换,工作薄的表示方法很重要,我们来看看工作薄的几种表示方法。
例子:将所有打开的工作薄的名称取出来
以上两种方法都可以提取出工作薄的名称
02-02、当前工作薄与活动工作薄
当前工作薄: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
For Each wk In Workbooks
If wk.Name = "学习VBA.xlsm" Then
MsgBox "已经激活工作薄" & Chr(10) & wk.name
Exit Sub
End If
Next
MsgBox "没有发现工作薄,学习VBA.xlsm"
End Sub
02-03、工作薄的基本操作
workbooks由当前所有的内存中打开的workbook对象组成
向workbooks添加workbook对象
以下的操作不仅仅是针对Excel文件,对其他所有文件类型都适用比如:txt,doc等
Sub 新建工作薄()
Dim wkb As Workbook ‘声明wkb为工作薄对象
Set wkb = Workbooks.Add ‘新建工作薄,前面要加set
wkb.SaveAs "C:\Users\asus\Desktop\123.xlsx" ‘保存为工作薄
End Sub
Sub 打开工作薄()
Dim wkb As Workbook
Set wkb = Workbooks.Open("C:\Users\asus\Desktop\123.xlsx")
End Sub
Sub 关闭工作薄()
Workbooks("123.xlsx").Close True ‘后面的true为关闭时提示是否保存更改,选是
End Sub
Sub 文件复制和删除()
FileCopy "C:\Users\asus\Desktop\123.xlsx", "C:\Users\asus\Desktop\321.xlsx"
‘对所有文件类型都适用,新建一个工作薄,路径和名称确认好
Kill "C:\Users\asus\Desktop\321.xlsx" ‘删除工作薄
End Sub
02-04、工作薄实例应用
判断文件是否存在
Sub 文件是否存在()
Dim a As String
a = Dir("C:\Users\asus\Desktop\123.xlsx") ‘取出目录下的文件
If a = "" Then
MsgBox "不存在路径文件"
Else
MsgBox "存在文件123"
End If
End Sub
Sub 打开指定目录下的文件()
Dim a As String
a = Dir("C:\*.xlsx")
Workbooks.Open "C:\" & a
Do
a = Dir
If a <> "" Then
Workbooks.Open "C:\" & a
Else
Exit Sub
End If
Loop
End Sub
02-05、工作表的表示方法
在workbook对象中,有一个sheets集合,其成员是worksheet对象或者chart对象
worksheets仅指的是工作表,而sheets包含图表,工作表,宏表等等
VBA中,经常在工作表之间转换或者对不同工作表中的单元格区域进行操作
通常有下面几种方法:
注意:
当工作薄包含工作表、宏表、图表等时,使用索引号引用工作表如sheet(1)与worksheets(1)引用的可能不是同一个表,因为sheet中包含图表等,而worksheet仅仅只包含工作表
Sub sheetss()
Dim i As Integer
For i = 1 To sheets.Count
MsgBox sheets(i).Name ‘显示每个工作表的名称
Next
End Sub
02-06、工作表集合的应用
Sub 遍历所有的sheets()
Dim k As Integer
For Each sht In sheets
k = k + 1
Sheet2.Cells(k, 1) = sht.Name
Next
End Sub
如果有四个表,将会返回四个表“我的图表”,“我的工作表”,“sheet2”,“sheet3”
Sub 遍历worksheets()
Dim k As Integer, sht As Worksheet
For Each sht In Worksheets
k = k + 1
Sheet2.Cells(k, 2) = sht.Name
Next
End Sub
如果有四个表,将会返回三个表“我的工作表”,“sheet2”,“sheet3”
Sub 判断工作表是否存在()
For Each sht In sheets
If sht.Name = "我的工作表2" Then
MsgBox "存在"
GoTo 100:
End If
Next
MsgBox "不存在"
100
End Sub
方法2:
Sub 判断工作表是否存在2()
Dim i As Integer
For i = 1 To sheets.Count
If sheets(i).Name = "我的工作表2" Then
MsgBox "存在"
Exit Sub
End If
Next
MsgBox "不存在"
End Sub
02-07、工作表的增加与删除
增加:
Sheets.Add
表达式:Add(Before,After,Count,Type)
X|SheetType 常量之一:
XlWorksheet 工作表 XlChar 图表 XlExcel4MacroSheet 宏表 XlExcel4IntlMacroSheet 对话框
不指定默认的情况下为X|SheetType 工作表,位置为活动工作表之前
Sub 增加()
‘sheets.Add ‘在活动工作表之前添加一个工作表
‘sheets.Add sheets("ABC") ‘在工作表ABC之前添加工作表
‘sheets.Add , sheets("ABC") ‘在工作表ABC之后添加工作表
‘sheets.Add Count:=2 ‘在活动工作表之前添加2个工作表
‘sheets.Add , , 2 ‘在活动工作表之前添加2个工作表
‘sheets.Add , , , xlChart ‘添加图表
End Sub
Sub 工作表的删除()
Sheet11.Delete
End Sub
02-08、工作表增加删除实例
Sub 新建1到12月份工作表()
Dim i As Integer
For i = 12 To 1 Step -1
Sheets.Add.Name = i & "月"
Next
End Sub
Sub 删除工作表()
Application.DisplayAlerts = False ‘关闭弹出窗口
Dim j As Integer
For j = 1 To 12
Sheets(j & "月").Delete
Next
Application.DisplayAlerts = True ‘打开弹出窗口
End Sub
Application.DisplayAlerts = False ‘关闭弹出窗口
Application.DisplayAlerts = True ‘打开弹出窗口
02-09、工作表的移动和复制
Sub 移动()
Sheet1.Move , Sheet15 ‘move([before,after])
‘将sheet1表移动到sheet15表后面
Sheet1.Move after:=Sheet14 ‘两种表达方式一样
End Sub
Sub 复制()
Sheet1.Copy , Sheet15 ‘将sheet1复制到sheet15之后
Sheet1.Copy , Sheets(Sheets.Count) ‘将复制的工作表放到最后
End Sub
Sub 新建1到12月工作表()
Dim i As Integer, sht As Worksheet
For i = 1 To 12
Set sht = Sheets.Add ‘新建工作表
sht.Move , Sheets(Sheets.Count) ‘将工作表移动到最后
sht.Name = i & "月" ‘给工作表命名
Next
End Sub
02-10、工作表的选择与激活
worksheet.select 选择方法
worksheet.activate 激活方法,使当前工作表成为活动工作表
Sub 工作表选择()
Sheet1.Select ‘不支持隐藏选取工作表
Sheet15.Activate ‘支持选取隐藏的工作表
End Sub
Sub 快速选取所有工作表()
Worksheets.Select
Sheets.Select
End Sub
Sub 自定义选择()
Worksheets(Array(1, 3, 5)).Select ‘1,3,5工作表被选择
End Sub
02-11、工作薄综合运用(拆分工作表)
Sub 拆分工作表()
Application.DisplayAlerts = False
Dim sht As Worksheet, i As Integer, wk As Workbook, ss As String
For Each sht In Workbooks("工作簿1.xlsx").Sheets
Set wk = Workbooks.Add ‘给变量赋值变量要加set
i = i + 1
Workbooks("工作簿1.xlsx").Sheets(i).Copy wk.Sheets(1)
‘将原先工作薄中的工作表一个个赋值给新的工作薄中
ss = ThisWorkbook.Path & "\" & sht.Name & ".xlsx" ‘保存路径
wk.SaveAs ss
wk.Close
Next
Application.DisplayAlerts = True
MsgBox "工作薄拆分完成"
End Sub