VBA在多个工作表上编辑范围

所以我试图编辑所有工作表上的范围,除了一个。 到目前为止,我想出了这个

Sub Test2() Dim WS As Worksheet For Each WS In ActiveWorkbook.Worksheets If WS.Name <> "Summary" Then Range(Cells(1, 3), Cells(1, 3)) = "test" MsgBox WS.Name End If Next WS End Sub 

它应该在每个没有命名为单元格C3的工作表上进行“testing”。 相反,它只是将“testing”添加到活动工作表中,而不是其他testing工具。 消息框工作正常。 完整的项目包括基于string长度条件编辑每个工作表上的一些单元格,但是我被困在多个工作表的编辑范围。

帮助将不胜感激!

您需要限定对工作表WS的引用。 使用Range(Cells(1, 3), Cells(1, 3))来引用一组单元格。 使用WS.Range("C3")WS.Cells(3,3)来代替。

 Sub Test2() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets With ws If .Name <> "Summary" Then .Range("C3") = "test" MsgBox .Name End If End With Next ws End Sub 

只需将语句Range(Cells(1, 3), Cells(1, 3))更改为

 WS.Range("C1") = "test" 

那么它会正常工作。 或者,您可以使用

 WS.[C1] = "test" 

托马斯显示的方法是循环播放每个工作表的声音,但是如果您有多个包含“摘要”名称的工作表,则会突出显示一种方法。 由于你不能有多个同名的表,他们将不得不独立命名,如“摘要1”,“摘要2”等…

这可以用InStr()函数进行testing,以查看表单名称中是否存在stringSummary

 Sub Test2() For Each ws In ActiveWorkbook.Worksheets With ws If InStr(1, .Name, "Summary") = False Then .Range("C3") = "test" MsgBox .Name End If End With Next ws End Sub