【问题标题】:MS Access VBA editor activity affects running program variablesMS Access VBA 编辑器活动影响正在运行的程序变量
【发布时间】:2018-09-02 16:18:09
【问题描述】:

在 Windows 10 上运行的 MS Access 2016。

我正在调试 MS Access 应用程序的 VBA 更改,并看到 VBA 编辑器和运行代码之间出现一些意外交互。步骤基本上是:

  1. 打开应用程序,这会打开启动表单。
  2. 启动 form_load 实例化一个对象,该对象由用户随后可能打开的其他表单使用。
  3. 打开 VBA 编辑器
  4. 使用 VBA 编辑器,在任何代码模块中选择一行,实例化的对象将设置为空。
  5. 使用该对象的其他表单打开时会引发错误。

所以基本上,VBA 编辑器操作已将对象设置为空。我已经添加了检测代码来确认这一点。

有人看到这种行为吗?有没有人对可能发生的情况和造成这种情况有什么想法?

提前谢谢...

附加信息: 在 Form_Load 方法中实例化对象的代码是:

Set musrInfo = New usrInfo

其中 usrInfo 是一个包含用户信息的类模块。

此外,它的早期版本没有问题 - 我从未遇到过任何其他 MSA VBA 应用程序所描述的问题。这个特定 MSA 文件的编译版本略大于 20MB,几乎没有数据表 - 只有几个参数等 - 超过 13MB 的表格、报告等。

我希望这会有所帮助...林赛

还有更多... - 我在另一台装有 Win7/MSA2010 的 PC 上尝试了这个 .accdb 文件,这个 行为没有发生。 - 然后我在原始PC上的不同文件夹中尝试了它 没有发生。

也许这些发现将开辟一条前进的道路,但我仍然想知道为什么会发生这种情况 - 为什么文件夹选择会有所不同?

【问题讨论】:

  • 你能把实例化对象的启动表单中的代码贴出来吗?如果您在 VBA 中进行某些更改或停止项目正在运行的代码(特别是如果您更改表单本身的代码导致表单停止),它可能会被丢弃。
  • 已发布代码 - 没什么特别的。此外,我对 VBA 编辑器所做的唯一事情就是在 VBA 代码中选择 - 我不做任何更改,并且对象变量设置为空。

标签: vba ms-access


【解决方案1】:

这是通常的行为。

使用 VBA 编辑器进行更改时,它可能会重新编译数据库后面的 VB 项目。这可以是整个项目,也可以是其中的一部分,具体取决于具体的更改。

重新编译将清除所有变量。

您可以通过转到常规选项卡下的工具 -> 选项来更改此行为。请参阅以下屏幕截图。

然而,即使 Compile On Demand 关闭,对于大多数更改,您仍必须触发重新编译,清除所有设置的变量。

对于需要单个实例才能在数据库打开的情况下公开可用的类,我建议将 VB_PredeclaredID 设置为 true。这将在数​​据库打开或代码重新编译后立即实例化对象。具体方法见here

【讨论】:

  • 我尝试使用您建议的选项对话框中的编译选择,但问题行为似乎没有发生 - 我取消选中背景框,保存它,打开它等等,然后检查并保存它,行为似乎没有发生。我会监视一段时间,看看它是否会返回。如果在接下来的几天内没有问题,我将关闭它。感谢您的想法...林赛。
  • 我用了一段时间,调试和测试,最终问题又回来了。还有什么想法吗?
  • 您是否关闭了按需编译,它仍然存在吗?
  • 我已经尝试过按需编译开启和关闭,无论哪种方式都会出现问题。另外,我在不同的电脑上试过,在同一台电脑上的不同文件夹中,也没有出现问题。请参阅对我原始帖子的编辑。这一切看起来都很奇怪。
  • 关闭按需编译。还要检查Notify Before State Loss。这应该会在即将重置所有内容时通知您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 2018-10-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多