从打开的工作簿中的单个工作表盲创建新的 Excel 工作簿

Posted

技术标签:

【中文标题】从打开的工作簿中的单个工作表盲创建新的 Excel 工作簿【英文标题】:Create new Excel workbook blind from a single sheet in an open workbook 【发布时间】:2019-02-25 21:30:30 【问题描述】:

我正在尝试从打开的工作表创建一个新的 Excel 文件。我在这里经历了几种解决方案,但没有一个能完全满足我的需要。我对磁盘上的 Excel 文件交互不太擅长。这是 Excel 2010。

    我有一些 VBA 代码可以将相关数据写入新工作表(比如 Sheet3)。 然后,我想将 Sheet3 的所有内容写入给定文件夹中的一个新 Excel 文件“output.xlsx”(比如说 F:\test) 我希望该过程能够盲目地创建 xlsx 文件、填充 Sheet1、保存并关闭文件,而用户不会看到打开的 output.xlsx 文件。

编辑#2:使用这个确切的代码:

Dim FPath As String, FName As String, filenamex As String
Dim NewBook As Workbook

Application.DisplayAlerts = False
Application.ScreenUpdating = False

FPath = "F:\test\"
FName = "output" & ".xlsx"
filenamex = FPath & FName
Set NewBook = Workbooks.Add
Worksheets("Sheet3").Range("A1:N100").Copy 
Destination:=NewBook.Worksheets("Sheet1").Range("A1")
Application.CutCopyMode = False
NewBook.Close savechanges:=True, Filename:=filenamex

Application.DisplayAlerts = True
Application.ScreenUpdating = True

结果 #2: (a) 创建并保存 excel 文件 output.xls(谢谢) (b) 创建原始文件中存在的三个工作表 (c) 所有三张纸仍然是空白的。我只需要从原始文件中复制的 Sheet3。

谢谢

【问题讨论】:

但它不起作用......这很模糊。什么不工作?它在做什么/不做什么你期望的?如果您为我们创建minimal reproducible example,这将有助于我们更清楚地为您提供帮助。我看到的一件事是,从.Copy 过程中删除PasteSpecial(xlPasteValues) 将使该行根据需要将数据复制到目的地 谢谢斯科特。编辑原件 编辑 #2 - 感谢保存并关闭 @BruceWayne (请不要使用解决方案编辑您的问题。相反,您可以通过单击帖子左侧的复选标记将工作代码标记为答案。编辑原始帖子有效地删除了问题,并且让未来的用户很难看到您的问题是什么,以及它是如何解决的。) 知道了 BruceWayne - 谢谢。但我们还没有解决。结果表仍然是空白的。请参阅编辑#2 【参考方案1】:

首先,您可以关闭ScreenUpdating

Sub copy_to_new()
Application.DisplayAlerts = False
Application.ScreenUpdating = False

Dim FPath As String, FName As String, filenamex As String
Dim NewBook As Workbook, oldBook as Workbook

Set oldBook = ActiveWorkbook 
'Or use `ThisWorkbook` if you're running this code from the workbook you want to copy from.

FPath = "F:\test\"
FName = "output.xls"
filenamex = FPath & FName
Set NewBook = Workbooks.Add
oldBook.Worksheets("Sheet3").Range("A1:N100").Copy Destination:=NewBook.Worksheets("Sheet1").Range("A1")
Application.CutCopyMode = False

' We can use the .Close command to close and save the file in one line
NewBook.Close savechanges:=True, Filename:=filenamex

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

【讨论】:

您需要在Worksheets("Sheet3").Range("A1:N100").Copy 这一行中限定工作簿。正如所写的那样,它将从NewBook 复制Sheet3,因为它是执行现场的活动书。 @ScottHoltzman - 啊!不知道我是怎么错过的,谢谢你抓住它。 @ScottHoltzman - 查看我对我的编辑的编辑...我不确定 OP 是否正在运行要复制的工作簿中的代码,因此默认为 ActiveWorkbook

以上是关于从打开的工作簿中的单个工作表盲创建新的 Excel 工作簿的主要内容,如果未能解决你的问题,请参考以下文章

如何在保存到 OneDrive 的 Excel 工作簿中运行 SQL 查询?

Excel VBA在生成副本的工作表中插入本工作簿中的VBA模块代码

在单个文件中的所有打开的工作簿中重新使用带有“Worksheet_Change”事件的 VBA 宏

有没有办法将 excel 工作簿中的单个工作表导出到使用 pandas 分隔 csv 文件?

在 R 中拆分大型数据框并输出到单个 Excel 工作簿中的单独工作表中

python 从Excel工作簿中的所有电子表格创建CSV