我在Access中有一个奇怪的情况。通常,Null错误的无效使用是一件非常简单的事情 - 将null赋给字符串变量或其他类似的变量。但是我在一个似乎不应该发生的地方得到错误。以下是代码段:
bch = Form_Akces.txtMaxCisla.BackColor
If Err <> 0 Then Stop
Form_Akces.txtMaxCisla.BackColor = vbYellow
If Err <> 0 Then Stop
DoEvents
If Err <> 0 Then Stop ' This is where I get the error
With qdf_GPsp
发生的事情是我有时只收到此错误,通常只在我第一次运行代码时才会出现。如果我关闭数据库并立即重新打开它,通常我不会收到错误。这让我疯了很长一段时间,所以我把所有这些“If Err&lt;&gt; 0 Then Stop”声明,试图追踪它发生的地方。这是一个实时系统,用户只需重新启动应用程序,但这是一个庞大的PIA,并且有点令人尴尬的启动。
有人可以考虑尝试或检查一些事情吗?我在Access中并不是一个业余爱好者,但这远远超出了我遇到过的任何东西。为什么DoEvents语句应该生成这样的错误超出了我的范围,特别是因为即使在应该生成这样的错误的前置语句中我也没有做任何事情,它可能以某种方式'保持'直到处理器有机会抛出错误。如果我取出DoEvents,我只会在某种程度上得到同样的错误。 txtMaxCisla是Form_Akces表单上的未绑定文本字段,从中调用包含此代码的例程。它只在启动时 - 一旦所有东西都加载并运行,这种情况再也不会发生了。它只是偶尔发生一次 - 没有我能够检测到的模式。
它已经持续了几个月,通过大量的编译,反编译,重新编译,压缩和修复周期,没有明显的变化,除非有时它发生在其他地方,再次没有理由我能看到。< / p>
没有运气 - 它仍然会崩溃,并且绝对没有理由我能看到。这是现在的代码:
Public Sub ReloadMaxNumbers(tmc As TextBox)
Dim rst As DAO.Recordset, x$, xb$, xe$, bch&
On Error GoTo 0
If Err <> 0 Then Stop
DoEvents
If Err <> 0 Then Stop
...
代码在DoEvents之后的SECOND测试中停止,并出现相同的错误“无效使用Null”。我意识到这段代码是完全迟钝的,但它是追溯的结果,试图找到错误的根源。如果没有这个,它会在某个地方进一步崩溃,同样的错误。在这一点上,我甚至想不出任何其他事情。
答案 0 :(得分:1)
我对你的代码中的Form_Akces
感到困惑。如果我创建名为Akces
的表单,则表单的代码模块名为Form_Akces
。但是你在表格Form_Akces 上说“”。所以我很困惑Form_Akces
是表单的名称还是表单的代码模块。也许Access也很困惑。
无论哪种方式,既然你说代码在表单的代码模块中,我建议你用Me
代替Form_Akces
编辑:我误解了你的情况。您向我们展示的代码实际上来自另一个代码模块中的过程,而不是表单的代码模块。在这种情况下,我会为外部程序DoSomething
执行类似的操作:
Public Sub DoSomething(ByRef frm As Form)
bch = frm.txtMaxCisla.BackColor
frm.txtMaxCisla.BackColor = vbYellow
DoEvents
' whatever else you need
End Sub
然后在表单的代码模块中,您调用DoSomething:
DoSomething Me
如果DoSomething
每次仅对单个控件进行操作,则可以将引用传递给该控件。
Public Sub DoSomething(ByRef ctl As Control)
此方法允许DoSomething
重新用于其他表单,而不需要进行任何更改,因为目标表单名称不是“硬连线”到过程中。此外,如果您重命名Akces
表单,它也不会中断。在第二个变体中,它还可以适应控件名称的更改。