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