下面是我想通过 VBA 中的 SQL 查询操作的 Excel 表。
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
Run Code Online (Sandbox Code Playgroud)
我的上述代码出现以下错误。
请指导我如何在VBA中的SQL查询中操作Excel表。
小智 5
使用表别名查询 ListObject 的范围是可行的。
从 [Sheet1$A1:D15] AS [Table1] 中选择 [Sr],其中 [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
Run Code Online (Sandbox Code Playgroud)
从 ListObject.Range 构建有效 SQL 查询表名称的替代方法
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
Run Code Online (Sandbox Code Playgroud)
`Untitled (4).xlsx`.[Sheet1$A1:D15] AS [Table1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8347 次 |
| 最近记录: |