For Steuervariabel wird bereits verwendet! was bedeutet das?
Hallo nochmals,
ich habe mit hilfe con einigen "gutefrage.net" usern einen code geschrieben und versuche jzt durch "Copy-Paste" es für jede Zelle anzuwenden.
Beim For-Befehl kommt immer folgende Meldung "For Steuervariabel wird bereits verwendet"
was bedeutet das ? heißt es, das man das "For" nur einmal in einem code gebrauchen kann ? wäre vielleicht ein "GoTo" befehl angebrachter? ( sprich: go to next cell, wenn die bedingung erfüllt ist )
hier ist der code:
sub kopieren( )
Dim Zelle As Range Dim Wert As Variant
Wert = ActiveSheet.Range("J16:j29")
With Sheets("Tabelle2") For Each Zelle In .Range("F6:G6")
If ((Range("J16").EntireRow.Hidden = True)
Or (Range("J16").EntireColumn.Hidden = True))
Or (Range("J16").Font.Strikethrough = True) Then
Zelle.Value = ActiveSheet.Range("J17")
Else
Zelle.Value = ActiveSheet.Range("J16")
With Sheets("tabelle2")
For Each Zelle In .Range("H6:I6")
If ((Range("J17").EntireRow.Hidden = True)
Or (Range("J17").EntireColumn.Hidden = True))
Or (Range("J17").Font.Strikethrough = True) Then
Zelle.Value = ActiveSheet.Range("J18")
Else
Zelle.Value = ActiveSheet.Range("J17")
End If End With End If Next Zelle End With End Sub
Danke schonmal für eure Tatkräftigen Hilfen :)))
Gruß Newb
2 Antworten
Nein, darum geht es nicht.
Du hast ZWEI For-.Next-Schleifen ineinander geschachtelt, das ist möglich, und kein Problem.
Allerdings nutzt Du bei der zweiten Schleife die gleiche Variable, nämlich "Zelle" wie in der übergeordneten.
DAS ist der Fehler.
Schreibe in die ERSTE Zeile:
sub kopieren( )
Dim Zelle As Range Dim Zelle2 As Range Dim Wert As Variant
UND dann in die zweite Schleife,
For Each Zelle2 In .Range("H6:I6")
.....
Zelle2.Value = ActiveSheet.Range("J18")
....
Zelle2.Value = ActiveSheet.Range("J17")
....
Dann sollte es klappen.
ODER?
P.S.: Ich habe den Code nicht weiter überprüft (fehlt da vlt. noch ein Next?, dann "Next Zelle2". )
Habe leider keine Zeit mehr, muss zur Arbeit.
Melde Dich wenn es noch Probleme gibt.
HI :)
habe meinen Fehler entdeckt,
(BSP) statt :
Next zelle1
next Zelle2
Next Zelle3
musste ich :
next zelle3
next zelle2
next zelle1
hinschreiben, sprich alles umgekehrt... weiß zwar nicht ganz warum der Befehl so geschrieben werden soll aber es funktioniert :)
1000 DANK! newb!
Hallo Oubyi,
ich habe es so eingefügt wie du gesagt hast, siehe code :
Sub Kopieren()
Dim Zelle As Range
Dim zelle2 As Range
Dim Wert As Variant
Wert = ActiveSheet.Range("J16:j17")
With Sheets("Tabelle2")
For Each Zelle In .Range("F6:G6")
If ((Range("J16").EntireRow.Hidden = True)
Or (Range("J16").EntireColumn.Hidden = True))
Or (Range("J16").Font.Strikethrough = True) Then
Zelle.Value = ActiveSheet.Range("J17")
Else
Zelle.Value = ActiveSheet.Range("J16")
With Sheets("Tabelle2")
For Each zelle2 In .Range("H6:G6")
If ((Range("J17").EntireRow.Hidden = True)
Or (Range("J17").EntireColumn.Hidden = True))
Or (Range("J17").Font.Strikethrough = True) Then
zelle2.Value = ActiveSheet.Range("J18")
Else
zelle2.Value = ActiveSheet.Range("J17")
End If
Next Zelle
End With
Next zelle2
End Sub
Beim ausführen des Codes erscheint folgende Meldung :
"ungültiger Verweis auf Next Steuervariable"
habe ich da was übersehen oder vergessen ?
Gruß Newb
Ich versuche es mal:
1.
WAS sollen diese beiden Zeilen:
Dim Wert As Variant
Wert = ActiveSheet.Range("J16:j17")
Macht keinen Sinn, und würde wohl auch nicht funktionieren.
2.
Einmal:
With Sheets("Tabelle2")
genügt.
3.
Du hast die beiden For Next Schleifen geschachtelt, ich denke das macht hier keinen Sinn.
4.
So würde der Code zumindest laufen:
Sub Kopieren()
Dim Zelle As Range
Dim zelle2 As Range
With Sheets("Tabelle2")
For Each Zelle In .Range("F6:G6")
If ((Range("J16").EntireRow.Hidden = True) _
Or (Range("J16").EntireColumn.Hidden = True)) _
Or (Range("J16").Font.Strikethrough = True) Then
Zelle.Value = ActiveSheet.Range("J17")
Else
Zelle.Value = ActiveSheet.Range("J16")
End If
Next Zelle
'''''''''''''''
For Each zelle2 In .Range("H6:G6")
If ((Range("J17").EntireRow.Hidden = True) _
Or (Range("J17").EntireColumn.Hidden = True)) _
Or (Range("J17").Font.Strikethrough = True) Then
zelle2.Value = ActiveSheet.Range("J18")
Else
zelle2.Value = ActiveSheet.Range("J17")
End If
Next zelle2
End With
End Sub
Allerdings passiert direkt noch nichtst, Du weist nur den beiden Variablen Zelle und zelle2 Werte zu.
Ich denke, was Du damit machen willst kommt dann wohl noch.
Gehe den Code mal mit F8 Step by Step durch.
Danke fürs ☆
hab zwar kein plan, welche sprache das ist, aber: wo endet die for-schleife?
VBA -Sprache :P
die Schleife endet da wo "Next Zelle" steht beantwortet das deine frage?
gruß newb
NACHTRAG:
Ich sehe gerade, die Schleifen müssen nicht unbedingt geschachtelt sein, dann reich vlt. auch:
...
Zelle.Value = ActiveSheet.Range("J16")
Next Zelle
With Sheets("tabelle2")
...
Also die erste Schleif abschließen, dann die zweite starten. DAS kannst Du mit EINER Variablen (Zelle) machen.