启用不安全内容后,MS Access 表单被破坏

Posted

技术标签:

【中文标题】启用不安全内容后,MS Access 表单被破坏【英文标题】:MS Access form gets broken after enabling unsafe content 【发布时间】:2017-01-11 17:22:36 【问题描述】:

我有一个 MS Access 项目,该项目是在 MS Access 97 中开发的。我成功地将其转换为 MS Access 2016(说来话长)。一切看起来都很好,但我注意到一个非常奇怪的行为。

当用户第一次以客户端模式打开项目文件时,会弹出很多宏错误。这是正常的事情,因为用户尚未允许此文件中包含不安全的内容。因此,在用户关闭所有错误后,他按下“允许不安全内容”按钮并关闭文件。现在用户再次打开该项目,但它不能正常工作。调用了一些不应该调用的表单,并弹出“未找到模块”错误。我没有为这个程序开发任何模块。因此,这意味着如果用户在没有先允许不安全内容的情况下打开文件,则项目会完全混乱,除非您用新副本替换文件,否则无法恢复。

但是,如果用户拥有项目 .accdb 文件的新副本,并且该文件位于受信任的位置,则一切正常。使项目正常运行而不将其放置到受信任位置的另一种方法是在先按住 shift 键并按下“允许不安全内容”按钮的同时打开它。然后用户可以正常双击运行文件,它应该像它应该的那样工作。

因此,在不允许不安全内容的情况下首先打开此文件会破坏项目。我还尝试打开表单的 VBA 代码,默认情况下会调用该代码,并且 VBA 代码窗口看起来已冻结。其他形式工作正常。

如何调试这个问题?

UPD:问题似乎是由于在未启用不安全内容的情况下尝试运行宏引起的。

UPD:我还注意到一件事 - 如果我在不首先允许不安全内容的情况下运行项目,但我没有按“允许内容”,而只是关闭程序 - 我仍然能够从受信任的位置运行它。所以只有在我按下“启用内容”按钮后才会发生损坏。我的表单有附加了 OnClose 操作的宏。但我试图从这个表单中删除所有宏,但没有帮助。

【问题讨论】:

你做了一些错误的假设。首先,您的数据库确实有模块。编写单个表单中的单个事件的那一刻,就会生成该表单的模块。其次,也是最重要的,您认真对待“不安全内容”这个词。对于 MS Access,每一点 VBA 代码都是“不安全的”。这是为了防止打开您从 Internet 下载或通过电子邮件收到的随机文件。对于内部开发的文件,它不仅安全,而且必须让 VBA 不受阻碍地运行。 @SunKnight0 我并不是说我的数据库没有模块。我的意思是我没有开发任何这些。你是对的,允许 Access 在这个文件中运行不安全的代码并没有错,我理解“不安全”的含义。在某些情况下,新用户在新安装的 Windows 上意外双击 .accdb 文件而没有首先允许不安全的内容,这会破坏我的程序。在这种情况下,我将不得不给他们一个新的项目副本。这就是我的问题。 @SunKnight0 更清楚一点 - 通常当用户使用宏运行新的 .accdb 文件时,在启动过程中会出现错误(有关宏中不安全操作的内容等)并且会出现“启用内容”按钮。当用户单击按钮时,程序重新启动,没有任何宏错误并且工作正常。但在我的情况下,程序会因损坏而重新启动,我无法恢复这些损坏。 这很奇怪。它是单个文件还是链接到外部数据?如果确实如此,并且取决于外部数据的链接方式,它可以解释为什么它“中断”。如果您在 Windows 域环境中,则可以通过组策略将访问权限设置为始终运行“不安全”的内容。没有解释为什么会发生,但它确实绕过了问题。 @SunKnight0 是的,这是一个文件。 【参考方案1】:

我遇到了一些更奇怪的问题,在调试它们时发现系统上有一些 MS Office 2000 足迹。我决定卸载 MS Office,清理 Windows 注册表并再次安装 MS Office。这解决了我所有的问题。

【讨论】:

以上是关于启用不安全内容后,MS Access 表单被破坏的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2010,如何让黄色的启用内容栏再次出现?

MS Access:我想要一个启用数据输入的表单来自动填充自动编号,目前我得到的只是(新)

access数据库被破坏,如何修复?

MS Access VBA,只有在所有必需的文本框都包含有效数据后才启用按钮的有效方法

完成某些字段后,使字段在 MS Access 表单中可见

使用 ODBC 链接到 MySql 时,MS Access 表单不刷新