Excel VBA从Excel表中写入数据的SQL查询
我在MS Excel的工作表中有一个表,我正试图从表1中写出一个查询,并将结果粘贴到另一个工作表中。(表中还有其他详细信息,使同一供应商和产品可以有2行) 我想做一个这样的查询“从表1中选择供应商,其中产品=‘苹果’按供应商分组”。起初,我只是尝试用表名和列名编写查询,但没有成功。所以我尝试使用范围,而不是表名和列名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
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