Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Excel 2016 VBA Grundkurs

Optionale Parameter

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Parameter können bei Bedarf auch weggelassen werden, wenn das beim Schreiben des VBA-Codes übersichtlicher oder praktischer ist. Solche Parameter müssen Sie dann bei deren Deklaration als optional kennzeichnen.

Transkript

Bisher war es so, dass alle Parameter, die ich in meinen Prozeduren vereinbart habe, zwingend waren. Aber Sie kennen das vielleicht auch schon aus Funktionen oder Prozeduren, die Sie innerhalb von VBA benutzt haben, dass es dort auch optionale Parameter gibt, also solche, die man eventuell weglassen kann. Bei der Message Box beispielsweise, ist nur der erste Parameter, der so genannte Prompt mit dem eigentlichen Text, notwendig. Die anderen, zum Beispiel die Symbole, die angezeigt werden oder der Titel, sind optional. Und so etwas können Sie auch selbst programmieren. Ich mache das genau an dem Beispiel dieser Message Box. Ich erfinde wieder meine eigene Message Box. So etwas Ähnliches hatte ich schon einmal gemacht, hier für meine Standardmeldung. Da übergebe ich einen Text und der wird dann hier eingebaut. Das können wir eigentlich direkt kopieren, das ist so ähnlich, das lässt sich nutzen. Ich habe hier schon ein neues Modul gemacht wegen der Übersicht, füge das ein, aber ich werde das natürlich nicht gleichnamig nennen. Technisch ist es erlaubt, in zwei Modulen gleichnamige Prozeduren, faktisch ist es furchtbar. Ich kann jetzt also hier eine Message Box machen, die im Moment den Standardtitel bekommt. So weit nichts Neues. Was ich aber möchte ist, dass ich diesen Titel, der hier drüber steht, unterschiedlich haben kann. Ich möchte jetzt also hier einen zweiten optionalen Parameter angeben. Wenn ich ihn weglasse, kommt mein Standardtitel, wenn ich ihn schreibe, steht mein Titel da. Und der Unterschied zu einem normalen Parameter, bei dem ich jetzt schreiben würde: StrTitel As String, der ist zwingend. Der Unterschied ist, dass Sie davor das Schlüsselwort "Optional" schreiben. Allerdings muss ich dann abfragen können, ob in diesem Parameter etwas drinnen steht. Das geht bei String Parametern nicht, die müssen variant sein. Also mach ich daraus erstmal einen Variant Parameter. Dann muss ich das, was darin steht prüfen. Das geht mit einem If und einer VBA Function. Also If und diese Function heißt "is missing". Klammer auf, dann übergebe ich welche Variable dass ein soll, Klammer zu. Then. Diese Function antwortet mit True oder False und deswegen kann ich die hier einfach so hier benutzen, wenn ich dem If schon einmal vorgreifen darf. Da kommt wegen der Struktur schon ein Else und ein End If rein, und die Zeilen dazwischen werden üblicherweise eingerückt, und dort kann ich jetzt ergänzen, dass in diesem Fall varTitel benutzt werden soll. Die Idee ist also: ich habe hier einen optionalen Parameter. Wenn der ausgefüllt ist, dann kommt is Missing zu dem Ergebnis False, ich bin in Ordnung, ich bin ausgefüllt, dann springt der Code in den Else Zweig und schreibt das dran, was im varTitel drin steht. Wenn das Argument fehlt, dann wird diese Konstante benutzt. Es gibt noch eine Besonderheit, was Variant betrifft. Variant könnte nicht nur leer, sondern auch besonders leer sein. Das ist immer ein bisschen schwierig zu erläutern. Ich nehme da beispielhaft einen Obstkorb, der auf einer Anrichte steht. Ich schreibe das hier unten einmal schnell hin. Das ist symbolisch der Obstkorb. In VBA ist das eine Zeichenkette mit einem Inhalt. Wenn Sie diesen Obstkorb leer machen, dann ist das in VBA ein so genannter Leerstring, Zeichenkette ohne Inhalt, aber Zeichenkette. Das heißt der Obstkorb auf der Anrichte sagt: wenn hier etwas hinein kommt, dann bitte nur Obst. Und damit ist für VBA klar, wenn hier etwas reinkommt, dann kann es nur eine Zeichenkette sein. Variant erlaubt aber auch, das was als "Null" bezeichnet wird. Der Obstkorb ist weg, da ist nur noch ein Fleck auf der Anrichte. Und damit wissen Sie nicht mehr was dort hin gehört. Dort könnte ja auch eine Flasche Wein gestanden haben. Genau das ist es in VBA auch. Da ist nicht nur ein leerer String, sondern dort ist gar nichts. Und Sie werden gelegentlich den Begriff "Null" hören, den ich auch immer schon in Englisch ausspreche, damit der von der Zahl Null zu unterscheiden ist. Null ist ein Zustand, der ist sozusagen gar nichts. Das ist kein Zustand, sondern eine klar definierte Zeichenkette, auch wenn sie leer ist. Wenn diese weg ist, ist es weg, richtig Vakuum sozusagen. Und das ist das Problem hier oben: varTitel könnte wegen Variant komplett leer sein, Null. Die Message Box erwartet aber in diesem dritten Argument für den Titel immer einen String. Und wenigstens einen Leerstring. Deshalb gibt es einen kleinen Trick, ich hänge dort verkettet einen Leerstring dran, was zur Folge hat, dass das ganze Ding im Ergebnis immer ein String wird. Selbst wenn varTitel Null ist, wird die Verkettung von Null und Leerstring immer ein Leerstring sein. Das ist die bequemste Art, das mal eben auszubessern und es muss Variant sein, weil sonst diese Is Missing Funktion nicht funktioniert. Das Ganze sollten wir Erstens speichern und dann Zweitens mal testen. Ich werde die hier unten einfach mal testen, meine Meldung, Strg Leertaste, Leerzeichen, Sub Prozeduren werden ja mit Leerzeichen zu den Parametern als Trennung aufgerufen. Jetzt kommt mein beliebiger Text und ich lasse das zweite Argument weg. Sie sehen schon im Quickinfo hier unten, es hat eckige Klammern, das bedeutet immer optional, kann ich weglassen und wenn ich das hier ausführen will, drücke ich jetzt einfach Return dann wird genau das ausgeführt. Hier ist mein beliebiger Text und da oben steht diese Konstante, die er erkannt hat, Is Missing. Ich muss also die Konstante nehmen. Funktioniert wunderbar. Jetzt müssen wir das Andere auch noch testen. Also ich gebe jetzt den zweiten Parameter wirklich mal an. Wiederum mit Return, dann steht dort oben mein Titel. Hat alles perfekt funktioniert, ist auch soweit in Ordnung, so ist es sozusagen offiziell dokumentiert. Aber es ist langweilig, es ist kompliziert. Sie haben einen 5 Zeilen Code und bräuchten nur eine. Denn tatsächlich unterscheidet sich das ja nur an dieser einen einzigen Stelle. Es ginge mit einer anderen If Konstruktion, da wird es hier hinten noch deutlich länger, das macht es auch nicht schöner, aber der Knackpunkt ist hier oben dieses varTitel As Variant. Das geht besser. Deswegen werde ich diese Zeile einfach mal kopieren und nach unten schreiben. Der Rest ist kurz, das wird gleich schneller, neu schreiben und dort kommt wieder ein strTitel As String hinein. Sozusagen erstmal wieder die Verschlechterung. Mit Return wird der Prozedur-Rumpf erstmal komplettiert und jetzt brauche ich eigentlich nur diese Zeile hier. Also kopieren und hier einfügen, aber eingerückt und ich muss natürlich aufpassen, denn hier heißt es auch wieder strTitel. Jetzt fragen Sie sich wahrscheinlich wie das funktionieren soll. Hier ist es optional und woher soll denn hier die Konstante herkommen? Die schreibe ich hier oben hinein. Das ist nämlich die Besonderheit von diesen Optionalen. Optionale Parameter können direkt einen Standardwert bekommen und den schreibe ich dort oben direkt hin. Das heißt die Prozedur merkt beim Aufruf schon, hier steht nichts drin, dann nehme ich also meinen Standardwert und ansonsten nehme ich das, was hier übergeben wird. Tatsächlich können Sie das sogar hier weglassen, das war ja nur die Notbremse, falls da ein Null drin steht. Es kann kein Null mehr drin stehen, weil das ein String Datentyp ist und der mindestens ein Leerstring ist. Jetzt versuchen wir diesen nochmal. Da darf natürlich keine gleichnamige Prozedur entstehen, sonst bekommen Sie direkt mit kompilieren schon eine Fehlermeldung. Ist alles in Ordnung. Hier muss ich natürlich auch mit Strg Leertaste ergänzt, die neue Version nehmen. Nun probieren wie erstmal die neue Fassung mit Titel, also mit dem Return, sieht genau aus wie eben, mein Text, und wenn er denn benutzt wird, der Titel. Jetzt lasse ich den optionalen Parameter wieder weg, mit Return bestätigt und da ist jetzt wieder die Konstante. Es ist also bedeutend kürzer, wenn Sie nicht die offizielle Variante nehmen, optional muss in beiden Fällen drinnen stehen aber As Variant, um hier prüfen zu können und sich damit noch zusätzlichen Ärger einhandeln, weil es ein Null sein könnte, sondern wenn Sie gleich den Standardwert hier oben hineinschreiben und schlechtestenfalls machen Sie wenigstens einen Leerstring. Wenn Sie sagen, ich weiß nicht was dort sonst stehen soll, dann ist das auch in Ordnung. Aber ansonsten würde ich gleich einen Wert empfehlen, den können Sie natürlich auch in Zeichenkette schreiben, wenn Sie einen anderen Text haben wollen. Sie sorgen vor allen dafür, dass der Standardwert hier oben schon drinnen steht, dann müssen Sie sich da unten nicht mehr drum kümmern. Und ganz ehrlich, Is Missing ist mühsam, wegen Variant, schreiben Sie lieber gleich den richtigen Datentyp hinein.

Excel 2016 VBA Grundkurs

Lassen Sie sich systematisch in die Excel-Programmierung mit Visual Basic for Applications (VBA) einführen.

7 Std. 25 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:30.08.2016
Laufzeit:7 Std. 25 min (66 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!