2015-02-10 2 views
5

ich eine bestimmte Zelle in mehreren Arbeitsblättern auf den gleichen Wert, ohne eine Schleife mit so etwas wie festlegen können:Loops Vermeiden von Zellen in verschiedenen Tabellen in Einstellen

Sub ThisWorks() 
    Sheets(Array("Sheet1", "Sheet3")).Select 
    Sheets("Sheet1").Activate 
    Range("B9").Select 
    ActiveCell.FormulaR1C1 = "=""x""" 
End Sub 

Ausführen des Makros über Orte, um den gleichen Wert in allen B9s in den Arbeitsblättern, die in der Array()

ich versuche, das gleiche durch die Erstellung und Verwendung des Objekt entspricht dem obigen Code zu tun:

Sub ThisPartiallyWorks() 
    Dim obj As Object 
    Set obj = Sheets(Array("Sheet1", "Sheet3")) 
    obj.Select 
    Range("A2").Formula = "=""x""" 
End Sub 

Dies läuft ohne Fehler, aber nur ein Arbeitsblatt erhält die = „x“ in der gewünschten Zelle.

Was mache ich falsch ??

EDIT # 1

Vasily der Post mir den Hinweis gab ................ diese Version scheint zu funktionieren:

Sub Finally() 
    Dim obj As Object 
    Set obj = Sheets(Array("Sheet1", "Sheet3")) 
    obj.Select 
    obj(1).Activate 
    Range("B9").Select 
    ActiveCell.FormulaR1C1 = "=""x""" 
End Sub 

Obwohl Dies scheint die Vorstellung zu verletzen, dass Select vermieden werden kann.

Antwort

4

Ich verstehe, dass dies nicht genau das ist, was Sie wollen, aber als eine der Möglichkeiten zur Reduzierung der Codierung.

Sub test() 
    Dim obj As Object, i& 
    Set obj = Sheets(Array("Sheet1", "Sheet3")) 
    For i = 1 To obj.Count: obj(i).[B9].Formula = "=""x""": Next 
End Sub 

EDIT # 1

ähnliche

Sub Finally() 
    Dim obj As Object 
    Set obj = Sheets(Array("Sheet1", "Sheet3")) 
    obj.Select: obj(1).[B9].Activate: ActiveCell.Formula = "=""x""" 
End Sub 
+1

Interessante 'obj' Leistung, +1, um mir etwas Neues beizubringen –

+1

Danke .... während dies nicht genau das ist, was ich will, zumindest hast du mir einen Weg gezeigt, diese Art von Objekt zu benutzen ..... . ** (+ 1) ** –

+1

Nochmals vielen Dank ........... siehe meine ** EDIT # 1 ** –

0
Instead of using complex arrays, when you specifically know only two sheets need to be edited. Then we can do in simple. 

Sub ThisWorks()

Sheets("Sheet1").select 
    Range("B9").Select 
    ActiveCell.FormulaR1C1 = "=""x""" 
    Sheets("Sheet3").select 
    Range("B9").Select 
    ActiveCell.FormulaR1C1 = "=""x""" 
End Sub 
aussehen könnte
+0

Wenn Sie bitte Ihre Antwort bearbeiten und erklären könnten, was der Code, den Sie zeigen, tut, und warum/wie dieser Code die Frage beantwortet, könnte es wirklich helfen. –

Verwandte Themen