HERBERS Excel-Forum - das Archiv
Sytanx zur ForNext-Schleife
Jörg-HH

Guten Abend zusammen,
habe einen Knoten mit der richtigen Schreibweise...
In einem Blattcode steht:
If Target.Address = Range("Hilfszelle2").Address Then
Call machwas2
End If
If Target.Address = Range("Hilfszelle3").Address Then
Call machwas3
End If
usw... bis 5
in einem Modul steht:

Sub machwas2()
diesunddas
End Sub
Sub machwas3()
diesunddas
End Sub
usw... bis 5
Wenn ich versuche, das in eine Form zu stecken nach dem Prinzip

For i = 2 to 5
If Target.Address = Range("Hilfszelle" & i).Address Then
Call machwas & i
End If
next
wird immer die call-Zeile bemeckert, egal ob ich da was mit Tüddelchen oder ohne schreibe. Woran liegt das, und wie muß es richtig heißen?
Grüße - Jörg

AW: Sytanx zur ForNext-Schleife
Daniel

Hi
so geht das in diesem Fall nicht.
über Call kannst du das Makro nur direkt aufrufen.
wenn der Makroname aus einzelnen Textbestandteilen zusammengesetz wird dann so:
Application.Run "machwas" & i
Gruß Daniel
uppps...
Jörg-HH

Hallo Ihr zwei
hab erstmal Daniels Variante probiert, weil sie in der Reihenfolge "obenauf lag" - das läuft ja wie geschmiert und veranlaßt mich zu einer weiteren Frage:
Die verschiedenen Subs unterscheiden sich in ihren Einzelheiten auch nur durch Zellnamen mit Indizes (als die entstanden, hatte ich noch Null Ahnung von VBA) - also etwa so:
Sub machwas2()
Range("diesunddas2).ClearContents
End Sub
Sub machwas3()
Range("diesunddas3).ClearContents
End Sub
usw, es werden da immer Zellen angesprochen, die nebeneinander liegen. Könnte ich das vereinfachen ungefähr so
Sub machwas i()
Range("diesunddas" & i).ClearContents
End Sub

?
Jörg
AW: uppps...
Ramses

Hallo
Fast richtig
Sub machwas (i as Variant)
Range("diesunddas" & i).ClearContents
End Sub
Der Aufruf erfolgt dann so
Sub demo()
Machwas 5
End Sub
Gruss Rainer
AW: i as Integer reicht o.T.
Gerd

Gruß Gerd
i as String und Machwas "5" oT.
Tino

Flexibility heisst das Zauberwort :-) o.w.T.
Ramses

...
wann call, wann nicht...?
Jörg-HH

Jungs - ich bin begeistert...!!! Jetzt kann ich einige hundert Zeilen Code löschen :-)))
Kann mir noch jemand erklären, warum ich in dem einen Fall
Call Machwas5 schreiben muß, im anderen aber
Machwas 5 (ohne Call, aber mit Leerschritt)?
Danke und schönen Abend!
Jörg
AW: wann call, wann nicht...?
Gerd

Hallo Jörg,
in Peter 's Beispiel wird selektiv eines von vier verschiedenen Makros aufgerufen,
die Ziffer ist Bestandteil des/der aufgerufenen Makro/s.
In Rainer 's Code wird - unterstellt den Aufruf in einer Schleife platziert- stets das selbe
Makro aufgerufen u. hierbei die Ziffer als Argument übergeben, deshalb die Leerstelle.
Diesem Aufruf könntest Du ebenfalls ein Call voranstellen, müsstest dann das Argument
in Klammern setzen: Call Machwas (5) oder Call Machwas (Cstr(i))
In Peter 's Code könntest Du Call auch weglassen.
Die Notation von Call dient im Wesentlichen der besseren Lesbarkeit des des Codes,
konkret der Unterscheidung der Prozeduraufrufe von Variablen u. Konstanten.
Gruß Gerd
...(Cstr(i)) war das i-Tüpfelchen...
Jörg-HH

Moin Gerd
das war nun noch das Sahnehäubchen... ich finde die langen VBA-Lehrjahre ja immer wieder spannend.
Ich habe zig Abschnitte in meinem Kram, wo immer acht ellenlange gleiche Codes hintereinander stehen, die sich nur durch einen Index unterscheiden, und ich dachte mir immer, es muß doch funktionieren, daß man den Ablaufcode variabel hält und den Aufruf noch dazu. Was immer das (Cstr(i)) auch bedeuten mag - das scheint mir jetzt der Anschub zu sein, mit dem ich meinen ganzen Code durchackern und seitenweise überflüssige Abschnitte löschen kann.
Danke euch allen für die Nachhilfe :-)
Jörg
AW: Sytanx zur ForNext-Schleife
Peter

Hallo Jörg,
so könnte es laufen:
Option Explicit
Public Sub Aufruf()
Dim iIndx  As Integer
For iIndx = 2 To 5
If Target.Address = Range("Hilfszelle" & iIndx).Address Then
Select Case iIndx
Case 2: Call Machwas2
Case 3: Call Machwas3
Case 4: Call Machwas4
Case 5: Call Machwas5
End Select
End If
Next iIndx
End Sub

Gruß Peter