Vba 启用不安全内容后MS Access窗体被破坏

Vba 启用不安全内容后MS Access窗体被破坏,vba,forms,ms-access,unsafe,Vba,Forms,Ms Access,Unsafe,我有一个MS Access项目,它是在MS Access 97中开发的。我成功地将其转换为MS Access 2016(这是一个很长的故事)。一切看起来都很好,但我注意到一个非常奇怪的行为 当用户第一次以客户端模式打开项目文件时,会弹出许多宏错误。这是正常的,因为用户尚未允许此文件中存在不安全的内容。因此,在用户关闭所有错误后,他按下“允许不安全内容”按钮并关闭文件。现在,用户再次打开项目,但项目无法正常工作。调用了一些不应该调用的表单,并弹出“找不到模块”错误。我没有为这个项目开发任何模块。因

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

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

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

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

如何调试此问题

UPD:问题看起来确实是由于在未启用不安全内容的情况下试图运行宏造成的


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

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

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