InputBox- verschachteltet Schleifen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: InputBox- verschachteltet Schleifen
von: Julia559
Geschrieben am: 20.08.2015 15:51:01

Hallo zusammen,
ich habe bereits ein Makro, dass aus zwei Schleifen (zuerst Makro1 und danach Makro 2) besteht. Jede Schleife, wird mittels einer InputBox gesteuert - siehe unten.
Das Makro funktioniert, allerdings suche ich nach einer Vereinfachung. Wenn z.b. in der InputBox des Makro1 10000 eingegeben wird, muss ich in der InputBox des Makro2 ebenfalls 10000 mal eine Eingabe vornehmen. Kann ich das Makro2 irgendwie abändern, sodass die Inputbox nur beim ersten Mal erscheint, und die vorgenommene Eingabe dann automatisch in die Inputbox der 9999 weiteren Durchläufe übernommen wird? Ich kann leider die zweite Inputbox nicht weglassen, da die Datei an dieser Stelle weiterhin variabel sein muss.
Schon jetzt vielen Dank für eure Unterstützung.
Liebe Grüße,
Julia

Sub Makro1()
Dim vntRet As Variant
Dim lngI As Long
Do
  vntRet = Application.InputBox("Wie viele Wiederholungen? (1 bis 10000)", "Wiederholungen", 5,  _
 _
Type:=1)
  If vntRet = False Then Exit Sub
Loop While vntRet < 1 Or vntRet > 10000
For lngI =  To vntRet
  ....
Next
End Sub

Sub Makro2()
Dim vntSam As Variant
Dim i as long
 Do
    vntSam = InputBox("Wie viele Teilnehmer sollen gezogen werden?")
    If IsNumeric(vntSam) Then Exit Do
 Loop
 For i = 1 To vntSam
...
 Next i
End Sub

Bild

Betrifft: AW: InputBox- verschachteltet Schleifen
von: selli
Geschrieben am: 20.08.2015 16:27:22
hallo julia,
in ein modul (ausserhalb der makros) deklarierst du die variable vntRet als public.
Dim vntRet As Variant im ersten makro entfällt.
also : Public vntRet As Variant
im 2. makro kannst du dann diese variable ebenfalls verwenden.
gruß
selli

Bild

Betrifft: AW: InputBox- verschachteltet Schleifen
von: Nepumuk
Geschrieben am: 20.08.2015 16:29:28
Hallo,
würde ich so machen:

Sub Makro2()
    Static vntSam As Variant
    Dim i As Long
    If IsEmpty(vntSam) Then
        Do
            vntSam = InputBox("Wie viele Teilnehmer sollen gezogen werden?")
            If IsNumeric(vntSam) Then Exit Do
        Loop
    End If
    For i = 1 To vntSam
        '...
    Next i
End Sub

Gruß
Nepumuk

Bild

Betrifft: InputBox- verschachteltet Schleifen
von: Julia559
Geschrieben am: 20.08.2015 17:50:49
Hallo Nepumuk,
das hat soweit funktioniert. Vielen Dank dafür. Allerdings wird die InputBox des Makros2 auch bei weiteren Makrostarts nicht mehr abgefragt. Genau so hab ich mir das vorgestellt, allerdings wenn ich das Makro ein zweites Mal aufrufe soll beim ersten Durchlauf wieder die Inputbox erscheinen und nicht generell zukünftig ausgeblendet werden. Kann man dies in deinem Code noch irgendwie anpassen? Oder gibt es noch andere Möglichkeiten? Auch an Selli vielen Dank. Allerdings ist mir die Lösung nicht ganz klar. Müsste ich dann ein neues Makro erstellen (mit Public) und dies in mein bestehendes Makro integrieren (über call)?
Grüße,
Julia

Bild

Betrifft: AW: InputBox- verschachteltet Schleifen
von: Nepumuk
Geschrieben am: 20.08.2015 17:59:43
Hallo,
dann so:

Sub Makro1()
    Dim vntRet As Variant, vntSam As Variant
    Dim lngI As Long
    
    Do
        vntRet = Application.InputBox("Wie viele Wiederholungen? (1 bis 10000)", "Wiederholungen", 5, Type:=1)
        If vntRet = False Then Exit Sub
    Loop While vntRet < 1 Or vntRet > 10000
    Do
        vntSam = InputBox("Wie viele Teilnehmer sollen gezogen werden?")
        If IsNumeric(vntSam) Then Exit Do
    Loop
    For lngI = 1 To vntRet
        Call Makro2(vntSam) '!!!!!!!!!!!!!!!!!!!
        ....
    Next
    
End Sub

Sub Makro2(vntSam As Variant)
    
    Dim i As Long
    
    For i = 1 To vntSam
        ...
    Next i
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: InputBox- verschachteltet Schleifen
von: Julia559
Geschrieben am: 20.08.2015 21:05:32
Super, jetzt läuft alles perfekt. Vielen Dank.

Bild

Betrifft: AW: InputBox- verschachteltet Schleifen
von: selli
Geschrieben am: 21.08.2015 09:11:06
hallo julia,
ich schrieb: in ein modul (ausserhalb der makros) deklarierst du die variable vntRet als public.
gruß
selli

 Bild

Beiträge aus den Excel-Beispielen zum Thema "InputBox- verschachteltet Schleifen"