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

