用列信息批量生成工作表,看这篇就够了
▎写在前面
本文通过一个简单的案例,详细讲解批量生成多个工作表的VBA需求,并考虑可能出现的一些问题,加深对If条件判断的使用。新手建议一步一步根据文章内容进行测试。
▎案例需求
实际需求模拟如下:
以当前工作表作为模板表格,以H列信息作为需要生成的工作表名称,批量生成。

实现代码:
Sub 批量生成工作表()Application.ScreenUpdating = False '取消屏幕刷新,加快速度Set sht = Worksheets("模板") '将名字为模板的sheet赋值给对象变量shtFor 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列的具体单元格名字NextApplication.ScreenUpdating = True '开启屏幕刷新MsgBox "完成!"End Sub


录制宏的语句:
Sub 宏1()Sheets("对照表").Copy After:=Sheets(1)End Sub
代码整体运行结果:

Sub 批量生成工作表()Application.ScreenUpdating = False '取消屏幕刷新,加快速度Set sht = Worksheets("模板") '将名字为模板的sheet赋值给对象变量shtFor 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'删除程序执行按钮NextApplication.ScreenUpdating = True '开启屏幕刷新MsgBox "完成!"End Sub
当然,根据实际情况来,如果把Sheet名列和模板Sheet不在一个Sheet里面的话,就不必这两句删除代码了。
▎变化的情形
完整代码:
Sub 批量生成工作表2()Application.ScreenUpdating = False '取消屏幕刷新,加快速度Set sht = Worksheets("模板") '将名字为模板的sheet赋值给对象变量shtFor i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '对H列数据进行循环If IsSheetExisted(sht.Cells(i, "h")) = False Thensht.Copy After:=Worksheets(Worksheets.Count) '录制宏可得到该句代码,目的是将模板表复制并且新增作为最后一个表格Worksheets(Worksheets.Count).Name = sht.Cells(i, "h") '修改sheet的名字为H列的具体单元格名字Worksheets(Worksheets.Count).Columns("h").DeleteWorksheets(Worksheets.Count).Shapes("按钮 1").DeleteEnd IfNextApplication.ScreenUpdating = TrueMsgBox "完成!"End SubFunction IsSheetExisted(tabname As String) As BooleanDim sht As WorksheetFor Each sht In WorksheetsIf sht.Name = tabname ThenIsSheetExisted = TrueExit FunctionEnd IfNextIsSheetExisted = FalseEnd Function

Sub 批量生成工作表2()Application.ScreenUpdating = False '取消屏幕刷新,加快速度Set sht = Worksheets("模板") '将名字为模板的sheet赋值给对象变量shtFor i = 2 To sht.Cells(Rows.Count, "h").End(3).Row '对H列数据进行循环If sht.Cells(i, "h") <> "" ThenIf IsSheetExisted(sht.Cells(i, "h")) = False Thensht.Copy After:=Worksheets(Worksheets.Count) '录制宏可得到该句代码,目的是将模板表复制并且新增作为最后一个表格Worksheets(Worksheets.Count).Name = sht.Cells(i, "h") '修改sheet的名字为H列的具体单元格名字Worksheets(Worksheets.Count).Columns("h").DeleteWorksheets(Worksheets.Count).Shapes("按钮 1").DeleteEnd IfEnd IfNextApplication.ScreenUpdating = TrueMsgBox "完成!"End SubFunction IsSheetExisted(tabname As String) As BooleanDim sht As WorksheetFor Each sht In WorksheetsIf sht.Name = tabname ThenIsSheetExisted = TrueExit FunctionEnd IfNextIsSheetExisted = FalseEnd Function
评论
