【问题标题】:Splitting and Hardcoding worksheets containing pivot tables包含数据透视表的拆分和硬编码工作表
【发布时间】:2015-07-01 17:33:35
【问题描述】:

我是使用 VBA 代码的新手。我有一个包含手动创建的表和数据透视表的工作簿。对于本书中的每个工作表,我想将数据硬编码到一个新的工作簿中,并将其保存为被硬编码的工作表的名称。我有下面的代码。它正在正确保存每个工作簿,但工作簿的内容不正确。每次都在我的原始工作簿中对第一个工作表的内容进行硬编码。我试图在代码末尾设置下一个 ActiveSheet,但它失败了。我有没有提到我不是程序员?请帮忙!

Sub Splitbook()

Dim path As String
Dim dt As String
path = CreateObject("WScript.Shell").specialfolders("Desktop") & "\SLF\ "
Call Shell("explorer.exe" & " " & path, vbNormalFocus)

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets 
    ActiveSheet.UsedRange.Select
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveWorkbook.SaveAs path & ws.Name, Excel.XlFileFormat.xlOpenXMLWorkbook
    ActiveWorkbook.Close SaveChanges:=False
Next ws
End Sub

【问题讨论】:

  • 好的。你的问题是什么?你的代码有什么问题?为什么叫资源管理器应用?

标签: vba excel


【解决方案1】:

您已经在工作簿的工作表中循环了代码,因此您不需要从 ActiveSheet 而是从 ws 工作表变量复制。

您也不需要使用Select 来复制数据。

Dim ws As Worksheet
Dim newBook As Workbook
For Each ws In ThisWorkbook.Worksheets
    ws.UsedRange.Copy
    Set newBook = Workbooks.Add
    With newBook.Worksheets(1).Range("A1")
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
    End With
    newBook.SaveAs Path & ws.Name, Excel.XlFileFormat.xlOpenXMLWorkbook
    newBook.Close SaveChanges:=False
Next ws

【讨论】:

  • 完美运行。这解决了我在使用 .Cells().Formula = .Cells().Value 时无法在数据透视表上使用 Set/With 的另一个问题。谢谢你的帮助!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
相关资源
最近更新 更多