如何从 VBA Access 中的查询中获取记录?
Posted
技术标签:
【中文标题】如何从 VBA Access 中的查询中获取记录?【英文标题】:How to get the record from a query in VBA Acces? 【发布时间】:2021-01-16 18:17:30 【问题描述】:考虑到这个excel
我在 Microsoft Access 中创建了一个 VBA 函数来读取此文件并将其保存/导入到我的表上,即:部门、员工和职位。这就是我制作函数的方式:
Private Sub Command41_Click()
Dim fileName As String
Dim fso As New FileSystemObject
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWs As Excel.Worksheet
Dim intLine As Long
Dim rs As DAO.Recordset
Dim sql As String, deptId As Long, empId As Long, jobId As Long
fileName = "C:\Users\Admin\Documents\Reports.xlsx"
If fso.FileExists(fileName) Then
Set xlApp = New Excel.Application
xlApp.Visible = True
Set xlWb = xlApp.Workbooks.Open(fileName)
Set xlWs = xlWb.Worksheets(1)
intLine = xlWs.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To intLine
sql = "SELECT ID FROM Departments WHERE DeptName = " & xlWs.Cells(i, 1)
Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
MsgBox rs
Next
End If
End Sub
我的问题是这一行Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
正在返回此错误:错误 3061 参数太少。预计 4。我不知道我还缺少哪些其他参数,因为在网上我只找到了两个。
非常感谢任何帮助
【问题讨论】:
【参考方案1】:DeptName 是一个文本类型字段。文本字段的串联参数需要撇号分隔符。
sql = "SELECT ID FROM Departments WHERE DeptName = '" & xlWs.Cells(i, 1) & "'"
不使用 VBA 打开 Excel 对象,另一种方法是设置指向 Excel 工作表的链接并将链接视为表格(除了无法编辑其数据)。在连接表的查询中使用链接或使用 DLookup() 聚合函数。
MsgBox rs
也会失败,因为 rs 是一个记录集对象,而 MsgBox 需要一个字符串。可以读取记录集的一个字段:MsgBox rs!ID
。如果检索到多个 ID 值,则必须遍历记录集以构建具有串联的字符串。使用 Excel 链接替代,可以只打开一个过滤的查询对象。
【讨论】:
以上是关于如何从 VBA Access 中的查询中获取记录?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Access VBA,如何计算选择查询中的输出记录数并将计数存储为 VBA 变量?
VBA Access SQL SELECT查询只返回一条记录
如何在 Access VBA 中运行附加查询以根据表单字段中的数量创建一定数量的相同记录?