2015-10-23 288 views
1

我需要在一百個Excel工作簿上獲取數據。我創建了一個宏來循環這些文件,獲取數據並關閉它們。但在我的Workbooks.open(路徑)打開文件後,它關閉它並拋出一個1004錯誤,表示方法「打開」失敗。'Workbook.open'錯誤 - 打開後立即關閉文件

我試圖打開這一百個文件中的另一個,它們中的每一個都會引發相同的錯誤。我試圖打開一個正常的文件(不是那一百),通過宏,它正常打開。

複製了一堆到我的C:\,他們都拋出一個錯誤。

記錄一個宏以打開該文件。該文件打開是因爲我單擊了File-> Open File,但是如果我運行宏打開它,則會引發錯誤。

顯然問題在於這些文件。

- > CODE: 只是一個普通的Workbook.open代碼(!有沒有完整的代碼,它只是它,我得到一個錯誤與鏈接文件)

Workbook.Open("C:\file.xlsx") 

- >他們通常手動打開,沒有任何錯誤或問題。

- >它們有:
* Querytables
*普通公式
*他們是有點小

- >意見和我的嘗試:

  • 的路徑是正確的(它打開文件並在關閉之後立即關閉,並且出錯)。

  • 我試圖打開的文件有連接查詢,但我刪除了我的測試文件上的連接。同樣的錯誤。

  • 嘗試了CurruptLoad參數,同樣的錯誤(我不知道我是否正確使用它)。

  • 嘗試UpdateLinks:= 0,同樣的錯誤。

  • 試圖通過新的Excel.Application打開它,沒有任何改變。

  • 嘗試在另一臺PC上,同樣的事情。

任何人都有類似的東西?

我該怎麼辦?

+0

不知道這是否會有所幫助,但有關開什麼作爲'ReadOnly'? –

+0

我認爲這是上面代碼中的拼寫錯誤,它實際上是'Workbooks.Open'?如果您在開啓前關閉計算功能會有幫助嗎?你能發佈其中一個文件嗎? – Rory

+0

斯科特 - 我試圖只讀,沒有任何改變。謝謝 – MVAmorim

回答

0

解決方案,我發現這種情況下(我在這裏工作)

Application.DisplayAlerts = False 
set wb = Workbooks.Open(objFile.path, ReadOnly:=True, CorruptLoad:=xlExtractData) 
wb.close 
Application.DisplayAlerts = True 

通過CorruptLoad:= xlExtractData,明確每一個表,每一個連接,和其他任何可能的問題。我得到我的數據並關閉文件而不保存它。

感謝支持人員。

0

開放後你在做什麼?

如果您正在嘗試做其他事情,那麼文件可能沒有完全打開,並且錯誤是基於未發生的下一行。

+0

沒有,就像我說的,在得到第一個錯誤之後,我只是用Workbook.open運行一個宏,之後沒有任何東西。 – MVAmorim

0

如果我理解你的問題,你可以使用我使用一個代碼,當我需要檢索的數據加上文件(都具有相同的格式)

Sub ImportData() 
Dim wb As Workbook 
Dim myPath As String 
Dim myFile As String 
Dim myExtension As String 
Dim FldrPicker As FileDialog 
Dim LastRow As Long 
'Optimize Macro Speed 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    Application.Calculation = xlCalculationManual 

WsTo = ActiveWorkbook.Name 

'Retrieve Target Folder Path From User 
    Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker) 
    With FldrPicker 
     .Title = "Select A Target Folder" 
     .AllowMultiSelect = False 
     If .Show <> -1 Then GoTo NextCode 
     myPath = .SelectedItems(1) & "\" 
    End With 

'In Case of Cancel 
NextCode: 
    myPath = myPath 
    If myPath = "" Then Exit Sub 

'Target File Extension (must include wildcard "*") 
    myExtension = "*.xlsx" 

'Target Path with Ending Extention 
    myFile = Dir(myPath & myExtension) 

'Loop through each Excel file in folder 
    Do While myFile <> "" 
    'Set variable equal to opened workbook 
     Set wb = Workbooks.Open(Filename:=myPath & myFile) 

    'Change First Worksheet's Background Fill Blue 
    Sheets(1).Select 
    Range("A1").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Selection.Copy 
    WsFrom = ActiveWorkbook.Name 
    Windows(WsTo).Activate 
    Sheets(1).Select 
    With ActiveSheet 
     LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    End With 
    Range("A" & LastRow + 1).Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, transpose:=False 
    Application.CutCopyMode = False 

    'Save and Close Workbook 
    Workbooks(WsFrom).Close SaveChanges:=False 
    'Get next file name 
     myFile = Dir 
    Loop 

'Message Box when tasks are completed 
    MsgBox "Importazione completata!" 

'Reset Macro Optimization Settings 
    Application.ScreenUpdating = True 
    Application.EnableEvents = True 
    Application.Calculation = xlCalculationAutomatic 

End Sub