【发布时间】:2021-06-16 21:02:27
【问题描述】:
我正在尝试创建一个宏,该宏将多个工作表的值(除第一个之外)从活动工作簿复制到一个新工作簿中,我已将路径放在 sheet1 的单元格 F21 中。
下面是使我能够为 sheet2 执行此操作的代码。但我似乎找不到如何调整它,以便它适用于第 2、3、4、5、6、7、8 和 9 页。
另一个需要注意的有趣的事情是 sheet8 包含数据透视表,将其复制到另一个工作表时似乎是一个问题。
你知道我该怎么做吗? (顺便说一句,如果你知道怎么做,但是 sheet1 包含在新文件中,这不是什么大问题)
非常感谢。
Sub export()
Dim SourceBook As Workbook, DestBook As Workbook, SourceSheet As Worksheet, DestSheet As Worksheet
Dim SavePath As String, i As Integer
Application.ScreenUpdating = False
Set SourceBook = ThisWorkbook
SavePath = Sheets("Sheet1").Range("F21").Text
Set SourceSheet = SourceBook.Sheets("Sheet2")
Set DestBook = Workbooks.Add
Set DestSheet = DestBook.Worksheets.Add
Application.DisplayAlerts = False
For i = DestBook.Worksheets.Count To 2 Step -1
DestBook.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
SourceSheet.Cells.Copy
With DestSheet.Range("A1")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats 'Delete if you don't want formats copied
End With
DestSheet.Name = SourceSheet.Name
DestBook.Activate
With ActiveWindow
.DisplayGridlines = False
.DisplayWorkbookTabs = False
End With
SourceBook.Activate
Application.DisplayAlerts = False 'Delete if you want overwrite warning
DestBook.SaveAs Filename:=SavePath
Application.DisplayAlerts = True 'Delete if you delete other line
SavePath = DestBook.FullName
DestBook.Close 'Delete if you want to leave copy open
MsgBox ("A copy has been saved to " & SavePath)
End Sub
【问题讨论】:
-
要复制其他工作表,您可以将工作表对象或工作表名称作为参数传递给过程。
-
或循环浏览工作表,例如
For each ws in Activeworkbook.Worksheets -
@J.Garth,谢谢,看起来怎么样?
-
@BruceWayne,你会从哪里开始这个循环?因为这是我试图做的,但似乎没有找到合适的位置来开始循环
标签: excel vba pivot pivot-table worksheet