VBA Access窗体按钮仅可触发一次后无响应无报错问题求助
Access窗体按钮仅触发一次无报错问题解决方案
问题背景
提问者具备C、C++开发基础,仅接触VBA两周,遇到Access窗体按钮点击一次后后续点击无响应问题,调试阶段无错误提示,过程、函数内也未抛出报错。
已排查项
- 已修改信任中心设置,问题未解决
- 代码基于Access 2000 VBA编写,当前使用Office 365编辑项目,需求为兼容Access 2007运行,实测Access 2003、2007环境下均存在相同问题
- 无残留未关闭的窗体
复现流程
点击第一个窗体的OpenCust按钮跳转至cust编辑窗体,该窗体上的NewTsiyud按钮仅第一次点击可正常触发,后续点击无响应。
相关代码
第一个窗体OpenCust按钮代码
Private Sub OpenCust_Click() On Error GoTo Err_OpenCust_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "cust" Me.RecNo = Me.CurrentRecord stLinkCriteria = "[CustNo]=" & Me![CustNo] DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormEdit MsgBox "getted out from opencust" 'its ok working Exit_OpenCust_Click: Exit Sub Err_OpenCust_Click: MsgBox Err.Description Resume Exit_OpenCust_Click 'the code not getting here No matter what End Sub
第二个窗体NewTsiyud按钮代码
Private Sub NewTsiyud_Click() On Error GoTo Err_NewTsiyud_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "ShirutTsiyud" 'the stLinkCriteria is not effecting if i take down it DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormAdd Form_cust![TiyudimCust].Requery MsgBox "getted out from newTsiyud" 'this is working only once Exit_NewTsiyud_Click: Exit Sub Err_NewTsiyud_Click: MsgBox Err.Description Resume Exit_NewTsiyud_Click End Sub
修复方案
该问题核心是VBA全局窗体引用状态异常、低版本Access参数缺省隐病导致,可按以下步骤修复:
- 替换全局窗体引用为当前实例引用
原代码Form_cust![TiyudimCust].Requery使用全局默认窗体实例引用,第一次打开后实例状态会被锁定,修改为Me![TiyudimCust].Requery直接指向当前打开的cust窗体实例,避免引用失效。 - 显式关闭新增窗体释放对象
在ShirutTsiyud窗体新增操作完成后增加DoCmd.Close acForm, "ShirutTsiyud"逻辑,避免后台持有对象锁阻塞事件,同时在NewTsiyud_Click过程末尾增加Set stDocName = Nothing释放临时对象。 - 强制窗体刷新控件状态
在Requery操作后增加Me.Repaint,强制刷新窗体控件状态,避免按钮点击事件被消息队列阻塞。 - 补全OpenForm全参数适配低版本Access
低版本Access中DoCmd.OpenForm缺省参数会出现不可预期行为,补全所有参数即可:
DoCmd.OpenForm FormName:=stDocName, View:=acNormal, FilterName:="", WhereCondition:=stLinkCriteria, DataMode:=acFormAdd, WindowMode:=acWindowNormal
内容的提问来源于stack exchange,提问作者aharon80
相关产品推荐
相关产品推荐

