为啥在尝试读取记录集字段时未定义访问 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 抛出子或函数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?