Access VBA问题:关闭数据表后自动打开主菜单窗体
解决Access数据表关闭时自动打开主菜单的问题
嘿,这个问题我之前帮同事处理过,其实核心就是找对触发代码的位置——毕竟Access里不同对象的事件触发逻辑不一样,我给你两种方案,看哪种更适合你的场景:
方案1:用窗体承载数据表(推荐,可控性强)
直接操作原生数据表的话,它没有自带的关闭事件可以绑定代码,所以最好的办法是把数据表放进一个绑定窗体里,这样就能利用窗体的关闭事件来触发主菜单的打开:
- 如果你还没创建这个窗体:
- 打开Access,切换到创建选项卡,选窗体向导(或者直接用窗体设计),绑定到你要打开的数据表,快速生成一个能展示数据表内容的窗体。
- 打开这个窗体的设计视图,右键点击窗体空白区域,选择属性。
- 在属性窗口切到事件标签,找到关闭这一项,点击旁边的省略号(...),选择代码生成器。
- 在弹出的VBA编辑器里,会自动生成
Form_Close()的事件框架,你只需要在里面加一行打开主菜单的代码就行:Private Sub Form_Close() ' 把这里的"主菜单窗体名称"替换成你实际的主菜单窗体名 DoCmd.OpenForm "主菜单窗体名称" End Sub - 保存这个窗体,然后修改主菜单里打开数据表的按钮代码(右键按钮选事件生成器),改成打开这个窗体而非原生数据表,同时关闭主菜单:
Private Sub 打开数据表按钮_Click() ' 替换成你刚创建的数据表窗体名称 DoCmd.OpenForm "数据表窗体名称" ' 关闭当前主菜单窗体 DoCmd.Close acForm, Me.Name End Sub
方案2:直接监听原生数据表关闭(不推荐,灵活性差)
如果你一定要直接打开原生数据表,那得用Access的应用级事件来监听对象关闭,步骤会稍微复杂点:
- 按
Alt+F11打开VBA编辑器,在左侧工程资源管理器里右键点击你的数据库名称,选插入 -> 类模块。
- 按
- 给这个类模块改个名字(比如
AppEventMonitor),然后在模块顶部加这段代码来声明事件监听:Option Explicit Public WithEvents appAccess As Access.Application
- 给这个类模块改个名字(比如
- 在类模块里添加监听对象关闭的事件过程:
Private Sub appAccess_ObjectClose(ByVal ObjectType As AcObjectType, ByVal ObjectName As String) ' 把"你的数据表名称"替换成你要监控的数据表名 If ObjectType = acTable And ObjectName = "你的数据表名称" Then ' 打开主菜单窗体,替换成实际名称 DoCmd.OpenForm "主菜单窗体名称" End If End Sub
- 在类模块里添加监听对象关闭的事件过程:
- 插入一个标准模块(右键数据库名选插入 -> 模块),添加初始化事件监听的代码:
Option Explicit Dim eventMonitor As AppEventMonitor Sub InitializeEventMonitor() Set eventMonitor = New AppEventMonitor Set eventMonitor.appAccess = Access.Application End Sub
- 插入一个标准模块(右键数据库名选插入 -> 模块),添加初始化事件监听的代码:
- 最后让数据库启动时自动初始化监听:
创建一个名为AutoExec的宏,添加RunCode操作,在函数名称里输入InitializeEventMonitor(),保存即可。数据库每次打开时会自动运行这个宏,启动事件监听。
- 最后让数据库启动时自动初始化监听:
内容的提问来源于stack exchange,提问作者Arsee
相关产品推荐
相关产品推荐

