我有一个包含多个工作表的工作簿,其中一个工作表是仪表板,另一个工作表包含基于其他工作表上包含的数据的图表的报表。
我还有模块 1,其中包含所有工作簿的 VBA。
是否可以在仪表板上有一个按钮,将所有工作表复制到新工作簿,减去仪表板工作表和模块 1,并确保图表的源指向新创建的工作簿。
不需要保存新工作簿。"书1"很好。
从提供的 2 个答案中获得灵感,我最终所做的是将我的 VBA 移动到一个名为 Macros 的工作表中,然后在仪表板上的按钮上使用此代码
Private Sub cmdExport_Click()
Dim filename As String
Dim wb As Workbook
filename = "C:UsersxxxDownloadsBook1.xls"
ThisWorkbook.SaveCopyAs filename
Set wb = Workbooks.Open(filename:=filename)
Application.DisplayAlerts = False
With wb
.Sheets("Macros").Delete
.Sheets("Dashboard").Delete
End With
Application.DisplayAlerts = True
End Sub
这应该为你指明正确的方向。这只是遍历源工作簿中的每个工作表,并检查它是否在"不复制"列表中(您可以使用 AND/OR 语句添加更多工作表),然后将工作表复制到目标工作簿的末尾位置。 Excel通常会处理所有引用
Sub copySheets()
Dim ws As Worksheet
Dim Source As Workbook
Dim target As Workbook
Set target = Workbooks("Test.xlsx")
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "DashBoard" Then
ws.Copy Before:=target.Sheets(target.Sheets.Count)
End If
Next
End Sub
这应该适用于您想要的。 只需更改工作表名称即可。 这是一种简单的方法,但它需要您列出每个工作表名称。 有一种方法可以做所有工作表,减去你想要的工作表。 我会尝试让它工作并稍后发布在这里。
Sub Copy_Sheets_to_new_workbook()
' This code will copy the sheets you want to a new workbook
Sheets(Array("Your Sheet Name 1", "Your Sheet Name 2", "Your Sheet Name 3")).Select
Sheets("Your Sheet Name 1").Activate
Sheets(Array("Your Sheet Name 1", "Your Sheet Name 2", "Your Sheet Name 3")).Copy
End Sub