2016-07-26 28 views
0

所以我试图在所有工作表上编辑范围除外。到目前为止,我想出了这个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总结工作表上。相反,它只是将“测试”添加到活动工作表中,而不是其他测试工具。消息框工作正常,但。 完整的项目包括基于字符串长度条件编辑每个工作表上的一些单元格,但是我停留在多个工作表上的编辑范围。

帮助将不胜感激!

+0

想要说C1。虽然@Thomas示例使用: Range(“C3”)=“test” 它不适用于 .Range(Cells(1,3),Cells(1,3))=“test” 它显示了Method对象'_Worksheet'的'范围'失败 它以单元格形式显示是非常重要的,所以我可以稍后使用该范围的变量。 – Gatiivs

+0

没有注意到有答案的评论。这解决了我的问题。谢谢! – Gatiivs

回答

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

只要改变陈述Range(Cells(1, 3), Cells(1, 3))

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

然后它会正常工作。另外,您也可以使用

WS.[C1] = "test" 
+3

他必须限定范围内的单元格以及WS.Range(WS.Cells(1,3),WS.Cells(1,3))=“test”,否则它将抛出一个'Error'1004对象'_Worksheet'失败'的'方法'范围'。 – 2016-07-26 07:44:08

+0

@ThomasInzina OP已经写了完整的代码,除了他没有在范围之前写'WS.'。这就是为什么我说在它之前加上'WS.',所以他不必重写他的代码。 –

+0

是@ThomasInzina。它抛出一个错误'运行时错误'1004'和你给的评论解决了问题 – mulla

0

方法托马斯表示是声音通过每个工作循环,我虽然想强调的,如果你有包含名称“摘要”多工作表的方法。由于您无法使用多个具有相同名称的工作表,因此必须单独命名,例如“摘要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 
相关问题