第二章、Excel工作薄和工作表操作


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM