You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA向多个Excel工作表插入公式仅单个生效的问题排查

问题原因

你的代码存在两个关键问题:

  • 拼写错误:ThisWorkSheet是错误写法,且此处你需要操作的是工作表而非工作簿,正确应该用ActiveSheet指代当前激活的工作表;
  • 依赖激活操作易出错:靠Activate切换工作表容易引发上下文混乱,导致公式未写入目标工作表。
修正后的代码

方案1:修正原逻辑(保留激活操作)

Sub RunSheets1()
    Sheets("Sheet1").Activate
    With ActiveSheet
        Range("B5").Formula = "=SUM(F3,G3,H3,I3,J3)"
    End With

    Sheets("Sheet2").Activate
    With ActiveSheet
        Range("H6").Formula = "=SUM(F4,G4,H4,I4,J4)"
        Range("AC6").Formula = "=SUM(AC4,AD4,AE4,AF4,AG4)"
    End With

    Sheets("Sheet3").Activate
    With ActiveSheet
        Range("H6").Formula = "=SUM(F4,G4,H4,I4,J4)"
        Range("AC6").Formula = "=SUM(AC4,AD4,AE4,AF4,AG4)"
    End With

    Sheets("Sheet4").Activate
    With ActiveSheet
        Range("H6").Formula = "=SUM(F4,G4,H4,I4,J4)"
        Range("AC6").Formula = "=SUM(AC4,AD4,AE4,AF4,AG4)"
    End With

    Sheets("Sheet5").Activate
    With ActiveSheet
        Range("H6").Formula = "=SUM(F4,G4,H4,I4,J4)"
        Range("AC6").Formula = "=SUM(AC4,AD4,AE4,AF4,AG4)"
    End With
End Sub

方案2:优化代码(移除激活操作,直接引用工作表)

这种方式更高效,也避免了激活操作带来的潜在问题:

Sub RunSheets1()
    ' 单独处理Sheet1
    With Sheets("Sheet1")
        .Range("B5").Formula = "=SUM(F3,G3,H3,I3,J3)"
    End With

    ' 批量处理Sheet2到Sheet5,减少代码冗余
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Sheets(Array("Sheet2", "Sheet3", "Sheet4", "Sheet5"))
        With ws
            .Range("H6").Formula = "=SUM(F4,G4,H4,I4,J4)"
            .Range("AC6").Formula = "=SUM(AC4,AD4,AE4,AF4,AG4)"
        End With
    Next ws
End Sub
关键说明
  • 直接引用工作表时,Range前必须加.,表示该单元格属于当前With块中的工作表对象;
  • 批量处理重复操作时,用循环可以大幅减少代码冗余,后续新增工作表只需修改数组即可。

内容的提问来源于stack exchange,提问作者Sameer Wasnikar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:41:17