【问题标题】:"File not found" at the execution of any VBA code in Access 2007在 Access 2007 中执行任何 VBA 代码时出现“找不到文件”
【发布时间】:2013-04-02 16:49:57
【问题描述】:

我正在使用 Microsoft Access 2007 处理一个大型 Access 2003 项目。最近,一些用户开始在我的表单中遇到问题。例如,在没有任何特定原因的情况下,单击按钮或尝试执行任何代码都会返回错误:

找不到文件

无法进入调试模式。发生这种情况时,唯一要做的就是重新启动数据库。我尝试在执行块的开头添加Stop 命令来尝试调试它,但根本没有执行任何代码。这就像一个编译错误,但它只发生 5-10% 的时间,这真的很奇怪。

经过一番研究,我发现其他人也有同样的问题,例如thisthis 链接。还有其他例子,目前还没有真正的解决方案。

我的数据库可以正常使用一周,然后问题又开始出现。一半的时间,用户做不了太多;他们需要重新启动数据库一次或两次才能使其恢复工作,几分钟后错误可能会再次发生。

因为这是 Access 2007 并且有很多人遇到此错误,我不敢相信没有更多文档记录。

有什么问题?数据库是否以某种方式部分损坏?我该怎么办?这真的很烦人。

【问题讨论】:

  • 数据库是否位于网络共享上,或者它是否包含指向另一个位于网络共享上的数据库中的表的链接?也许“未找到”错误是由于连接断开造成的。
  • 对您的两个问题都是肯定的。如果连接断开
  • 数据库是否分为前端和后端?之前我注意到类似这样的奇怪行为,我将其归因于共享前端文件的用户。
  • 我不确定,丹尼尔。我的 Access 体验仅限于有线 LAN,在这种情况下,连接断开对我来说还不足以引起我的注意。我不将 Access 与无线连接或 WAN 一起使用。我只能建议使用本地驱动器上的所有 db 文件进行测试,看看您是否在不通过网络连接的情况下遇到相同的“未找到”错误。
  • @Scotch 是的,数据库是拆分的,一个带有表格,另一个带有表格。带有表格的数据库显然在服务器上,而带有表格的数据库则通过批处理文件复制到每台计算机上。

标签: vba ms-access


【解决方案1】:

如果我在这种情况下,我会尝试的第一件事是对前端数据库文件进行完整的反编译+压缩+重新编译操作,然后将更新的前端分发给用户看看这是否会有所改善。

反编译+压缩+重新编译步骤的详细说明可在here 获得。 注意:请务必阅读 David W. Fenton 在回答中的其他建议。

【讨论】:

  • 有趣的笔记,谢谢。我会让这个问题开放一周左右,同时我会测试项目的完整重新编译,看看它是否有助于长期。
  • 目前还不错,如果问题再次出现我会再次评论。
  • /decompile 在出现看似随机的“未找到文件”错误后为我工作 - 我认为它发生在数据库因系统关闭而关闭之后
【解决方案2】:

这是我第一次经历。我一直在对表单进行大量的编码更改,并且需要在未完成代码调试的情况下重新启动我的 PC。当我打开应用程序时,我立即收到“找不到文件”消息(它会自动启动不同的表单)。

一时兴起,我去了有问题的表单并注释掉了整个模块的代码,问题就消失了。在我返回并取消注释该代码后,一切仍然正常。我能够继续调试该代码,并愉快地度过了余下的一天。

【讨论】:

    【解决方案3】:

    虽然这个帖子已经有一年多了,但我想分享另一个非常有用的观察结果。

    此错误“找不到文件:”可能是由于 Office 版本的不同保存行为引起的,可能与您的代码无关!如果出现此错误,请尝试在另一个 Office 版本中打开并保存有问题的文件,它可能会在您的主 Office 版本中正常工作。

    详情: 尽管多年来对 VBA 进行编程,但我从未遇到过不请自来的“找不到文件:”错误。奇怪的是,错误消息没有给出未找到文件的文件名。 (提醒我另一个令人讨厌的错误 VBA 有时会在启动时无明显原因且不规律地显示。)幸运的是,这个错误是在我在 PowerPoint 2016 中测试文件后在 PowerPoint 2010 中首次编辑后开始的。打开 .pptm 时发生错误,但我没有涉及文件的启动过程。所以我有了在.pptm zip 存档中找不到某些文件的想法。开始在互联网上进行快速搜索,发现只有“在黑暗中拍摄”的建议。因为我可以比 PowerPoint 2016(不同的 Windows 10 启动分区)更容易地启动 PowerPoint 2013(虚拟机),所以我尝试在 PowerPoint 2013 中打开有问题的文件并且没有问题。我编译了 VBA 项目以检查错误。没有。并保存文件。在 PowerPoint 2013 中重新保存后,该文件似乎在 PowerPoint 2010 中再次正常工作,并且在前几次编辑、保存和重新打开后没有显示任何问题。话虽这么说,我想知道 PowerPoint 2016 保存是否特殊,如果我可以复制/如果在 PowerPoint 2016 中再次保存文件并返回到 PowerPoint 2010,我是否会再次遇到错误。(我会记下这个线程在 PowerPoint 2016 中再次使用此文件后添加新见解。)

    希望这一观察结果可以避免许多不必要的 Office 卸载/重新安装和其他绝望的尝试。

    干杯!

    【讨论】:

    • 我们从 Office 2003 更新到 Office 2010,当时我也在使用不同的 Access 版本(不记得是 2007 年还是 2010 年),所以这可能是有道理的。感谢您的意见,我会在未来考虑到这一点。
    • 我在 Word 2010 文件中遇到了同样的问题,并通过将其复制到另一台计算机(也运行 Office 2010)、打开文件并编辑宏来解决它(实际上并没有改变任何东西,我只是重新编写了一个命令) - 然后我编译并保存了文档。将其返回到第一台计算机后,它再次工作。我并没有真正改变任何东西,但显然将它重新编译或保存在另一台计算机上就足够了。非常奇怪的行为。
    • 多么好奇和有趣,因为您报告说使用相同的办公版本(在不同的计算机上)。这排除了我对 Office 版本中文件保存行为改变的怀疑。好消息是它更容易解决,因为至少在一家公司中,您可能很难找到具有不同办公版本的计算机。坏消息,我们仍然无法查明确切的原因。然而,我们可能会越来越近吗?
    【解决方案4】:

    在 2019 年 8 月更新到 Windows 10 之后,我的一个 .mdb 前端在 Access 2013 中运行时发生了几次类似的事情。

    我的数据库也经历了多个版本的 Access。打开数据库时,它显示“未找到文件”并抛出一个公共模块(不是我最近一直在广泛工作的模块),而无需打开 Autoexec(总机)表单。 'Debug, Compile' 是可能的,没有任何问题。

    对我来说也是,在代码的任意位置输入一个空格(或空行或其他字符),然后删除它,然后保存、关闭和重新打开似乎提供了一种解决方法,最后一切都很好几天(我是目前唯一的用户)。

    没有一个明显的模块涉及,但如果问题以一种麻烦的方式持续存在,我可能会怀疑我最近一直在处理的表单模块。

    现在,几天后我已经反编译、压缩并重新编译了数据库,将其大小减半,所以也许这样就可以了。但愿如此。

    【讨论】:

      【解决方案5】:

      我刚遇到这个问题。就我而言,我认为问题在于有一个空白的 VBA 模块。我将程序从一个模块移动到另一个模块,最终得到一个空白模块。我无法手动删除模块,每次尝试创建删除空白模块的过程时,我都会收到“找不到文件”错误,并且我刚刚创建的过程被空白。我最终恢复到备份。

      【讨论】:

        【解决方案6】:

        问题只是您的参考。您的参考文件之一已被移动/删除/更新。删除并重新添加您的引用以确定哪一个。

        【讨论】:

          【解决方案7】:

          我遇到了类似的问题。一个空白的“找不到文件”错误。

          我关闭了自动更正,在点击了几个让我担心的提示/警告后,我重新打开了数据库,错误就消失了。

          重新打开数据库时,问题已解决。

          我怀疑这将修复许多“找不到文件”错误,这些错误可能与临时链接表因某种原因丢失引用有关。

          【讨论】:

            【解决方案8】:

            我在 MS Excel 中遇到了同样的问题。

            当用户按下按钮时,会出现一个无用的 File Not Found 错误。

            我浏览了上面的所有建议,没有任何改变或帮助。

            完全不小心我删除了一个用于更新应用程序状态的模块。这也有一些数组存储。但是,在删除此模块(并在我的代码中注释掉对它的引用)后,该问题似乎已在用户之间得到解决。

            一个问题是我在几个不同的 Excel 加载项部署中具有相同的模块名称。我怀疑在第一次运行时 Excel 无法自动假设它们之间的区别。

            我注意到一个错误的解决方法,在该错误中,您在有问题的按钮的第一行代码上创建一个断点,然后在中断时恢复 - 我认为这有助于 Excel 评估模块并为其命名引起冲突。

            【讨论】:

              【解决方案9】:

              我遇到了这个问题并以这种方式解决了它:我消除了 vba 代码所在的表单,并从之前制作的备份文件中导入了相同的表单。

              【讨论】:

                【解决方案10】:

                我找到了另一种解决方案(至少在我的情况下):在尝试查找错误时,我测试了我在同事计算机上创建的应用程序。这以某种方式重置了文件中出现问题的任何内容。之后,我能够再次在我的计算机上打开文件,一切正常!

                编辑:我已经意识到这个错误,我的情况,似乎以某种方式与我使用 SendKeys 相关(请参阅我在 SO 上自动化报告 here 的尝试)。

                【讨论】:

                • 听到这个我并不感到惊讶,感谢您的意见。不确定 Microsoft 是否解决了最新版本的 Office 产品的问题。
                • 谢谢。我刚刚更新了评论... SendKeys 导致各种问题!
                • 不过,它还是很随机的,在我看来,这听起来像是 Office 产品本身的问题。我们使用的模块和我们项目中的代码肯定有一些相关性,但是像这样的随机和经常发生的事情不应该发生,特别是当解决方案只是禁用一个组件并再次启用它,或者启动从头开始项目并复制粘贴所有内容。
                • 同意。这可能是产品中的某种错误。
                【解决方案11】:

                遇到了同样的问题。我偶然发现了修复。无论出于何种原因,只需添加一个点击事件过程就可以让一切变得更好。

                • 在设计模式下打开表单
                • 在表单上选择一个对象
                • 按 F4 显示对象的属性
                • 事件 > 单击时 > 下拉菜单 > 单击 [事件过程]
                • 然后单击三个点,这将创建一个新事件,并启动 Visual Basic 编辑器。这也会将默认代码添加到 Visual Basic 编辑器中
                • 不做其他更改
                • 保存并关闭对表单的更改
                • 重启数据库

                不管它的价值是什么,当我正在努力解决这个问题时,错误以其他方式自行解决,但没有一个是可重复的。

                【讨论】:

                  【解决方案12】:

                  我也遇到了这个问题,压缩/修复没有解决它。在我的例子中,我有一个不再使用的旧 VBA 模块,它引用了一个不再存在的对象类。删除非编译代码为我解决了这个问题。

                  【讨论】:

                    【解决方案13】:

                    多年来,我在 access 2010 中遇到了这个问题。总是在 msaccess 启动时打开的 Autoexec 表单中。我尝试创建一个非常简单的表单来调用原始更复杂的表单。令我惊讶的是,更多的问题移动了新的简单形式。通过反复试验,我发现只需编辑新的简单 Autoexec 表单,问题就会消失,但几个月后总是在我在其他地方进行编程更改后随机出现。有时,我得到的不是文件未找到错误,而是崩溃无法访问 - 但解决方案是相同的过程 - 对 autoexec 文件进行小编辑(只需添加新的空白行即可)。我的项目经历了许多版本的访问(2000 -> 2010)。如果有某种方法可以自动编辑我的 autoexec 表单,然后重新启动访问 - 这将作为一种解决方法。我还没有找到任何方法。

                    【讨论】:

                      【解决方案14】:

                      多年来,我的 access 数据库中一直存在这个问题。我尝试了上述所有解决方案,它们都解决了问题,只是在稍后的某个时间再次出现问题 - 总是在 VBA 代码更改之后。我发现反编译然后重新编译总是可以解决这个问题,并且是最快和最简单的方法。所以我得出的结论是,在程序更改(如宏和 VBA 代码更改)后,Office 仅部分编译存在错误。经过多次更改后,系统“精神错乱”并抛出“找不到文件”错误。通读用户在此博客中找到的修复程序支持我的理论。几乎所有这些修复都可能导致某种错误并重新编译代码。

                      我的解决方案

                      总的来说,我发现了以下内容..

                      1. 进行反编译(无需重新编译)将消除错误 - 但如果代码在不同的机器上运行,错误会再次出现。

                      2. 进行反编译,然后重新编译,然后是压缩和修复结果,使我的应用程序可以在其他机器上运行而没有任何问题。

                      【讨论】:

                        【解决方案15】:

                        我有一个未使用的类模块 - Class1。我删除了它并进行了压缩和修复。 发生了一些事情,导致类模块的名称保留在导航窗格中,但模块本身已被删除: 打开 VBA 编辑器时,我得到“找不到文件”。 无法从导航窗格中删除名称!! 反编译项目时出现“加载'Class1'时发生错误。您要继续加载项目吗?” 我做到了 - 现在再次打开项目时 Class1 仍在导航窗格中,但现在我可以从导航窗格中删除。 之后,关于文件未找到的消息不再出现。 仅供参考

                        【讨论】:

                          猜你喜欢
                          • 2018-06-24
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2015-03-14
                          • 1970-01-01
                          相关资源
                          最近更新 更多