如何通过VBA代码将新建工作表置于现有工作表之后?
修改VBA代码:让新建工作表全部置于现有工作表之后
你的现有代码会把新工作表插在第i个工作表后面,导致新表混在原有工作表中间。要实现所有新表都放在现有工作表的最后,只需要调整复制模板表时的位置参数,同时优化新表的引用方式避免索引错误,修改后的完整代码如下:
Function create_sheets() Dim i As Long, LastRow As Long Dim wsList As Worksheet, wsTemplate As Worksheet, wsNew As Worksheet ' 设置工作表引用 Set wsList = ThisWorkbook.Worksheets("list") Set wsTemplate = ThisWorkbook.Worksheets("Template") ' 找到List表A列最后一行数据 LastRow = wsList.Cells(wsList.Rows.Count, "A").End(xlUp).Row ' 循环处理List表A列的每个条目 For i = 1 To LastRow ' 复制模板表到当前工作簿所有工作表的最后位置 wsTemplate.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) Set wsNew = ActiveSheet ' 直接引用刚创建的新工作表 ' 用List表A列的值重命名新工作表 wsNew.Name = wsList.Cells(i, 1).Value ' 更新新工作表B2单元格为表名 wsNew.Range("B2").Value = wsNew.Name Next i MsgBox "工作表创建完成" End Function
关键修改说明:
- 调整复制位置:把原来的
wsTemplate.Copy After:=Sheets(i)替换为wsTemplate.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count),ThisWorkbook.Sheets.Count会返回当前工作簿的总工作表数,用这个值作为索引就能定位到最后一个工作表,确保新表始终追加在末尾。 - 优化新表引用:新增
wsNew变量直接引用刚复制出来的工作表,代替原来的Sheets(i+1)——因为每次新建表后,工作表总数会增加,原来的索引逻辑会失效,直接引用当前激活的新表更可靠。
内容的提问来源于stack exchange,提问作者IARAIN
相关产品推荐
相关产品推荐

