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

Excel VBA:如何遍历指定工作表并格式化相同单元格区域

修复VBA工作表遍历与格式化问题

你的代码无法实现工作表遍历的核心原因是:所有单元格操作都默认指向当前活动工作表,没有明确关联到循环中指定的ws对象,导致循环遍历了工作表名称,但实际操作全在同一个工作表上。

关键修改点

  • 所有单元格区域操作前添加ws.前缀,明确指定操作的目标工作表
  • 移除低效且易出错的Select/Selection/ActiveCell操作,直接对单元格对象进行设置

修复后的完整代码

Sub Macro1()
    Dim wsList() As String, wsName As Variant, ws As Worksheet
   
    wsList = Split("1 2 3 4 5 6 7 8 9 10", " ")
    
    For Each wsName In wsList
        Set ws = ThisWorkbook.Sheets(wsName)
      
        ' 清除指定区域的填充格式
        With ws.Range("A4:C7,L4:Q5,L6:L7,S24:U27,AD24:AF27,AO28:AR29,AO26:AO27").Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    
        ' 设置指定区域的锁定和公式隐藏属性
        With ws.Range("B4:C7,M4:Q5,T24:U27,AE24:AF27,AP28:AR29")
            .Locked = False
            .FormulaHidden = False
        End With
    
        ' 在O31单元格写入"FALL"(原代码选中区域后ActiveCell是O31)
        ws.Range("O31").FormulaR1C1 = "FALL"
    
    Next wsName
End Sub

额外优化建议

如果你的工作表名称确实是1到10,可以不用手动写Split字符串,直接用数字循环简化代码:

Sub Macro1_简化版()
    Dim ws As Worksheet, i As Integer
    
    For i = 1 To 10
        Set ws = ThisWorkbook.Sheets(CStr(i))
        ' 后续操作和上面一致...
    Next i
End Sub

内容的提问来源于stack exchange,提问作者Mohamad Bachrouche

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:16