【问题标题】:Excel VBA listobjects.add querytable error 9Excel VBA listobjects.add 查询表错误9
【发布时间】: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


【解决方案1】:

问题来自“Option base 1”和记录器使用的数组。保留选项并修改代码以避免数组起作用,以及删除“Option Base 1”。

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2016-07-19
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多