将工作表从一个工作簿(未打开)复制到打开的工作簿
Posted
技术标签:
【中文标题】将工作表从一个工作簿(未打开)复制到打开的工作簿【英文标题】:Copy worksheet from one workbook (not opened) to opened workbook 【发布时间】:2017-04-17 07:48:09 【问题描述】:是否可以在不打开工作簿的情况下复制工作表并将其粘贴到打开的工作簿而没有默认文件位置?我试图从中复制的工作表总共包含 30 个工作表。我曾尝试使用文件对话框打开,但有时它会挂起 excel。有什么方法可以不挂excel并做我想做的事吗?先感谢您。
Dim FileToOpen As String
Application.ScreenUpdating = False
FileToOpen = Application.GetOpenFilename _
(Title:="Please choose a Excel File to Open", _
FileFilter:="Excel Files *.(*.xlsx),xlsx")
If VarType(FileToOpen) = vbBoolean Then
MsgBox "No file selected", vbExclamation, "Sorry!"
Exit Sub
End If
Debug.Assert VarType(FileToOpen) = vbString
With Application.Workbooks.Open(FileToOpen)
.Worksheets(22).UsedRange.Copy ThisWorkbook.Worksheets(2).range("A1")
.Close
End With
【问题讨论】:
原则上,不打开数字文件就无法访问任何内容。但是,有可能以这样一种方式打开它,即用户永远不会意识到某些东西被打开、复制和关闭。如果您知道要访问的文件的确切位置,您可以让代码打开它而无需用户干预。否则,如果您不知道位置或名称,则可以使用 FileOpen 对话框。您为什么不发布您的代码,让我们看看您的 Excel 崩溃的原因? 嗨,我编辑并添加了上面的代码 所以,您说 Excel 只是挂起。没有错误信息?没有调试亮点?也许这只是 Windows 对 Excel 来说太快的问题,在复制完成之前关闭文件。在这种情况下,请在关闭源文件之前尝试做一些事情,也许是ThisWorkbook.Activate
。尝试同时命名源工作簿和目标工作簿。命名源工作表和目标工作表 - 所有这些都不是绝对必要的,但适合让 VBA 知道谁是老板。
我认为它挂起是因为该工作簿中有 30 个工作表。没有错误消息或调试突出显示。我可以试试。
不知道。工作簿的大小可能会有所不同。我在考虑更多复制数据的大小。没关系,或者两者兼而有之。请尝试我提出的建议。
【参考方案1】:
Private Sub test()
Dim app As New Excel.Application
Dim fileName As String, copyFrom As Workbook
app.Visible = False
fileName = app.GetOpenFilename()
Set copyFrom = app.Workbooks.Open(fileName)
MsgBox copyFrom.Sheets(1).Cells(1, 1)
End Sub
这应该符合您想要实现的目标
【讨论】:
相应地编辑代码以满足您的需求。这只是一个骨架以上是关于将工作表从一个工作簿(未打开)复制到打开的工作簿的主要内容,如果未能解决你的问题,请参考以下文章
使用 Powershell 将 Excel 工作表从一个工作簿复制到另一个工作簿
打开用户指定的 Excel 工作簿并将数据范围复制到另一个工作簿