VBA错误1004 – QueryTable.Add

我试图导入一个csv文件时在VBA(1004)中遇到一个非常奇怪的错误。

这是我的代码:

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 与我的工作簿相同的目录中的文件。 我在目录中有一堆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 

更新3/10/16:我得到它在Excel 2011中的Mac(通过更改Application.PathSeparatorpath中的“/”),但它仍然在Excel 2016 for Mac中执行相同的事情。 可能只是新的Excel中的一个错误。

我遇到了类似的问题,经过彻底的testing,我确信这是Mac版Excel 2016中的一大亮点,并且在2017年7月28日还没有被修复。

您可以使用的解决方法是:

  • 手动导入每个文本文件。
  • 然后删除连接(和数据)。
  • 一旦你在一个位置导入了一个文件,你可以再次使用VBA。

不幸的是,这不是真正的dynamic,并不会像我的文件夹实际上改变的情况下工作。

希望能帮助到你。

好的,我find了一个更好的解决scheme:

实际的(完全隐藏的)问题是,沙箱安全模式不允许访问该文件,并且不会像提示那样提示您。 阅读更多关于这个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