【发布时间】:2020-04-23 06:32:11
【问题描述】:
我在 MS Excel 的工作表中有一个表格,我正在尝试从 table1 中写出一个查询并将结果粘贴到另一个工作表中。 (表中还有其他详细信息可以使 2 行具有相同的供应商和产品)。
Table1:
Product Supplier
apple A
apple A
apple B
apple C
banana A
我想做这样的查询“SELECT Supplier FROM Table1 WHERE Product = 'apple' GROUP BY Supplier”。起初我只是尝试用表名和列名编写查询,但这没有用。所以我尝试使用范围而不是表名和列名。
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
我收到错误“对象变量或未设置块变量”。我主要担心的是我觉得这是一种非常间接的方法,我想知道是否有更简单的方法来完成这项任务?
【问题讨论】:
-
你在你的范围对象前面缺少
Set:Set tblRng = ...,Set clmRng1 = ...,Set clmRng2 = ......但是然后strSQL = "SELECT " & clmRng1 & " FROM " & tblRng & " WHERE " & clmRng2 & " = 'apple' GROUP BY " & clmRng1将会有很大的问题。跨度> -
是的,这就是我写这篇文章时的想法。有没有机会想到任何替代方法?