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

Toa*_*d62 2 vba sql microsoft-excel

对任何形式的代码都很陌生。尝试在 VBA 中运行一个脚本,该脚本将使用 SQL 从访问数据库中提取数据并将其放入 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
Run Code Online (Sandbox Code Playgroud)

JNe*_*ill 8

您需要填充您的记录集对象(这是您声明的 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
Run Code Online (Sandbox Code Playgroud)

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