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)
您需要填充您的记录集对象(这是您声明的 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 交互,或者您可以只转储一个范围内的结果。