【发布时间】:2018-02-15 03:14:17
【问题描述】:
我的目标是使用 SQL 请求从 csv 文件中获取数据。我已经在之前的 Workbook 中成功了,所以我只在 SQL 请求部分复制并修改了它。我第一行有执行错误9,复制代码后没有修改:
ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"ODBC;DBQ=" & Path & ";DefaultDir=" & Path & _
";Driver={Microsoft Access Text Driver (*.txt, *.csv)};DriverId=27;FIL=text", _
";MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;" _
), Destination:=ThisWorkbook.Sheets("Sessions").Range("$A$1")).QueryTable
变量 Path 是指向存储文件的文件夹的路径。在运行此行之前创建工作表“会话”,并激活。
这是请求的完整代码:
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"ODBC;DBQ=" & Path & ";DefaultDir=" & Path & _
";Driver={Microsoft Access Text Driver (*.txt, *.csv)};DriverId=27;FIL=text", _
";MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;" _
), Destination:=ThisWorkbook.Sheets("Sessions").Range("$A$1")).QueryTable
.CommandText = Array( _
Selection & Chr(13) & Chr(10) & "FROM `" & NameFile(1) & "` `" & NameFile(2) & "`" & _
Chr(13) & Chr(10) & Condition)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Session"
.Refresh BackgroundQuery:=False
End With
我对 VBA 中的连接非常陌生,因为它只是我使用它的第二个程序。这可能很容易纠正,但我没有找到适合我的情况的有效解决方案。
【问题讨论】:
-
如果你使用有帮助吗:
Destination:=Activesheet.Range("$A$1") -
谢谢你的答案。我尝试了以下目的地: range("$A$1"), activesheet.range("$A$1"), ThisWorkbook.Sheets("Sessions").Range("$A$1") 我确定指定的路径是正确的(链接到我电脑上包含该文件的文件夹)。
-
尝试从 Source 参数中删除 Array() 命令 - 不需要。
-
我会检查,它可能确实与此有关。在逐步重建我的程序后,我发现问题来自我放在模块顶部的“Option base 1”。所以可能无法正确读取数组。
标签: vba excel excelquery