如何绕过 MSAccess autoexec 宏和启动表单,对具有数百个表单和报告的大型 MS Access 2003 应用程序进行深度遗留代码升级?
它是从 Access 2003 升级到 Access 2016、2019 或 365。
这是一个任务关键型系统,在没有任何 VBA 代码更新的情况下保持活力并依靠拐杖运行了 15 年。
- 应用程序中的文件
- MDB 和 ACCDB 格式的多个 MSAccess 文件
- 没有带有已编译 VBA 代码的 MDE 或 ACCDE 格式的 MSAccess 文件
- 没有 MSAccess 其他文件,例如 mdw 安全文件
- 我为数据库运行一个 dos 命令 - PATH_TO_MSACCESS.exe DB_NAME.mdb
- 我正在使用 Office 365 中的 32 位 MSAccess.exe。
- 请注意,如果在 64 位 MSAccess.exe 上运行 VBA 调用 Windows 操作系统 Win32 API 方法,则会出现兼容性和 VBA 编译器错误。此应用程序调用了几 (5) 个 Win32 API 调用。从技术上讲,MS Access 64 位会将一些从 Win32 API 发送/返回的 32 位数据视为 64 位,从而导致错误。
最困难的部分是许多网页以及与此相关的几乎所有 Microsoft 页面都已从网络上删除。
- 试过但没用
- 打开 MSAccess 数据库时按住 shift 键
- 按 F11 打开 Access 中的导航窗格(不打开)。如果导航窗格打开,我可以编辑 AutoExec 宏或启动表单的 Form_Open 代码
- 尝试过,不完美,并且有效
- 运行 MSAccess.exe 命令行上不存在的宏,在错误消息上多次单击转义,单击 MSAccess 功能区以获取 VBA 代码。凌乱,但它让我进入了 VBA 代码。
- 添加了一个“Stop”作为名为“autoexec”的宏的第一行以及启动表单的“Form_Open()”方法的第一行。我必须为表单添加一个空的“Form_Open()”事件处理程序
- 运行 MSAccess.exe 命令行上不存在的宏,在错误消息上多次单击转义,单击 MSAccess 功能区以获取 VBA 代码。凌乱,但它让我进入了 VBA 代码。
当前状态:
- 该应用程序在 2016 年之前使用 MS Access 版本的机器上运行正常
- 当机器上仅安装 32 位 MS Access 365/2019 时,它会以多种方式失败。
- 我一直在查找和修复错误的配置文件条目、不正确的安装路径等问题,但需要在 VBA 调试器中调试 VBA 启动代码和初始表单加载。
- 我无法在 AutoExec 宏的第一行直接进入 VBA 调试器或启动表单的 Form_Open 函数。MSAccess 始终运行 autoexec 宏并显示启动窗体。
- 我可以通过运行 MSaccess.exe 命令行并指定它运行一个不存在的宏来进入 VBA。
- 我无法在 AutoExec 宏的第一行直接进入 VBA 调试器或启动表单的 Form_Open 函数。MSAccess 始终运行 autoexec 宏并显示启动窗体。
- 我一直在查找和修复错误的配置文件条目、不正确的安装路径等问题,但需要在 VBA 调试器中调试 VBA 启动代码和初始表单加载。
以下是基于 Google 搜索的可能解决方案,按 Access 版本细分,因为相关代码/数据库设置可能特定于 95 至 2010 年的任何 Access 版本。
Access 2007:从命令行打开 MS-Access 数据库而不运行任何启动 vba 代码? 打开MDB数据库时按住shift键
Access XP 无需执行脚本或表单即可打开访问数据库
- 打开Access数据库时按住shift键
- 删除 AutoExec 宏
- 从数据库中删除启动表单设置
Access 2007: 使用 VBA 打开由 mdw 文件保护的 ms-access 数据库时模拟 SHIFT 键按下?
- Access 数据库由 MDW 安全文件保护的情况略有不同
- 相同的答案
访问 XP/2003/2007? 从 MSAccess 打开 MSAccess 时如何跳过 Autoexec 宏?
- 方法一:
- 原始 URL 已死,Internet Archive Wayback 机器有存档副本:https ://web.archive.org/web/20101204113950/http://www.mvps.org/access/api/api0068.htm
- 如果未设置 [AllowbypassKey],则通过代码将 Shift 键发送到 Access 以绕过启动宏
- 方法二:
- 从数据库中提取 Autoexec 宏,将其替换为空白 AutoExec 宏
- 使用 DoCmd.DatabaseTransfer acImport 和 DoCmd.DatabaseTransfer acExport
- 方法三:
- 使用 VBA 代码重命名 AutoExec 宏
- OpenCurrentDatabase(“您的数据库”)
- DoCmd.Rename "Autoexec", acMacro, "tmp_Autoexec"
- 关闭当前数据库
MS Access 键盘快捷键,用于获取 Access 数据库中的 VBA 代码或对象。从https://support.microsoft.com/en-us/office/keyboard-shortcuts-for-access-70a673e4-4f7b-4300-b8e5-3320fa6606e2 我没有尝试过 MSAccess 键盘快捷键,看看他们是否让我打开并查看 Access VBA 代码、工具栏、表格/表单设计查看器,或切换到代码编辑模式。为了完整起见,我将它们包括在这里。
- F2 - 在数据表或设计视图中的编辑模式(显示插入点)和导航模式之间切换
- F4 - 打开对象的属性窗格
- F5 - 从表单设计视图切换到表单视图
- F6 - 在 MS Access 界面中的窗格之间切换
- F10 (?) 取消隐藏功能区
- F11 - 显示或隐藏导航窗格
- Alt-X、Alt-X、1 - 打开功能区中的外部数据选项卡
- Alt-Y - 打开功能区中的数据库工具选项卡
- Alt-J,T - 打开功能区中的表格选项卡
- Alt-X,2 - 打开功能区中的加载项选项卡
- Control-F1 - 展开/折叠功能区
- Alt-F11 - 切换到/从 VBA 编辑器
在 VBA 代码中显示或隐藏 MSAccess 功能区工具栏。为了完整起见,包括在此处。此应用程序在应用程序启动时隐藏功能区栏。 MSAccess - 最小化工具栏功能区 OnLoad()?
- MSAccess 2010 及更高版本。acToolbarNo 在此应用程序的 VBA 代码中
- DoCmd.ShowToolbar "Ribbon", acToolbarNo '隐藏整个工具栏
- DoCmd.ShowToolbar "Ribbon", acToolbarYes '显示
- 2010 年,2013 年 MSACcess
- CommandBars.ExecuteMso“最小化功能区”
- 在 MSAccess 2010 之前
- 发送键“^{F1}”,假
特殊情况:如果 Access 启动表单的记录源有错误,您可能会在 Access 启动表单上收到错误消息。这不是我的应用程序的情况,但包括在这里完整性 困难跟踪微软访问 VBA 代码
特殊情况:您从启动表单中获得无限循环的对话框提示或错误。按住“Control-Break”键,同时单击“确定”以使错误消息跳出错误循环。https://bettersolutions.com/vba/debugging/index.htm
通过右键单击启动表单的标题栏或右键单击启动表单的主体,可以将主启动表单中断到 MS Access 对象资源管理器。
- 右键单击启动窗体的标题栏有这些菜单命令
- 节省
- 关闭并关闭所有
- 表单视图
- 布局视图
- 设计视图
- 右键单击启动窗体的主体有这些菜单命令
- 表单视图
- 布局视图
- 设计视图
- 剪切、复制、过去(禁用)
- 表单属性(禁用)
- 属性(已禁用)
- 关