[英]With VBA, how to import a xlsx file into a xlsm without opening the xlsx file?
這是我當前代碼的一部分:
顯式期權
Sub ImportData()
Dim wkbCrntWorkBook As Workbook
Dim wkbSourceBook As Workbook
Dim fNameAndPath As Variant
Set wkbCrntWorkBook = ActiveWorkbook
fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel 2007, *.xlsx; *.xlsm; *.xlsa", Title:="Select File To Import")
If fNameAndPath = False Then Exit Sub
Call ReadDataFromCloseFile(fNameAndPath)
Set wkbCrntWorkBook = Nothing
Set wkbSourceBook = Nothing
End Sub
Sub ReadDataFromCloseFile(filePath As Variant)
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Dim src As Workbook
Set src = Workbooks.Open(filePath, True, True)
' COPY DATA FROM SOURCE (CLOSE WORKGROUP) TO THE DESTINATION WORKBOOK.
' GET THE TOTAL ROWS FROM THE SOURCE WORKBOOK.
Dim lastLine As Long ' last line from source
lastLine = src.Worksheets(source_sheet_1_name).Range("A" & Rows.count).End(xlUp).Row
Worksheets("abc").Range("A3:A40")).Value= src.Worksheets("cde").Range("A4:A41").Value
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE.
Set src = Nothing
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
根據此 ,數據源工作簿將無法打開。 但是,在文件瀏覽器中單擊文件名以選擇要導入的文件后,excel便打開了該文件。
有誰知道我應該如何實現目標(無論上一段中的鏈接如何)?
(我的目標是在用戶指示要導入的文件(不打開要導入的文件)之后,根據某些標准自動將xlsx文件中的某些列復制/導入到xlsm文件中。但是,在選擇文件后雙擊導入,僅打開要導入的文件。打開要導入的文件后,程序不繼續導入相應的列。)
您可以在這里做幾件事。 需要以一種或另一種方式打開文件。 但是,使其盡可能地鎖定/隱藏將是關鍵。
您可以嘗試一些不同的方法:
1)在打開工作簿之前,設置Application.ScreenUpdating = False
,然后在關閉子項之前最后確保將其設置回True
。
2)使用src = workbooks.open...
打開工作src = workbooks.open...
嘗試設置Application.Visible = False
。 完成導入過程並關閉源工作簿后,請確保將其設置為true: Application.Visible = True
。
這應該允許您打開工作簿,保持更新狀態,以便沒人能看到發生了什么,並以最小的阻力/可見性關閉工作簿。
可能導致錯誤或完全無法正常工作的原因可能來自您嘗試調用的工作簿工作表名稱。 我看不到變量的賦值,因此lastLine = src.Worksheets(source_sheet_1_name)
實際上應該在其中說出工作表名稱,例如lastLine = src.Worksheets("Sheet1")
試一下,讓我知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.