Excel VBA从Excel表中写入数据的SQL查询

Excel VBA从Excel表中写入数据的SQL查询,excel,vba,Excel,Vba,我在MS Excel的工作表中有一个表,我正试图从表1中写出一个查询,并将结果粘贴到另一个工作表中。(表中还有其他详细信息,使同一供应商和产品可以有2行) 我想做一个这样的查询“从表1中选择供应商,其中产品=‘苹果’按供应商分组”。起初,我只是尝试用表名和列名编写查询,但没有成功。所以我尝试使用范围,而不是表名和列名 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim tblRng As Range Dim clmRng1 As Ra

我在MS Excel的工作表中有一个表,我正试图从表1中写出一个查询,并将结果粘贴到另一个工作表中。(表中还有其他详细信息,使同一供应商和产品可以有2行)

我想做一个这样的查询“从表1中选择供应商,其中产品=‘苹果’按供应商分组”。起初,我只是尝试用表名和列名编写查询,但没有成功。所以我尝试使用范围,而不是表名和列名

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim tblRng As Range
Dim clmRng1 As Range
Dim clmRng2 As Range

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

tblRng = Sheets("sheet1").ListObjects("table1").DataBodyRange
clmRng1 = Sheets("sheet1").ListObjects("table1").ListColumns("Supplier").DataBodyRange
clmRng2 = Sheets("sheet1").ListObjects("table1").ListColumns("Product").DataBodyRange

strSQL = "SELECT " & clmRng1 & " FROM " & tblRng & " WHERE " & clmRng2 & " = 'apple' GROUP BY " & clmRng1
rs.Open strSQL, cn

Debug.Print rs.GetString
我收到一个错误“对象变量或块变量未设置”。我主要担心的是,我觉得这是一种非常间接的方法,我想知道是否有更简单的方法来完成这项任务?

试试

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim objList As ListObject
'    Dim tblRng As Range
'    Dim clmRng1 As Range
'    Dim clmRng2 As Range
    Dim s As String

    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

'    tblRng = Sheets("sheet1").ListObjects("table1").DataBodyRange
'    clmRng1 = Sheets("sheet1").ListObjects("table1").ListColumns("Supplier").DataBodyRange
'    clmRng2 = Sheets("sheet1").ListObjects("table1").ListColumns("Product").DataBodyRange
    Set objList = Sheets(1).ListObjects("table1")
    s = objList.Range.Address(0, 0)

    'strSQL = "SELECT " & clmRng1 & " FROM " & tblRng & " WHERE " & clmRng2 & " = 'apple' GROUP BY " & clmRng1
    strSQL = "SELECT supplier FROM [Sheet1$" & s & "]  WHERE  Product = 'apple' GROUP BY supplier "

    rs.Open strSQL, cn

您的范围对象前面缺少
Set
Set-tblRng=…
Set-clmRng1=…
Set-clmRng2=…
。。。但是,strSQL=“SELECT”&clmRng1&“FROM”&tblRng&“WHERE”&clmRng2&“=“apple”groupby”&clmRng1将是一个很大的问题。是的,这就是我写这篇文章时的想法。有没有可能想到其他的方法?
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim objList As ListObject
'    Dim tblRng As Range
'    Dim clmRng1 As Range
'    Dim clmRng2 As Range
    Dim s As String

    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

'    tblRng = Sheets("sheet1").ListObjects("table1").DataBodyRange
'    clmRng1 = Sheets("sheet1").ListObjects("table1").ListColumns("Supplier").DataBodyRange
'    clmRng2 = Sheets("sheet1").ListObjects("table1").ListColumns("Product").DataBodyRange
    Set objList = Sheets(1).ListObjects("table1")
    s = objList.Range.Address(0, 0)

    'strSQL = "SELECT " & clmRng1 & " FROM " & tblRng & " WHERE " & clmRng2 & " = 'apple' GROUP BY " & clmRng1
    strSQL = "SELECT supplier FROM [Sheet1$" & s & "]  WHERE  Product = 'apple' GROUP BY supplier "

    rs.Open strSQL, cn