▎写在前面 本文通过一个简单的案例,详细讲解批量生成多个工作表的VBA需求,并考虑可能出现的一些问题,加深对If条件判断的使用。新手建议一步一步根据文章内容进行测试。 ▎案例需求 实际需求模拟如下: 以当前工作表作为模板表格,以H列信息作为需要生成的工作表名称,批量生成。 实现代码: Sub 批量生成工作表() Application.ScreenUpdating = False '取消屏幕刷新,加快速度 Set sht = Worksheets("模板") '将名字为模板的sheet赋值给对象变量sht For i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '对H列数据进行循环 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列数据进行循环 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'删除程序执行按钮 Next Application.ScreenUpdating = True '开启屏幕刷新 MsgBox "完成!" End Sub 当然,根据实际情况来,如果把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列数据进行循环 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列数据进行循环 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 |
|