Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1120to1124
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sytanx zur ForNext-Schleife

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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Sytanx zur ForNext-Schleife
08.12.2009 20:44:25
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...
08.12.2009 21:45:19
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
Anzeige
AW: uppps...
08.12.2009 21:53:01
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.
08.12.2009 22:04:01
Gerd
Gruß Gerd
i as String und Machwas "5" oT.
08.12.2009 22:11:38
Tino
Flexibility heisst das Zauberwort :-) o.w.T.
08.12.2009 22:28:23
Ramses
...
wann call, wann nicht...?
08.12.2009 22:47:44
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
Anzeige
AW: wann call, wann nicht...?
08.12.2009 23:26:25
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
Anzeige
...(Cstr(i)) war das i-Tüpfelchen...
09.12.2009 11:38:37
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
Anzeige
AW: Sytanx zur ForNext-Schleife
08.12.2009 20:58:03
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

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige