▎寫在前面
本文通過一個簡單的案例,詳細講解批量生成多個工作表的VBA需求,并考慮可能出現(xiàn)的一些問題,加深對If條件判斷的使用。新手建議一步一步根據(jù)文章內(nèi)容進行測試。
▎案例需求
實際需求模擬如下:
以當前工作表作為模板表格,以H列信息作為需要生成的工作表名稱,批量生成。
實現(xiàn)代碼:
Sub 批量生成工作表()
Application.ScreenUpdating = False '取消屏幕刷新,加快速度
Set sht = Worksheets("模板") '將名字為模板的sheet賦值給對象變量sht
For i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '對H列數(shù)據(jù)進行循環(huán)
sht.Copy After:=Worksheets(Worksheets.Count) '錄制宏可得到該句代碼,目的是將模板表復制并且新增作為最后一個表格
Worksheets(Worksheets.Count).Name = sht.Cells(i, "h") '修改sheet的名字為H列的具體單元格名字
Next
Application.ScreenUpdating = True '開啟屏幕刷新
MsgBox "完成!"
End Sub
錄制宏的語句:
Sub 宏1()
Sheets("對照表").Copy After:=Sheets(1)
End Sub
代碼整體運行結果:
Sub 批量生成工作表()
Application.ScreenUpdating = False '取消屏幕刷新,加快速度
Set sht = Worksheets("模板") '將名字為模板的sheet賦值給對象變量sht
For i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '對H列數(shù)據(jù)進行循環(huán)
sht.Copy After:=Worksheets(Worksheets.Count) '錄制宏可得到該句代碼,目的是將模板表復制并且新增作為最后一個表格
Worksheets(Worksheets.Count).Name = sht.Cells(i, "h") '修改sheet的名字為H列的具體單元格名字
Worksheets(Worksheets.Count).Columns("h").Delete'刪除H列信息
Worksheets(Worksheets.Count).Shapes("按鈕 1").Delete'刪除程序執(zhí)行按鈕
Next
Application.ScreenUpdating = True '開啟屏幕刷新
MsgBox "完成!"
End Sub
當然,根據(jù)實際情況來,如果把Sheet名列和模板Sheet不在一個Sheet里面的話,就不必這兩句刪除代碼了。
▎變化的情形
完整代碼:
Sub 批量生成工作表2()
Application.ScreenUpdating = False '取消屏幕刷新,加快速度
Set sht = Worksheets("模板") '將名字為模板的sheet賦值給對象變量sht
For i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '對H列數(shù)據(jù)進行循環(huán)
If IsSheetExisted(sht.Cells(i, "h")) = False Then
sht.Copy After:=Worksheets(Worksheets.Count) '錄制宏可得到該句代碼,目的是將模板表復制并且新增作為最后一個表格
Worksheets(Worksheets.Count).Name = sht.Cells(i, "h") '修改sheet的名字為H列的具體單元格名字
Worksheets(Worksheets.Count).Columns("h").Delete
Worksheets(Worksheets.Count).Shapes("按鈕 1").Delete
End If
Next
Application.ScreenUpdating = True
MsgBox "完成!"
End Sub
Function IsSheetExisted(tabname As String) As Boolean
Dim sht As Worksheet
For Each sht In Worksheets
If sht.Name = tabname Then
IsSheetExisted = True
Exit Function
End If
Next
IsSheetExisted = False
End Function
Sub 批量生成工作表2()
Application.ScreenUpdating = False '取消屏幕刷新,加快速度
Set sht = Worksheets("模板") '將名字為模板的sheet賦值給對象變量sht
For i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '對H列數(shù)據(jù)進行循環(huán)
If sht.Cells(i, "h") <> "" Then
If IsSheetExisted(sht.Cells(i, "h")) = False Then
sht.Copy After:=Worksheets(Worksheets.Count) '錄制宏可得到該句代碼,目的是將模板表復制并且新增作為最后一個表格
Worksheets(Worksheets.Count).Name = sht.Cells(i, "h") '修改sheet的名字為H列的具體單元格名字
Worksheets(Worksheets.Count).Columns("h").Delete
Worksheets(Worksheets.Count).Shapes("按鈕 1").Delete
End If
End If
Next
Application.ScreenUpdating = True
MsgBox "完成!"
End Sub
Function IsSheetExisted(tabname As String) As Boolean
Dim sht As Worksheet
For Each sht In Worksheets
If sht.Name = tabname Then
IsSheetExisted = True
Exit Function
End If
Next
IsSheetExisted = False
End Function
聯(lián)系客服