2016-04-12 5 views
0

Ich verwende VBA in Excel.Muss den VBA-Code korrigieren. Fehlermeldung wird angezeigt. "Steuervariable wird bereits verwendet"

Ich bekomme eine Fehlermeldung, dass Steuervariable bereits verwendet wird. Wenn der Fehler auftritt, wird die zweite For E r im VBA-Editor hervorgehoben. Kann jemand helfen, diesen Code zu korrigieren. Danke

Dim ws As Worksheet 
Dim r As Range 

For Each ws In Worksheets 
    If InStr(1, ws.Name, "Wk", 1) > 0 Then 
     For Each r In ws.Range("C118:I124") 
     For Each r In ws.Range("C163:J168") 
     For Each r In ws.Cell(E2, E15, E28, E41, E54, E67, E80) 
      r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
     Next r 
    End If 
Next ws 

MsgBox "Done" 
End Sub 
+0

Jede 'For Each'-Schleife muss mit einer entsprechenden' Next'-Anweisung geschlossen werden. Ihr Code hat "geöffnet" 4 "For Each" Loops aber "geschlossen" nur zwei von ihnen. Außerdem teilen sich die beiden innersten "For Each" -Schleifen die gleiche Schleifenvariable ("r") wie die äußere, und das ist nicht möglich: Jede Schleife muss ihre eigene Schleifenvariable haben. – user3598756

Antwort

0

Sie versuchen, durch drei verschiedene Bereiche zu durchlaufen, d. H. Diese Bereiche verketten. So funktioniert das For-Each jedoch nicht, und Sie müssen es aufteilen.

Dim ws As Worksheet 
Dim r As Range 

For Each ws In Worksheets 
    If InStr(1, ws.Name, "Wk", 1) > 0 Then 
     For Each r In ws.Range("C118:I124") 
      r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
     Next r 

     For Each r In ws.Range("C163:J168") 
      r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
     Next r 

     Range("E2").Formula = Replace(Range("E2").Formula, "Wk1", Range("E2").Parent.Name) 
     Range("E15").Formula = Replace(Range("E15").Formula, "Wk1", Range("E15").Parent.Name) 
     Range("E28").Formula = Replace(Range("E28").Formula, "Wk1", Range("E28").Parent.Name) 
     Range("E41").Formula = Replace(Range("E41").Formula, "Wk1", Range("E41").Parent.Name) 
     Range("E54").Formula = Replace(Range("E54").Formula, "Wk1", Range("E54").Parent.Name) 
     Range("E67").Formula = Replace(Range("E67").Formula, "Wk1", Range("E67").Parent.Name) 
     Range("E80").Formula = Replace(Range("E80").Formula, "Wk1", Range("E80").Parent.Name) 
    End If 
Next ws 

MsgBox "Done" 
End Sub 

BEARBEITEN: Geändert, um Kommentar aufzunehmen. Es wird nicht schöner, aber ich fürchte, es gibt keine Methode, um mehrere lose Zellen eleganter zu machen.

+0

Danke. ive versuchte diesen Code, aber jetzt bekomme ich eine Fehlermeldung mit der Zelle E2 im Code hervorgehoben, die Variable nicht definiert – frustrationmultiplied

+0

kann jemand helfen – frustrationmultiplied

+0

Vielen Dank für die Zeit nehmen, um den Code zu tippen. Ich habe es in den Editor eingefügt, aber ich habe eine Fehlermeldung "Objektvariable oder mit Blockvariable nicht gesetzt" bekommen. Es gibt auch ein Zitat um E54 in dem Code, den Sie eingegeben haben, falls jemand es benutzen möchte. – frustrationmultiplied

Verwandte Themen