2016-07-26 56 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