如何让MS Access表单读取另一表单代码中的变量并实现表单重启
MS Access表单间状态传递与流程控制方案
针对你遇到的表单交互需求,以下是几种无需临时表的最优实现方案:
方案1:全局模块公共变量(最直观)
创建一个标准模块(例如命名为modGlobal),定义公共变量存储操作指令:
' 标准模块 modGlobal 代码 Public gbl_NeedRestart As Boolean
原表单(如frm_WarehouseAudit)提交按钮代码
Private Sub btn_SubmitParts_Click() ' 重置状态变量 gbl_NeedRestart = False ' 以acDialog模式打开验证表单,原代码暂停执行 DoCmd.OpenForm "frm_VerifyEntries", , , , , acDialog ' 验证表单关闭后判断状态 If gbl_NeedRestart Then ' 重启原表单:关闭后重新打开 DoCmd.Close acForm, Me.Name DoCmd.OpenForm Me.Name Else ' 执行后续审核逻辑,比如保存数据 Call SaveAuditRecords End If End Sub
验证表单(frm_VerifyEntries)按钮代码
' "继续"按钮 Private Sub btn_Continue_Click() gbl_NeedRestart = False DoCmd.Close acForm, Me.Name End Sub ' "重启原表单"按钮 Private Sub btn_Restart_Click() gbl_NeedRestart = True DoCmd.Close acForm, Me.Name End Sub
方案2:利用原表单的Tag属性(无需全局模块)
直接通过原表单的Tag属性存储操作状态,验证表单直接修改该属性:
原表单提交按钮代码
Private Sub btn_SubmitParts_Click() Me.Tag = "Continue" DoCmd.OpenForm "frm_VerifyEntries", , , , , acDialog If Me.Tag = "Restart" Then DoCmd.Close acForm, Me.Name DoCmd.OpenForm Me.Name Else Call SaveAuditRecords End If End Sub
验证表单按钮代码
Private Sub btn_Continue_Click() Forms("frm_WarehouseAudit").Tag = "Continue" DoCmd.Close acForm, Me.Name End Sub Private Sub btn_Restart_Click() Forms("frm_WarehouseAudit").Tag = "Restart" DoCmd.Close acForm, Me.Name End Sub
方案3:隐藏控件传递状态(适合多数据场景)
如果需要传递更多信息,可在原表单添加隐藏文本框(如txt_Action):
原表单提交按钮代码
Private Sub btn_SubmitParts_Click() Me.txt_Action = "Continue" DoCmd.OpenForm "frm_VerifyEntries", , , , , acDialog If Me.txt_Action = "Restart" Then DoCmd.Close acForm, Me.Name DoCmd.OpenForm Me.Name Else Call SaveAuditRecords End If End Sub
验证表单按钮代码
Private Sub btn_Continue_Click() Forms("frm_WarehouseAudit").txt_Action = "Continue" DoCmd.Close End Sub Private Sub btn_Restart_Click() Forms("frm_WarehouseAudit").txt_Action = "Restart" DoCmd.Close End Sub
关于你之前的Public变量问题
你之前在原表单模块定义的Public变量无法被访问,是因为需要通过表单实例调用,而非直接引用变量名。正确写法应为Forms("frm_WarehouseAudit").YourPublicVar = True,但全局模块或Tag属性的方案更简洁不易出错。
内容的提问来源于stack exchange,提问作者P. Fowler
相关产品推荐
相关产品推荐

