对任何形式的代码都很陌生。尝试在 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 进行交互,或者您可以直接将结果转储到某个范围内。