2017-04-17 86 views
0

是否可以在不打开工作表的情况下复制工作表并将其粘贴到已打开的工作簿而没有默认文件位置?我试图复制的工作表总共包含30个工作表。我曾尝试使用文件对话框打开,但有时它会挂起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 
+1

原则是什么,它是不可能的,而无需打开它从一个数字文件访问任何东西。但是,可以打开它,以便用户永远不会意识到打开,复制和关闭了某些内容。如果您知道您希望访问的文件的确切位置,您可以在不受用户干扰的情况下打开代码。否则,如果您不知道位置或名称,则FileOpen对话框即将推出。你为什么不发布你的代码,并让我们看看为什么你的Excel的crsashes? – Variatus

+0

嗨我编辑和添加代码如上 –

+0

所以,你说Excel只是挂起。没有错误信息?没有调试亮点?也许这只是Windows对于Excel来说太快了,在复制完成之前关闭文件。在这种情况下,在关闭源文件之前尝试做一些事情,可能是'ThisWorkbook.Activate'。尝试命名源工作簿和目标工作簿。同时命名源和目标工作表 - 所有这些都不是绝对必要的,但适合让VBA知道谁是老板。 – Variatus

回答

0
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 

这应该适合你想要达到

+0

我在我的代码 –

+0

中编辑了相应的代码以符合您的需求。这只是一个骨架 – Hank

相关问题