2017-04-17 110 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

相關問題