Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Excel 2016 VBA Grundkurs

Datei-öffentliche Variablen

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Manche Variablen, etwa ein Benutzername oder dessen Rechte, sollen in allen Prozeduren aller Module nutzbar sein. Dann ist es notwendig, diese Variablen Datei-öffentlich zu machen.

Transkript

Diese Variablen hier sind Modul-öffentlich, das bedeutet, sie stehen am Anfang eines Moduls mit dem Schlüsselwort Dim. Sie sind also nur in diesem Modul zu sehen und zu nutzen. Ich will jetzt eine Stufe höher, weiter, öffentlicher, nämlich Datei-öffentlich. Das bedeutet nicht zwingend, dass ich das in einem eigenen Modul machen muss, aber Sie werden früher oder später merken, wenn Sie große Programme schreiben, dann haben Sie einige Datei-öffentliche Variablen, und übrigens auch Konstanten, zum Beispiel über den Benutzer, wie heißt er, welche Rechte hat er, was brauchen wir sonst noch an Zusatzinformationen. Das sind Daten an die Sie in jedem Modul möglicherweise rankommen müssen, und ich habe mir angewöhnt dort ein eigenes Modul anzulegen, in dem nur die Deklaration von Variablen und Konstanten, und übrigens auch DLLs - dynamic link libraries, fremde Windows Funktionen sozusagen, stehen und das trägt bei mir diesen etwas eigenwilligen Namen modVarKonstDLL, dann weiß ich, da stehen alle Datei-öffentlichen Variablen, Konstanten und DLLs. Und dort heißt das Schlüsselwort nicht mehr Dim, denn ich bin hier genauso am Anfang eines Moduls, sondern public. Und deswegen kennzeichne ich diese Variable auch mit einem p_, im Gegensatz zu Modul-öffentlichen mit m_, und dann kommt, wie üblich, Ungarische Notation, es wird ein String, nämlich strBenutzerName As String, das ist der eigentliche Datentyp. Public sorgt also dafür, dass es eine Datei-öffentliche Variable ist, und nicht nur innerhalb dieses Moduls. Und, da können wir ruhig schon mal eine Zweite ergänzen, dann will ich vielleicht noch zu dem Benutzer sein Geburtsdatum wissen, also BenutzerDatumGeburt As Date, natürlich dann, also auch hier darauf achten, dass der Datentyp entsprechend angepasst wird. Das sind jetzt zwei public Variablen, also Datei-öffentlich. Das kann ich schon mal speichern. Und, typischerweise steht bei mir in diesem Modul nichts drin, außer Deklarationen, keine Functions, keine Subs, das wäre technisch möglich, macht es aber nicht unbedingt übersichtlicher. Und um deutlich zu zeigen, wie public die sind, mache ich jetzt ein neues Modul, das nennen wir vielleicht mal modStartwerte, da wird alles am Anfang erfragt was man wissen muss, also eine Sub FrageNamen. Das würde man natürlich ein bisschen kompakter machen, nicht alles einzeln erfragen. Aber, ich kann jetzt hier sagen p_ und das ist eine Public-Variable, wenn jetzt mit Strg+Leertaste keine angeboten wird, dann ist sie nicht public. Die IntelliSense-Listen wissen, ob sie hier sichtbar sein darf. Nur um Ihnen das eben zu zeigen, mit m_ darf hier nichts erscheinen, die Modul-öffentlichen stehen in anderen Modulen, also nur mit p_, aber dann natürlich der BenutzerName. Und da können wir mal einfach irgendwen fragen, beispielsweise meinen Benutzer selber. Die InputBox ist geeignet, das ist eine Function, die eine Frage stellen kann, und dann eine Frage als Prompt liefert, der Rest ist egal, es reicht also hier ein Parameter, wenn Sie das so schreiben, und damit ist das zugewiesen. Und damit Sie deutlich sehen, dass das tatsächlich in einem anderen Modul ausgelesen werden kann, mache ich ein neues Modul, das nennen wir dann vielleicht mal modErgebnisse, und hier kann ich jetzt als einziges die Prozedur schreiben sub Zeige den Namen oder so was, und die macht nichts anderes als debug.Print, von dieser Public-Variablen, aber natürlich von dieser. Und damit Sie deutlich sehen, dass er was schreibt, kann ich ruhig davor schon mal schreiben, was denn da ausgegeben wird, also sagen wir Benutzername: " Leerzeichen innerhalb der Gänsefüßchen, sonst verschwindet es, und hier verkettet mit dem eigentlichen Inhalt. Und jetzt probiere ich das sozusagen gezielt erst mal falsch rum, wir haben eine Variablen Deklaration hier, von der brauche ich nichts, außer dass sie da ist. Wir haben die Startwerte hier, und die Ergebnisse dort. Und ich frage jetzt zuerst die Ergebnisse ab, also F5 oder da, deswegen habe ich Benutzername davor geschrieben, Sie sehen es gibt noch kein Ergebnis. Trotzdem ist das technisch, syntaktisch schon in Ordnung. Jetzt mache ich bei den Startwerten zuerst diese Prozedur mit F5, da werde ich gefragt, gebe irgendwas an und nach dem OK, davon sehen Sie ja nichts, jetzt kann ich, Jahrhunderte später, dieses hier starten, und ich kann das gerne unten löschen, dann sehen Sie es ganz deutlich, da ist noch nichts, kann es jetzt also mit F5 starten, und Sie sehen, jetzt ist der Wert drin. Über mehrere Module hinweg, deklariert in VarKonstDLL, ermittelt in Startwerte und ausgegeben in Ergebnisse. Das ist die äußerste, die umfangreichste Form der Öffentlichkeit. Die sollte man wirklich nur möglichst selten benutzen, denn sie hat genau dies Problem, dass jede Prozedur aus jedem Modul beliebig drauf zugreifen kann, deswegen bin ich unter anderem auch so pingelig dass ich bei Modul- oder Datei-öffentlichen Variablen, so eine Kennung davor schreibe. Falls Sie das nicht machen, kann ich Ihnen sicher versprechen, dass Sie irgendwann so etwas schreiben wie: Sub DasIstRiskant, und dann steht hier dim p_strBenutzername As String. Oder ich mache es noch mal deutlicher wie es meistens gemacht wird, also hier erfinde ich eine neue, die nenne ich nur einfach strTest As String, und in den Ergebnissen mache ich dann hier ganz ahnungslos, strTest As String und ein debug.Print strTest. Sieht alles gut aus. Aber, diese lokale Variable überdeckt die öffentliche. Wenn Sie also irgendeine Prozedur schreiben, die dieser öffentlichen Variablen, dieser Datei, oder auch Modul-öffentlichen Variable einen Wert zuweist, und dann in irgendeiner beliebigen Prozedur eine gleichnamige machen, dann ist innerhalb der Prozedur nur die lokale Variable zu sehen. Also, Sub DasIst DerOeffentlicheWert, da schreibe ich jetzt mal Debug.Print strTest, und das ist nicht nur Riskant, sondern der lokale Wert. Damit Sie sehen, wie das funktioniert, DasIstDer LokaleWert, alles in dieser Camel-Schreibweise, "Kamel"-Schreibweise. Also, keiner von den Beiden ist in irgendeiner Form zugewiesen worden, das passiert hier, Sub WertZuweisen, und da schreibe ich jetzt strTest, Sie sehen, die steht in der IntelliSense-Liste, "Ich bin der öffentliche Wert". Und das Risiko besteht darin, dass Sie dieser Variablen das nicht mehr ansehen können. Also, ich werde dieser öffentlichen Variablen einen Wert zuweisen, da unten mal aufräumen, und jetzt können Sie sehen, hier, der öffentliche Wert mit Debug.Print, alles super - da ist er! Ich nehme ihn wieder weg, und jetzt kommt das Fehlerhafte, ich habe hier leider eine gleichnamige Variable benutzt, und wenn ich jetzt das ausführen lasse, sehen Sie nichts. Lokal deklarierte Variable in String enthält zum Start den Leerstring, und überdeckt diese öffentliche Variable, wenn ich das hier rausnehme, kann die gleiche Prozedur wunderbar den öffentlichen Wert anzeigen, nur sobald Sie die Variable hier benutzen, haben Sie verloren. Und das ist das Gefährliche, deswegen werde ich das direkt mal wieder alles weg machen, wobei ich sie nicht wirklich lösche, sondern ich mache hier mit Rechtsklick eine spezielle Symbolschaltfläche auf, nämlich diese hier, die ich mit Blog auskommentieren für alle markierten Zeilen anwenden kann. Also, das ist extrem riskant, und deswegen sollte ich das auch da drüben, hier - 'Achtung, das ist eine datei- öffentliche Variable ohne, ich schreibe mal dazu "p_"Kennzeichnung! Das ist Sehr riskant! Würde ich nicht machen, ich habe schon zehntausend Zeilen Code mit so was gesehen, und da waren einige hundert solcher Fehler drin, und an denen verzweifelt man hinterher, und denkt sich, ich habe da doch eine Variable, warum kriege ich den Inhalt nicht? Sollten Sie sich also nicht erst angewöhnen, und deswegen werde ich die auch hier kommentieren. Wenn Sie Datei-öffentliche Public-Variablen machen, dann sollten Sie die auch dringend als p_, oder wie auch immer kennzeichnen, und die sind dann überhaupt nur erkennbar, und nebenbei ja auch durch IntelliSense leichter zu finden.

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!