Excel 2013 VBA Grundkurs

Optionale Parameter

Testen Sie unsere 2011 Kurse

10 Tage kostenlos!

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

Transkript

Bisher war es so, dass wir nur notwendige Argumente eingebaut hatten, sowohl in Sub-Prozeduren, als auch in Functions. Das heißt, diese Argumente mussten immer bedient werden. Notfalls mit einem Leerstring, also für Zeichenketten - Gänsefüßchen auf, nichts schreiben, Gänsefüßchen zu. Der Form halber steht da was drin, dem Inhalt nach - nichts. Das geht natürlich auch anders. Sie kennen das ja schon von fertigen Funktionen oder Prozeduren, die können optionale Parameter anbieten, die man also nicht bedienen muss. Dann gibt es häufig Standardwerte. Das will ich auch machen, und zwar für die Meldung, weil das so schön praktisch ist. Also, ich erfinde eine neue Prozedur Sub MeineMeldung, die erstens strText As String benutzt und zweitens strTitel As String, außerdem. Soweit, so langweilig, und soweit unterscheidet sich es auch noch nicht von dem bisherigen. Was sich jetzt ändert, ich möchte, dass der Titel optional sein darf. Das bedeutet, erstens nur, dass hier das Schlüsselwort Optional davor kommt. Optional kann nur bei den letzten Argumenten stehen. Das heißt, dahinter kann kein zwingendes Argument mehr kommen. Sie können mehrere notwendige Argumente haben. Sie können dahinter auch mehrere optionale haben, aber die immer nur am Schluss. Und Optional ist das Argument, weil ich es eventuell leer lassen will. Und wenn das leer ist, dann soll da einfach meine Meldung drüber stehen. Nun da geht es jetzt das Problem los, ich muss rauskriegen, ob dieses Argument überhaupt leer ist. Und das geht mit dem Datentyp String nicht. Ich muss also verändern auf Variant. Ich schreibe das ganz ausdrücklich hier, vor allem auch in der Bezeichnung der Variablen, des Parameters. Und dann kann ich nämlich prüfen. Erstens, mit If, eine Abfrage, eine Entscheidung. Und es gibt eine Funktion, die heißt IsMissing, Klammer auf (der übergebe ich das Argument), Klammer zu. Then, diese Funktion antwortet mit True oder False. Und ich schreibe erstmal das Else komplett hin, damit Sie es auch einmal sehen. If, irgendeine Bedingung, Then - ist die erste Zeile. Else - keine weitere Bedingung. Und End If. Damit ist der Form genüge getan, alles was jeweils dazwischen passiert, steht hier und auch wieder eingerückt. Und hier ganz banal eine Message Box. Die soll den strText von oben übernehmen. Da können wir ruhig mal vbInformation (das ist so ein kleines Info I im Bild) anzeigen. Und anschließend soll, da es keinen eigenen Titel gibt, der Text "Meine Meldung" drüber stehen. An Anfalls soll auch eine Message Box erscheinen, auch mit dem strText, auch vbInformation, meinetwegen. Aber es soll der Titel übernommen werden, der aus dem Argument kommt. Technisch gesehen, könnte der leer sein, nicht nur Leerstring - Gänsefüßchen auf, nichts schreiben, Gänsefüßchen zu - sondern viel schlimmer Null, nichts drin. Null ist weniger als leer. Das ist, wenn Sie sich das so vorstellen wollen mit einem Obstkorb, wenn er auf der Anrichte steht. Das Wort (ich schreibe es unten mal so hin), das Wort "Obst" entspricht dem Obstkorb mit Inhalt. Es ist eine Zeichenkette mit einem Text. Wenn Sie das weglassen, haben Sie einen Leerstring. Das ist so zu sagen, der Obstkorb, ohne das da was drin liegt. Aber anhand des Obstkorbs kann man sagen, was da reingehört. Und anhand des Leerstrings kann man sagen, dass da eine Zeichenkette reingehört. Wenn Sie das weglassen, das wird gelegentlich auch so zu sehen sein. Manchmal ist es auch als Konstante vbNull. Deswegen spreche ich das immer schon Englisch aus, dass es nicht mit der Null verwechselt wird. Null ist gar nichts, da ist auch der Obstkorb weg. Da ist bestenfalls noch eine staubfreie Stelle auf der Anrichte. Aber da könnte stattdessen auch eine Flasche Wein gestanden haben. Also, Null ist weniger als Nichts und das ist ein Problem. Wenn Sie hier nämlich ein Nichts, ein Null übergeben bekommen, dann mag die Message Box-Prozedur das nicht. Die erwartet hier nämlich einen String. Und ich muss darauf achten, dass da auch einer ankommt. Deswegen gibt es einen kleinen Trick an der Stelle. Was immer da steht, wird verkettet mit einem Leerstring, da ist er wieder. Und das bedeutet: beides zusammen wird garantiert ein String. Null verkettet mit dem String, selbst mit dem Leerstring, hat den Datentyp String. Und damit kann mir hier nichts passieren, es ist mindestens ein Leerstring. Ja, dann sollten wir das mal testen. Also, da es eine Prozedur ist ohne Fragezeichen, einfach MeineMeldung: "Der Text". Und Sie sehen jetzt auch in dem Quick Info, in eckigen Klammern, nämlich optionale Argumente, das zweite Argument. Das werde ich einfach mal weglassen. Wenn ich dann mit Return bestätige, dann steht hier "Meine Meldung" drüber. Dann mit OK, damit ich weiter arbeiten kann. Und jetzt der zweite Versuch, ich gebe das zweite Argument an. Da schreibe ich mal einfach nur "Titel" rein. Und wenn ich das mit Return bestätige, dann wird entsprechend hier oben auch "Titel" angezeigt. Das ist die offizielle Funktion, es funktioniert, ist nett, aber mühsam. Und zwar mühsam, weil Sie erstens hier diese IsMissing-Funktion testen müssen. Also, eine extra Zeile brauchen If und End If. Und zweitens, weil Sie in zwei Zeilen schreiben müssen, wofür nämlich eigentlich nur eine notwendig ist. Ich werde die Zeile mal kopieren, der Rest wird so kurz, das lohnt sich kaum. Muss es natürlich neu benennen: Sub MeineMeldungBesser. Und jetzt brauche ich nur diesen Teil. Bis hierhin wäre das weit entfernt von Optional. Aber das Optional hat noch eine andere Möglichkeit das zu schreiben. Und zwar, werde ich hier direkt wieder auf String-Datentyp wechseln. Damit ist im Grunde auch unten der Teil überflüssig, ich müsste keinen Leerstring mehr dranhängen (kann man auch weglassen). Soweit ist es erstmal verschlechtert. Ich kann mit IsMissing nicht prüfen, weil es ein Datentyp String ist. Das funktioniert nur mit Variant. Aber der Trick ist: ich kann hier ein Standardwert vorgeben. Das bedeutet, die Funktion, oder die Prozedur in dem Fall, bemerkt schon, dass der Parameter nicht gefüllt ist und füllt ihn sofort mit diesem Standardwert. Ich kriege hier also entweder automatisch meinen Standardwert oder das, was später im Aufruf drin stand. Und das macht es bedeutend kürzer. Ich werde also hier umschalten auf MeineMeldungBesser. Das ist noch mit meinem eigenen Wert. Da steht mein eigener Wert. Jetzt lasse ich den zweiten weg und da kommt "Meine Meldung". Funktioniert einwandfrei und der wesentliche Trick ist, dass hier für optionale Parameter, und nur für die, ein Standardwert angegeben werden kann, der Ihnen diese ganze Konstruktion hier erspart. Oft steht da ja mehr, als nur diese eine Zeile, die sich da nur in diesem und jenen Eckchen unterscheidet. Das ist viel eleganter, wenn man das in einer einzigen Zeile schafft. Also, der Aufruf ändert sich überhaupt nicht, aber die Schreibweise Optional muss das letzte, oder einst der letzten Argumente sein. Und wenn Sie es bequem machen wollen, dann nehmen Sie direkt den richtigen Datentyp und hängen dort Ihren Standardwert dran. Der kann ja zur Not auch ein Leerstring sein, wenn es sein muss.

Excel 2013 VBA Grundkurs

Holen Sie aus Excel 2013 mit der integrierten Programmiersprache VBA auch das letzte Quäntchen an Funktion heraus und lassen Sie sich dazu zeigen, was alles möglich ist.

6 Std. 18 min (63 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!