使用 VBA 执行 SQL 查询并用数据填充工作表

使用 VBA 执行 SQL 查询并用数据填充工作表

对任何形式的代码都很陌生。尝试在 VBA 中运行一个脚本,该脚本将使用 SQL 从 Access 数据库中提取数据并将其放入 Excel 电子表格中。代码类似于以下代码。运行干净,但我不知道如何使用它提取的数据。提前致谢。

Sub Get_Data()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL, strInput As String

strFile = "S:\Location.Database.accdb"

strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile

Set cn = CreateObject("ADODB.Connection")
cn.Open strCon

strInput = InputBox("Input Desired Name")

strSQL = "SELECT NAME, Location WHERE NAME =""'strInput'"";"

cn.Execute strSQL

cn.Close
Set cn = Nothing

End Sub

答案1

您需要填充记录集对象(即您声明的 rs 变量)。我已更改下面的代码以执行此操作。然后,您可以将记录集中的结果直接复制到RANGE.copyfromrecordset <yourrecordset>下面的范围内,我也添加了该范围,我将结果转储到 SHeet1.Range("A1") 中。您可能想要更改它。编辑以添加:刚刚意识到您正在使用 ADODB 的后期绑定。我已经调整了代码,以便它实际上可以工作。

Sub Get_Data()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL, strInput As String

strFile = "S:\Location.Database.accdb"

strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile

Set cn = CreateObject("ADODB.Connection")
cn.Open strCon

strInput = InputBox("Input Desired Name")

strSQL = "SELECT NAME, Location WHERE NAME =""'strInput'"";"

'Added the following four lines
Set rs = CreateObject("ADODB.RECORDSET")    
rs.activeconnection = cn    
rs.open strSQL    
Sheet1.Range("A1").CopyFromRecordSet rs

'removed
'cn.Execute strSQL


rs.close
cn.Close
Set cn = Nothing

End Sub

您可以将 RecordSet(在本例中为 rs)视为保存 SQL 结果的虚拟表。您可以逐条记录(使用 rs.MoveFirst、MoveNext、MoveLast)和逐个字段(通过遍历 rs.fields 集合)与 RecordSet 进行交互,或者您可以直接将结果转储到某个范围内。

相关内容