使用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
相关产品推荐
相关产品推荐

