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

Lokale Variablen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Eine Variable sollte immer den kleinstmöglichen Gültigkeitsbereich und damit die geringste "Sichtbarkeit" haben. Das schützt Ihren Code davor, dass Variablen versehentlich von anderen Prozeduren verändert werden.

Transkript

Ich möchte jetzt eine lokale Variable einrichten. Das kann innerhalb dieses Moduls sein, es muss innerhalb einer Prozedur sein. Und das ist jetzt einfach so ein bisschen Organisation und Aufräumen und Überblick, ich kann in einem Modul beliebig viele Prozeduren machen. Aber es ist jetzt übersichtlicher, wenn ich diese Module schließe, also hier an dem unteren x nur das Fenster schließen, das ist jetzt noch das Modul Test, das will ich auch nicht benutzen, hier wäre Platz, aber ich fange einfach ein neues Modul an, und das heißt, da hier schon das richtige Symbol zu sehen ist, ich hab das bereits einmal aufgerufen, kann ich direkt da draufklicken. Und das kann ich einfach umbenennen, ich klicke hier nur auf die Name-Eigenschaft und darf dann losschreiben, modVarLokal nenne ich das einfach, bestätige das mit Return, und dann weiß ich, das sind lokale Variablen, die wird es woanders auch noch geben, aber dies ist speziell das Modul, um das zu zeigen. Damit die Variablen lokal sind, müssen sie innerhalb einer Prozedur stehen. Ich werde jetzt, mit einem bisschen Abstand für die Optik nur, eine neue Prozedur erfinden, also erst das Schlüsselwort Sub, und dann kommt der völlig beliebige Prozedurname, ich werde sie jetzt Test01 nennen, in Normalfall sollten Prozeduren natürlich sprechend benannt sein, hier gibt es nicht viel zu sprechen, das ist nur ein Test, und mit dem Return wird dann der Rest der sogenannten Signatur ergänzt, also hier die Klammern ohne Parameter und das End Sub. Dann rücke ich mit der Tab-Taste wieder ein, und jetzt erfinde, deklariere, bezeichne ich diese Variable. Das Schlüsselwort ist ja dim, das bedeutet im Grunde dimensionieren, um Platz im Speicher zu schaffen, aber es wird trotzdem als deklarieren bezeichnet. Also dim, jetzt kommt der Name, und das mache ich entsprechend der Ungarischen Notation, also der Datentyp in diesem Fall, der Typ des Objekts nämlich, der Datentyp wurde vorangestellt, üblicherweise drei Buchstaben aus einer englischen Abkürzung, da es eine Integer-Variable ist, wähle ich jetzt also int, und dann den eigentlichen Namen sozusagen ergänzen. Wenn ich das so schreibe und lasse, wäre es eine Variant-Variable. Das will ich gar nicht, das soll gezielt eine Integer sein, sonst sollte ich sie auch nicht mit int benennen, also ergänze ich as Datentyp, und Sie merken schon, ich schreibe erstens alles klein, außer meinem Variablennamen, alle Schlüsselwörter klein, und sobald ich weit genug geschrieben habe, jetzt nämlich, steht da schon der richtige Vorschlag. den kann ich mit Tab-Taste übernehmen, ich habe mir angewöhnt, immer die Tab-Taste zu nehmen, Tabulator, obwohl ich hier tatsächlich hätte mit der Return-Taste auswählen können, weil ich sowieso ein, genau genommen sogar zwei neue Zeilen, brauche. Ich mache zwischen der Deklaration einer Variablen, das können ja durchaus einige davon sein, und dem eigentlichen Code immer eine Leerzeile Abstand, das finde ich übersichtlicher, für die Funktionalität ist es egal. Tatsächlich dürfen Sie sogar mitten im Code neue Variablen deklarieren, aber ich sag mal ganz ehrlich, das gehört sich nicht, das ist unübersichtlich, das ist so, wenn Sie Ihr Zimmer nicht aufräumen, und alle Sachen irgendwo hinwerfen, die sind da und irgendwann wird man sie finden, aber eigentlich haben alle Sachen ihren Platz, und Variablen-Deklarationen haben ihren Platz ganz vorne im Code. Damit man einmal übersichtlich sieht, welche Variablen benutzt werden, und nicht überraschend zwischendrin im Code nochmal eine deklariert wird. Diese Variable kann ich jetzt benutzen, und das ist genauso wieder mit IntelliSense, also dieser Ausklappliste, wenn ich jetzt mit intt anfange, und mit Strg+Leertaste erzwinge, dass der VBA-Editor nach dem passenden Wort sucht, dann wird dieses Wort als einzig mögliches erkannt, wenn ich zu wenig geschrieben hätte, ich schreibe nur mal - in und drücke jetzt Strg+Leertaste, dann klappt die Liste aus, weil es mehrere gibt, die mit in anfangen. Jetzt muss ich nur weit genug tippen, alles was mit int- anfängt und alles was mit intt- anfängt, und kann jetzt mit Tab-Taste das ergänzen lassen. Die kriegt einen neuen Wert zugewiesen, also völlig beliebig jetzt, 123, und wenn ich die Zeile jetzt verlasse, dann wäre der Code eigentlich komplett. Der würde wunderbar durchlaufen, wir können das gerne mal eben testen, erst speichern, dann testen - Sie haben es vielleicht gesehen, dass Sie nichts gesehen haben, der ist gerade durchgelaufen, die Variable wird deklariert, ihr wird ein Wert zugewiesen, und das war es dann. Am Ende dieser Prozedur ist diese Variable ja wieder weg, lokal deklarierte Variablen enden mit dem Ende der Prozedur, und sie haben zwischendurch leider nicht nachgeguckt, was drinsteht. Das ist das, was ich jetzt also noch nachreichen möchte, es funktioniert alles, es merkt nur keiner, ich werde jetzt das Direktfenster anzeigen lassen, dessen Name immer mal wieder wechselt, im Menü heißt es Direktfenster, Ansicht Direktfenster, wobei ich In der Überschrift heißt es Direktbereich, und eigentlich wird es als Debug-Fenster oder Debug-Window bezeichnet, und deswegen heißt der Befehl, um dort reinzuschreiben, auch Debug. und das ist schon eine weitere Bequemlichkeit innerhalb des VBA-Codes, die typischen Befehle mit ihren Unterbefehlen, haben einen Punkt als Trenner dazwischen, und sobald Sie den Punkt anklicken, werden zu dem links davon stehenden Oberbefehl sozusagen, dessen Möglichkeiten angezeigt. In diesem Fall nur zwei, ich gehe jetzt also auf p, bestätige mit Tab, und dieser Befehl meint nichts anderes, als im Debug-Fenster reinzuschreiben. Print ist eine sehr englische Formulierung, also es wird nicht ausgedruckt, sondern es wir hier reingedruckt sozusagen, und zwar das, was ich nach einem Leerzeichen jetzt angebe, und dort will ich diese Variable im Test sehen, Strg+Leertaste, damit sie komplettiert wird, und es wird natürlich nicht der Name im Test angezeigt, sondern der Inhalt. Das können wir uns jetzt angucken, also nach dem Speichern einmal laufen lassen, oder direkt F5, wenn der Cursor da drin steht, und da sehen Sie, eins, zwei, drei angezeigt. Lokale Variablen werden am Anfang der Prozedur deklariert, beliebig oft benutzt und verändert, und wenn Sie wollen, irgendwo ausgedruckt, was auch immer Sie damit machen möchten. Das geht natürlich auch in einer zweiten Prozedur, nur um es deutlich zu machen, die heißt genauso lieblos Test02, und da kann ich jetzt auch wieder debug.Print inttest schreiben, und Sie sehen schon die erste Überraschung, wenn ich Strg+Leertaste drücke, die ist nicht in der Liste, das irritiert die meisten nicht, ich sehe sogar extrem viele, die erwischt man nämlich einfach mit ihren Schreibfehlern, ich sehe extrem viele Programmierer, die dann sagen, ach, macht doch nichts, ich lass diese IntelliSense-Listen weg, die habe ich ja schnell getippt, verlassen die Zeile, und gegen alle Regeln, müsste ich jetzt eigentlich sagen, wird sogar der Großbuchstabe erkannt. Obwohl diese Variable nicht in der Liste stand, hat sie die gleiche Schreibweise, Damit Sie ganz deutlich sehen, was jetzt passiert, und vor allem, was jetzt nicht passiert, werde ich diesen Direktbereich hier leer machen, und kann jetzt hier F5 oder dies grüne Dreieck drücken, und wie Sie sehen, sehen Sie nichts. Jetzt kann man sich natürlich fragen, warum eigentlich nicht? Im Test ist doch deklariert, ja, aber leider hier oben. Jetzt könnte ich natürlich hingehen und sagen, na ja, gut, wenn das hier unten dann nicht funktioniert, ich mache das mit gedrückter Steuerungstaste jetzt, habe das ja herunter kopiert, der Schönheit halber in eine Leerzeile, dann deklariere ich das eben noch mal, das hätte nebenbei den Vorteil, wenn ich jetzt soweit komme, und Strg+Leertaste drücke, dann ist die Variable ja auch tatsächlich in der Liste, fühlt sich gut an, und wenn ich jetzt nach dem Speichern das ausführe, dann sehen Sie immerhin ein bisschen was, nämlich eine Null. Eine Null sehen Sie deswegen, weil eine undeklarierte intTest-Variable den Datentyp Variant hat, und Variant ist, wenn nichts drin steht, empty, empty wird als nicht gefüllter Leerstring ausgedruckt. Wenn Sie deklariertes as Integer, also als irgendeinen Zahlendatentyp, dann hat sie ohne Wertzuweisung nach der Deklaration wenigstens den Wert null, und das ist, was Sie hier sehen. Wenn Sie einen Wert zuweisen, dann steht der nach der Zuweisung da drin, aber bis dahin ist es null. Und das ist das eigentliche Problem, es hilft nichts, die Variable nochmal zu deklarieren, das macht es nur noch ganz besonders deutlich, das sind zwei völlig unterschiedliche Variablen. Ich müsste genau genommen sagen, dieses ist intTest von Test01, und dieses ist intTest von Test02. Und ob ich die nun deklariere, oder das sträflicherweise sogar weglasse, ist egal, dieses ist eine Variable, die mit derjenigen hier überhaupt nichts zu tun hat. Lokal heißt, diese Variable wird in der Prozedur geboren sozusagen, und stirbt hier am Ende und ist weg. Wenn Sie zu einem beliebigen anderen Zeitpunkt diese Prozedur starten, hat diejenige Variable einen neuen Sichtbarkeitsbereich, die ist frisch geboren sozusagen, und hat mit der überhaupt nichts zu tun. Die kann noch so gleichnamig sein, sie ist eine getrennte Variable. Und bevor Sie das gerade als Nachteil empfinden, das ist ein Vorteil! Sie müssen nicht wissen, welche Variable Sie schon mal wo benutzt haben, und die versehentlich überschreiben, das ist nämlich die eigentliche Gefahr, sondern Sie können einfach eine Variable erfinden, und da Sie nur in diesem Geltungsbereich, nämlich hier mit dem intTest as Integer, am Anfang noch mit der Tab-Taste, dann bin ich irgendwo abgerutscht, wenn Sie also diese Variable hier deklarieren, müssen Sie sich nicht darum kümmern, ob es die woanders auch schon gibt, und Sie kommen sich nicht gegenseitig ins Gehege. Dieser kleine Schritt einer Extra-Deklaration ist ein enormer Fortschritt, für die Sauberkeit und vor allem Funktionsfähigkeit des Codes. Variablen, die innerhalb einer Prozedur deklariert sind, sind also lokal, und damit nur innerhalb der Prozedur sichtbar, und jede andere Prozedur, auch mit scheinbar gleichnamigen Variablen, hat eine eigene.

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
Erscheinungsdatum:30.08.2016

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!