我正在将表单从一个Access数据库移动到另一个Access数据库.当我尝试编译新数据库时,它会给出"未定义变量"错误.仅在使用Option Explicit时才会发生这种情况.该变量是一种AccessField数据类型,由表单的SQL查询选择.这在我正在移动它的Access数据库上编译得很好,所以我完全迷失了,试图弄清楚什么是错的?
我似乎有一个完全相同的问题,从来没有在这个旧线程中解决:https://bytes.com/topic/access/answers/896346-variable-not-defined-error-field-exists
这不仅仅是一个例子.引用未声明为变量的AccessField的任何内容都将在使用Option Explicit时返回该错误.
例如,表单使用查询:
Select * from BM where ClientID =143 and Month(BMDate) = 4 and year(bmdate) =2018 order by bmdate
Run Code Online (Sandbox Code Playgroud)
并且该表单中的VBA代码将因此错误而失败:
Option Explicit
Option Compare Database
Private Sub Form_Load()
If IsNull(RecNbr) Then
'Code fails with RecNbr on line above when I try to compile
'RecNbr is a field selected from the query and is not declared as a variable
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
这可能有效,也可能无效,但评论太长了。
您链接线程中的这篇文章似乎有一个解释:
在表单设计视图中,控件的“字段列表”和“控件源”下拉列表反映了当前的表设计;但 VBA 似乎有表单记录源模式的陈旧副本。
尝试重新同步记录源的 VBA 缓存(?):
作为注释,我发现使用Me.RecNbr而不是RecNbr引用表单控件或字段(而不是 VBA 变量)时代码可读性更好。
如果以上仍然无法编译,您可以使用Me!RecNbr.
有用的阅读:VBA 和 MS-Access 中的 Bang Notation 和 Dot Notation