Vba “复制”;两张具体的表格“;进入新工作簿

Vba “复制”;两张具体的表格“;进入新工作簿,vba,excel,copy,Vba,Excel,Copy,当我们有一本有几页的工作簿时 sheet_1, sheet_2, ..., sheet_n, sheet_constant 我们喜欢用两张纸成对地创建n个工作簿 workbook 1: sheet_1, sheet_constant workbook 2: sheet_2, sheet_constant ... workbook n: sheet_n, sheet_constant 如何使用vba实现这一点 我知道我们可以用这个复印一张纸 Sub CopySheet() ThisWork

当我们有一本有几页的工作簿时

sheet_1, sheet_2, ..., sheet_n, sheet_constant
我们喜欢用两张纸成对地创建n个工作簿

workbook 1: sheet_1, sheet_constant
workbook 2: sheet_2, sheet_constant
...
workbook n: sheet_n, sheet_constant
如何使用vba实现这一点

我知道我们可以用这个复印一张纸

Sub CopySheet()
  ThisWorkbook.Sheets("sheet_1").Copy
  Application.Dialogs(xlDialogSaveAs).Show
End Sub
我试过了,但没有成功

Sub CopySheets()
  ThisWorkbook.Sheets("sheet_1").Copy
  ThisWorkbook.Sheets("sheet_constant").Copy
  Application.Dialogs(xlDialogSaveAs).Show
End Sub
您可以使用:

Sub CopySheets(VariableSheetName As String, ConstantSheetName As String)
    ThisWorkbook.Sheets(Array(VariableSheetName, _
                              ConstantSheetName)).Copy
    Application.Dialogs(xlDialogSaveAs).Show
End Sub
注意:一次复制两张工作表的优点是,工作表之间的任何引用不会突然变成指向原始工作簿的链接,如果您一张接一张地复制工作表,就会出现这种情况

此子例程可称为:

CopySheets "sheet_1", "sheet_constant"
CopySheets "sheet_2", "sheet_constant"
CopySheets "sheet_3", "sheet_constant"
或者在循环中(假设您的工作表中有数字)

或者,如果要复制所有图纸:

For Each ws in Worksheets
    If ws.Name <> "sheet_constant" Then
        CopySheets ws.Name, "sheet_constant"
    End If
Next
工作表中每个ws的

如果ws.Name“sheet_constant”,则
CopySheets ws.Name,“sheet_常量”
如果结束
下一个

基于@YowE3K答案,这是一个更通用的自动保存选项

Sub CopySheets()
    Dim ws As Worksheet
    ChDir (ThisWorkbook.Path)
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name = "sheet_constant" Then GoTo NextIteration
        ThisWorkbook.Sheets(Array(ws.Name, "sheet_constant")).Copy
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        ActiveWorkbook.SaveAs Filename:=ws.Name, FileFormat:=xlNormal, CreateBackup:=False
        ActiveWorkbook.Saved = True
        ActiveWindow.Close
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
NextIteration:
    Next ws

End Sub

这是一项重复性任务,特定于其他用例。进行了研究,只找到了一张工作表的解决方案。如果您向
子副本(intSheet为整数)
添加一个参数,然后将第一个数组元素从
工作表\u 1更改为
intSheet
,这将完全符合他的要求
@dbmitch-谢谢你的建议-我已经编辑了我的答案,将两张表作为参数传递。(对于gco应用程序的任何后续用户来说,如果他们能够查看调用代码并看到两张被提及的表单,可能会更直观。)在该代码中使用
i
,将导致问题,除非“sheet_constant”是循环中处理的最后一张表单。您可以使用
ThisWorkbook.Sheets(数组(ws.Name,“sheet\u常量”))修复它。复制
。(您也可以通过将
i=i+1
移动到标签后面来修复它,但无论如何都不需要
i
,因此更容易摆脱它。)
Sub CopySheets()
    Dim ws As Worksheet
    ChDir (ThisWorkbook.Path)
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name = "sheet_constant" Then GoTo NextIteration
        ThisWorkbook.Sheets(Array(ws.Name, "sheet_constant")).Copy
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        ActiveWorkbook.SaveAs Filename:=ws.Name, FileFormat:=xlNormal, CreateBackup:=False
        ActiveWorkbook.Saved = True
        ActiveWindow.Close
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
NextIteration:
    Next ws

End Sub