为啥在尝试读取记录集字段时未定义访问 vba 抛出子或函数?

Posted

技术标签:

【中文标题】为啥在尝试读取记录集字段时未定义访问 vba 抛出子或函数?【英文标题】:Why is access vba throwing sub or function not defined when attempting to read a recordset field?为什么在尝试读取记录集字段时未定义访问 vba 抛出子或函数? 【发布时间】:2020-07-14 18:49:42 【问题描述】:

正如标题所说,当代码尝试编译时,我收到错误“未定义子或函数”。它在 RS_Logistics 上中断![已接收]。该字段确实存在于记录集中,通过查看表 IM_Logistics 并通过检查我在对象上设置的监视并确认字段项“已接收”存在来验证该字段。这是一个布尔字段。

Option Compare Database
Option Explicit

Private ROID As Long
Private RS As Recordset
Private RS_PartDetail As Recordset
Private RS_Logistics As Recordset

Public Sub Load_ID(RepOrderID As Long)
Dim strSQL As String

strSQL = "SELECT TOP 1 * FROM IM_ReplenishmentOrders WHERE ReplenishmentOrderID = " & RepOrderID
Set RS = CurrentDb.OpenRecordset(strSQL)
If RS.RecordCount > 0 Then
ROID = RepOrderID

strSQL = "SELECT TOP 1 * FROM MT_PartDetail Where MT_PartDetail_ID = " & RS!MT_PartDetail_ID
Set RS_PartDetail = CurrentDb.OpenRecordset(strSQL)

strSQL = "SELECT * FROM IM_Logistics Where ReplenishmentOrderID = " & ROID
Set RS_Logistics = CurrentDb.OpenRecordset(strSQL)

Else
ROID = 0
End If
End Sub

Public Property Get ETA() As Date 'Derived from Logistics Records
On Error GoTo fail
RS_Logistics.MoveFirst
While Not RS_Logistics.EOF
If ((RS_Logistics![Received] = False) And Nz(ETA, DateAdd("Y", 10, today())) > RS_Logistics![Expected Date]) Then
ETA = RS_Logistics![Expected Date]
End If
RS_Logistics.MoveNext
Wend
fail:
End Property

我已经使用这个数据库中的记录集一年多了。不知道为什么现在会出现这种情况。

【问题讨论】:

【参考方案1】:

错误消息与记录集或其字段无关。 “未定义子或函数”是因为 Today() 不是 Access VBA 函数。使用日期()。

此外,Access VBA DateAdd 需要“yyyy”作为年份间隔。

【讨论】:

谢谢!如果 VBA 能够按照应有的方式指示“今天”功能,那就太好了。有时很难让所有这些语言保持直截了当。【参考方案2】:

2 条建议,让您更轻松地捕捉此类问题:

在您的所有模块上设置“显式选项”(和/ir 在首选项中以节省您手动操作)。这会告诉您 today() 是一个未定义的变量,而不是使用该名称查找子/函数 学习注意 today() 保留为 today() 并且不会被更正为 Today(),如果 Today() 是有效的子/函数,编辑器会这样做。

【讨论】:

我确实设置了选项显式设置。但这可能是任何使用 VBA 编码的人都能得到的最好建议,所以我不会因为重复它而责备你。

以上是关于为啥在尝试读取记录集字段时未定义访问 vba 抛出子或函数?的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA。检测记录集条目是不是会溢出

将小数传递给 vba 的问题

为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?

Access 子表单中的字段名称填充了 vba 记录集

角度应用程序正在获得访问权限,但从另一个系统调用时未访问 webapi,但在服务器内尝试工作。为啥?

访问 VBA - 使用组合框(多值字段)时类型不匹配