咨询:无需手动触发自动运行VBA代码及跨表求和报错问题
问题分析与解决方案
原代码的核心问题
- Worksheet_Change事件格式错误:这个事件必须带
ByVal Target As Range参数,缺省参数会直接触发报错。 - 无限循环风险:代码修改单元格B3时,会再次触发Worksheet_Change事件,导致循环调用崩溃。
- 未指定工作表范围:
Range("b3")未明确所属工作表,可能会把结果写入当前激活的工作表,而非目标表。
修正后的代码
将以下代码放到你要显示求和结果的工作表模块中(右键目标工作表标签→查看代码,粘贴代码):
Private Sub Worksheet_Change(ByVal Target As Range) ' 关闭事件触发,避免循环调用 Application.EnableEvents = False Dim sumrange As Range Dim Sumcolumn As Double On Error Resume Next ' 捕获表格/列不存在的错误 Set sumrange = Sheets("Receipt Input").Range("TBL_receipts[Payments]") If Err.Number = 0 Then Sumcolumn = Application.WorksheetFunction.Sum(sumrange) ' 明确指定当前工作表的B3,避免写入错误位置 Me.Range("b3").Value = Sumcolumn End If On Error GoTo 0 ' 恢复默认错误捕获 ' 重新开启事件触发 Application.EnableEvents = True End Sub
额外优化(可选)
如果希望打开文件时自动执行一次求和(确保打开就显示最新结果),可在同一模块中添加以下代码:
Private Sub Worksheet_Activate() ' 复用Change事件的逻辑,避免重复编写代码 Call Worksheet_Change(Me.Range("A1")) End Sub
内容的提问来源于stack exchange,提问作者james amatrais
相关产品推荐
相关产品推荐

