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

时间:2016-07-26 07:25:50

标签: excel vba excel-vba spreadsheet

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

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

应该把&#34;测试&#34;在单元格C3中未命名为Summary的每个工作表上。相反,它只是添加&#34; test&#34;到活动表,没有其他人。消息框工作正常。 完整的项目包括根据字符串长度条件在每张纸上编辑一些单元格,但是我在多张纸上编辑范围。

帮助将不胜感激!

3 个答案:

答案 0 :(得分:3)

您需要限定对工作表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

答案 1 :(得分:1)

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

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

然后它会正常工作。或者,您可以使用

WS.[C1] = "test"

答案 2 :(得分:0)

Thomas显示的方法是循环遍历每个工作表,我想要突出显示一个方法,如果你有多个包含名称“摘要”的工作表。由于您不能使用多个具有相同名称的工作表,因此必须单独命名,例如“摘要1”,“摘要2”等...

可以使用InStr()函数对此进行测试,以查看工作表名称中是否有字符串Summary

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