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