2015-10-23 291 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