VBA基础教程Day02: 操作工作簿
2-1、工作簿的表示方法
VBA中,经常要在不同工作簿之间转换,工作簿的表示方法很重要,我们来看看
工作簿有几种表示方法
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方法()
Dim i
For i = 1 To Windows.Count
Cells(i, 2) = Windows(i).Parent.Name
Next
End Sub
2-2.当前工作簿与活动工作簿
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.新建工作簿
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.工作簿实例应用
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.工作表的表示方法
在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.工作表集合应用
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.工作表增加与删除
Option Explicit
Sub 宏4()
宏4 宏
Sheets("Sheet8").Select
ActiveWindow.SelectedSheets.Delete
End Sub
2-8.工作表增加删除实例
如果想批量新建工作表,可以结果循环来制作
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.工作表移动与复制
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.工作表选择与激活
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.工作簿综合运用(拆分工作簿)
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