在 VBA Excel 中的 SQL 查询中使用 Table 名称

Use Table name in SQL query in VBA Excel

下面是 excel table 我想通过 VBA 中的 SQL 查询进行操作。

请找到我的 VBA 代码。

Sub SQL()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT [Sr] FROM [Table1$] WHERE [Sr] >= 3 AND [Sr] <= 8;"

rs.Open strSQL, cn

Sheet5.Range("D1").CopyFromRecordset rs

End Sub

我的上述代码出现以下错误。

请指导我如何在 SQL 查询中操作 excel table VBA。

使用 table 别名查询 ListObject 的范围将有效。

SQL

SELECT [Sr] FROM [Sheet1$A1:D15] AS [Table1] WHERE [Sr] >= 3 AND [Sr] <= 8;

代码

Sub SQL()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    strFile = ThisWorkbook.FullName
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
             & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open strCon

    strSQL = "SELECT [Sr] FROM " & getListObjectSQLAdress(Sheet1.ListObjects(1)) & " WHERE [Sr] >= 3 AND [Sr] <= 8;"

    rs.Open strSQL, cn

    Sheet5.Range("D1").CopyFromRecordset rs

End Sub

Function getListObjectSQLAdress(tbl As ListObject) As String
    getListObjectSQLAdress = "[" & tbl.Parent.Name & "$" & tbl.Range.Address(False, False) & "] AS [" & tbl.Name & "]"
End Function

从 ListObject.Range

构建有效 SQL 查询 Table 名称的替代方法
Function getListObjectSQLAdress2(tbl As ListObject) As String
    Dim s As String
    s = tbl.Range.Address(False, False, xlA1, xlExternal)
    s = Replace(s, "'[", "`")
    s = Replace(s, "]", "`.[")
    s = Replace(s, "'!", "$")
    getListObjectSQLAdress2 = s & "] AS [" & tbl.Name & "]"
End Function

Table 名称输出

`Untitled (4).xlsx`.[Sheet1$A1:D15] AS [Table1]