2016-03-04 279 views
1

當我嘗試導入csv文件時,VBA(1004)中出現了一個非常奇怪的錯誤。VBA錯誤1004 - QueryTable.Add

這裏是我的代碼:

With ActiveSheet.QueryTables.Add(Connection:= _ 
    "TEXT;" & ThisWorkbook.Path & "/" & "IJR" & ".csv", Destination _ 
    :=Range("$A$1")) 
    .Name = "IJR" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = xlMacintosh 
    .TextFileStartRow = 2 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(3, 9, 9, 9, 9, 9, 1) 
    .Refresh BackgroundQuery:=False 
    .UseListObject = False 
End With 

它給我的錯誤上.Refresh BackgroundQuery:=False

IJR.csv IS與我的工作簿位於同一目錄中的文件。我在目錄中有一堆csv文件。奇怪的是,當我將「IJR」更改爲「AA」或「HES」(也是目錄中的csv文件)時,代碼就起作用了。大多數csv文件名不起作用(「USO.csv」,「AAL.csv」,「AAPL.csv」,「HD.csv」等),但是其中一些做到了(到目前爲止僅僅是「AA。 csv「和」HES.csv「)。它們具有相同數量的列的所有相同格式的csv文件。我完全不知所措。也許我犯了一些笨蛋錯誤,但我無法發現它。

另一點有用的信息:我正在運行Excel 2016 for Mac。如果操作系統是Windows,我有一段非常類似的代碼(由於Mac和Windows的VBA代碼的細微差異)。它適用於每個csv文件,沒有問題。該代碼,以供參考,是:

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & ThisWorkbook.Path & "\" & symb & ".csv", Destination _ 
    :=Range("$A$1")) 
    .Name = symb 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .TextFilePromptOnRefresh = False 
    .TextFilePlatform = 437 
    .TextFileStartRow = 2 
    .TextFileParseType = xlDelimited 
    .TextFileTextQualifier = xlTextQualifierDoubleQuote 
    .TextFileConsecutiveDelimiter = False 
    .TextFileTabDelimiter = False 
    .TextFileSemicolonDelimiter = False 
    .TextFileCommaDelimiter = True 
    .TextFileSpaceDelimiter = False 
    .TextFileColumnDataTypes = Array(3, 9, 9, 9, 9, 9, 1) 
    .TextFileTrailingMinusNumbers = True 
    .Refresh BackgroundQuery:=False 
End With 

更新16年3月10日: 我得到了它在Excel 2011工作的Mac(通過改變「/」的路徑Application.PathSeparator),但它仍然在Excel 2016 for Mac中執行相同的操作。可能只是新Excel中的一個錯誤。

+0

如果相同的代碼工作了一段CSV文件,而不是爲別人,我想這個問題是CSV文件之間存在差異。當你在Excel中打開這些文件時會發生什麼(而不是添加'QueryTable')?他們打開嗎?看起來對嗎? –

+0

他們都打開,看起來正確。再次,Excel 13 for Windows一切正常。只有當我在Mac 16的​​Excel 16中試用它時,我纔有這個問題。 – chiiidog

回答

1

我有一個類似的問題,徹底的測試後,我確信這是Excel 2016年的Mac大,並沒有被2017年七月

你也許能夠使用的解決方法固定在28是:

  • 手動導入每個文本文件。
  • 然後刪除連接(和數據)。
  • 一旦你在一個位置導入了一個文件,你可以再次使用VBA。

不幸的是,這不是真正的動態,並且不會在像我的文件夾實際更改的情況下工作。

希望它有幫助。

0

OK,我已經找到了更好的解決方案:

實際(完全隱藏)問題是,沙箱安全模式不允許訪問該文件,而不會提示您,因爲它應該。詳細瞭解http://www.rondebruin.nl/mac/mac034.htm

我的解決方法是打開使用「打開」文件,它提示的權限。我們對打開的文件不做任何事情。授予權限後,您的代碼將可以正常工作。

Dim MyData As String, strData() As String 

Open "/Users/myuser/Documents/myfile.csv" For Binary As #1 
MyData = Space$(LOF(1)) 
Get #1, , MyData 
Close #1