VBA子过程单独运行正常,跨子过程调用时数据复制失败
控件引用上下文出错:单独运行
TotalsUpdated时,默认以当前窗体为上下文读取TotalCtnsAir等控件的值,但在SaveButtonAir_Click里调用时,可能存在窗体实例混淆(比如同时打开多个窗体),或者代码里没明确指定窗体对象。要把控件引用改成Me.TotalCtnsAir(当前窗体实例)或者YourFormName.TotalCtnsAir(明确指定窗体),避免因上下文不同读不到正确的控件值。错误被静默掩盖:如果
SaveButtonAir_Click里加了On Error Resume Next这类错误捕获语句,会导致TotalsUpdated里的错误被隐藏,表面没反应但实际有问题。可以临时注释掉错误捕获代码,再运行看看有没有错误提示,快速定位问题点。工作表引用不明确:
TotalsUpdated如果用了Range("XX")这种没指定工作表的写法,单独运行时可能刚好激活了"Rate Calc"工作表,但在SaveButtonAir_Click调用时,当前活动表可能不是目标表,数据就写到了别的地方。必须改成明确引用:ThisWorkbook.Worksheets("Rate Calc").Range("目标单元格").Value = 控件值。窗体状态或控件值未更新:调用
TotalsUpdated时,窗体可能处于非激活状态,或者用户刚输入的控件值还没同步到内存里。可以在调用前加一句Me.Repaint强制刷新窗体,确保控件读取的是最新输入值。变量冲突或作用域问题:如果
TotalsUpdated用到了模块级变量,而SaveButtonAir_Click里修改了同名变量,会导致数据传递错误。检查两个过程的变量定义,避免同名,必要时改用局部变量,或者通过参数传递数据。调用顺序不对:比如
SaveButtonAir_Click在调用TotalsUpdated之前,执行了清空控件值、切换工作表这类操作,导致TotalsUpdated读取的是空值或错误数据。核对SaveButtonAir_Click的代码顺序,确保调用TotalsUpdated时控件还保留着有效数据。
内容的提问来源于stack exchange,提问作者Scuba

