Microsoft Excel

Herbers Excel/VBA-Archiv

Call verwenden

Betrifft: Call verwenden von: Steve
Geschrieben am: 23.09.2020 16:07:42

Moin Leute,

ich hab neulich was neues gelernt. Nämlich mit Call ein Makro aufzurufen. Und dann hatte ich auf einmal eine Idee. Kann mir jemand sagen ob diese "zugegeben sehr theoretische" Idee funktioniert.

Sagen wir mal, ich schreibe 3 Makros. Je nachdem in welcher Reihenfolge ich diese sortiere passiert was unterschiedliches. Wir tun mal so als wenn alle Kombinationen sauber miteinander harmonieren.

Jetzt könnte ich also aus den 3 Schnipseln 6 Makros bauen. Diese könnte ich alle schreiben (oder copy paste) oder - wesentlich kürzer - mit Call einfach aufrufen.

Liege ich da richtig? Sollte man das lassen bzw sind dem Grenzen gesetzt?

Ein eher Praktisches Beispiel:

Ich erstelle eine Abfrage die mehrere Antworten zulässt.
Jede Möglichkeit startet ein Makro. Ich könnte nun alles in ein einziges Makro schreiben, oder eben in getrennte und mit Call aufrufen sowie diese ausgewählt werden.

Das würde das lesen des Codes meines erachtens wesentlich sauberer gestalten. (Weniger Text)

Denkfehler?
Wäre schön wenn mir da jemand was zu sagen könnte. Wie immer nehme ich auch gerne was zum lesen. Habe nur nichts gefunden was mir die Frage gut beantwortet.

Kurz: wie sehr kann bzw. darf ich die Verwendung von Call ausreizen?

Liebe Grüße

Steve

Betrifft: AW: Call verwenden
von: Zwenn
Geschrieben am: 23.09.2020 16:59:37

Hallo Steve,

du hast das genau richtig erkannt. Sehr erfreulich :-)

Allerdings ist Call nur das Schlüsselwort, um eine andere Sub() aufzurufen. Du kannst das auch ohne Call machen. Falls es Parameter gibt, die übergeben werden müssen, werden diese dann nicht in Klammern geschrieben, sondern einfach hinter den Namen der Sub(), wobei zwischen jedem Parameter ein Komma gesetzt wird.
Call Test(Parameter1, Parameter2)

ist das gleiche wie
Test Parameter1, Parameter2
Mit Subs arbeitet man, wenn die aufgerufene Sub "nur" etwas für sich machen soll. Willst Du einen Wert zurück bekommen, wird statt Sub(), das Schlüsselwort Function() verwendet. Belies dich mal über die Anwendung von Subs und Functions. Die sind in der Regel dafür gedacht Code nur einmal zu schreiben, den man öfter benötigt. Aber wie Du schon sagst, kann man das System auch verwenden, um Code übersichtlicher zu gestalten.

Fertige Funktionen gibt es schon viele, aber oft braucht man auch selbst geschriebene. Funktionen, die man einfach verwendet sind z.B. Replace(), InStr(), Trim(), usw. Für all diese setzt du die Funktion nach rechts und eine Variable, der der Rückgabewert der Funktion zugewiesen wird, links vom Gleichheitszeichen.

Z.B. entfernst Du führende und schließende Leerzeichen in einem String mit
meineZeichenKette = Trim(meineZeichenkette)
Dabei können die beiden Variablen vom Typ String natürlich auch verschieden sein.

Zu Subs in VBA:
https://www.herber.de/vbabasics/0005.html

Zu Funktionen in VBA:
https://www.herber.de/vbabasics/0004.html

Viele Grüße,

Zwenn

Betrifft: AW: Call verwenden
von: ChrisL
Geschrieben am: 23.09.2020 17:09:41

Hi Steve

Fest steht, wenn du aus verschiedenen Makros immer wieder die gleichen Codes aufrufen musst, dann ist es besser dies über Call zu machen, anstelle den Code in jedem Sub zu wiederholen.

Unterprozeduren können zur besseren Übersicht beitragen (speziell bei längeren Codes). Wie stark dies ausgereizt werden soll, hängt jedoch von der Präferenz des Programmierers ab. Übertreiben würde ich es jedenfalls nicht.

Ist ein wenig wie mit der Ordnerstruktur im Explorer. Manche Leute machen fast für jede Datei einen neuen Ordner, was genauso unübersichtlich werden kann, wie wenn man alles in den selben Ordner ablegt.

cu
Chris

Betrifft: Großen Dank
von: Steve
Geschrieben am: 25.09.2020 08:32:48

Moin ihr beiden,

ich danke euch für eure Beiträge. Damit kann ich gut arbeiten.

Dein letzter Absatz Chris ist übrigens extrem anschaulich. Damit hast du mir im Grundsatz geholfen.

Und dein Beitrag Zwenn hat mich auch wieder eine gute Ecke weiter gebracht. Da hab ich wieder ein wenig "Bett"Lektüre. Ich werde nun versuche das mal entsprechend umzusetzen.

Derzeit arbeite ich nämlich an einer Datei die immer weiter wächst und ich habe mir überlegt die Makros in kleinere Teile zu zerlegen um mir ein wenig die Arbeit zu vereinfachen.

Ich bin gespannt wie weit ich komme.

Liebe Grüße

Steve