Clever-Excel-Forum

Normale Version: For Funktion mit Variablen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen ich nochmals ^^

Ich habe nochmals ein kleine Problem. Beim folgenden Code
Code:
Private Sub CommandButton1_Click()
    Dim x As Range, rng As Range, firstAddr As String
   
    Dim a As Variant
    Dim b As Variant
    Dim c As Variant
    Dim d As Variant
    Dim e As Variant
    Dim f As Variant
   
    a = "402"
    b = "416"
    c = "416A"
    d = "4171"
   
For i = a To d

    With Worksheets("Vorlage").UsedRange
        Set x = .Find(i, lookat:=xlWhole)
        If Not x Is Nothing Then
            firstAddr = x.Address
            Do
                If Not rng Is Nothing Then
                    Set x = Union(x, x.Offset(0, -3), x.Offset(0, -2), x.Offset(0, 3), x.Offset(0, 5), x.Offset(0, 6), x.Offset(0, 8), x.Offset(0, 9), x.Offset(0, 11), x.Offset(0, 12), x.Offset(0, 15))
                    Set rng = Union(rng, x)
                Else
                    Set rng = Union(x, x.Offset(0, -3), x.Offset(0, -2), x.Offset(0, 3), x.Offset(0, 5), x.Offset(0, 6), x.Offset(0, 8), x.Offset(0, 9), x.Offset(0, 11), x.Offset(0, 12), x.Offset(0, 15))
                End If
                Set x = .FindNext(x)
            Loop While Not x Is Nothing And x.Address <> firstAddr
        End If
    End With
    If Not rng Is Nothing Then rng.Copy
    Worksheets("PP_" & i).Activate
    ActiveSheet.Range("A2").PasteSpecial xlValues
   
Next i
End Sub

Bleibt er beim Befehl 
Code:
Worksheets("PP_" & i).Activate
hängen und gibt für "i" den Wert "403" an, jedoch bräuchte ich da den Wert  "b" "416"

Ich habe für die "For" Funktion bis jetzt immer nur mit Zahlen gearbeitet, ist das mit Buchstaben überhaupt möglich?

Freundliche Grüsse Primo
Hmmmh und Moin!
For Var1 = Var2 To Var3
erwartet aufsteigende Ganzzahlen und keine Texte!
For i = 5 To 7
also 5, 6, 7

Wenn Du eine Schleife über Texte willst, geht das bspw. so:

Sub Texte()
Dim Arr$(3), i&
  Arr(0) = "402"
  Arr(1) = "416"
  Arr(2) = "416a"
  Arr(3) = "4171"
  For i = 0 To 3
    Debug.Print Arr(i)
  Next
End Sub

Gruß Ralf
Danke Ralf :D

Danke für deine Antwort, die löst mein Problem und ich habe mal wieder was neues dazugelernt :D

Ich wünsche noch ein schönes Wochenende.

Lg Matteo
Wink
Da Du ja dazulernen willst, folgt eine andere Variante mit weniger Schreibaufwand:

Sub Texte2()
Dim arr, i&
arr = Split("402 416 416a 4171")
For i = 0 To Ubound(arr)
  Debug.Print arr(i)
Next
End Sub
Oh diese Lösung gefällt mir natürlich auch :D und wie du es sagst auch wirklich mit weniger Schreibkram verbunden.
Danke auch für diese Lösung
Hallo, 19 

eine weitere Möglichkeit ist "For Each...": 21

Code:
Option Explicit
Public Sub Main()
    Dim wksSheet As Worksheet
    For Each wksSheet In ThisWorkbook.Worksheets(Array("402", "416", "416A", "4171"))
        Debug.Print wksSheet.Name
    Next wksSheet
End Sub
Code:
Sub M_snb()
  for j=1 to 4
    msgbox choose(j,"402","416","416a","4171")
  Next
End Sub