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

Konkrete Datentypen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Anstatt eine Variable für einen ganz bestimmten Datentyp zu wählen, können Sie auch einen der "allgemeinen" Datentypen Variant oder Object einsetzen. Was sich zunächst wie ein Vorteil anhört, macht aber in Wirklichkeit das Programmieren viel mühsamer.

Transkript

Ich höre immer wieder, dass es doch sehr lästig sei, dass eine Variable richtig mit Datentyp deklariert werden muss. Deswegen möchte ich Ihnen hier zeigen, wie lästig es ist, wenn Sie das nicht machen. Ich schiebe dazu die Prozeduren ein bisschen nach unten. Die Reihenfolge ist ja egal. Und erfinde eine neue Prozedur, sub TesteVariant(). Die macht nichts anderes als so ein Variant-Datentyp als Variable zu benutzen. Das bedeutet ich schreibe hier: Dim strBenutzer, aber natürlich in möglicher Kleinschreibung, As Variant. Sie haben Recht, As Variant könnte ich weglassen, das ist der Standard, wenn man es nicht schreibt, aber so weiß ich explizit, ich meine das so. Denn eigentlich ist es die Ausnahme, es gibt sehr wenige Anlässe, wo man explizit Variant braucht. Der Vorteil ist, ich kann jetzt schreiben hier: varTest ist gleich irgendeine Zahl und direkt hinterher kann ich es ausgeben und es wird funktionieren. Das können wir hier unten, der Direktbereich darf ein bisschen größer werden, direkt prüfen. Also einmal speichern, einmal laufen lassen, das steht die 123. Und die gleiche Variable, ich kopiere mir das direkt zweimal drunter kann ich für andere Datentypen benutzen. Ich kann also hier zum Beispiel, einen Text übergeben und die dritte Variante hier, einen Datumswert. Denken Sie daran, amerikanische Schreibweise, also erst den Monat, dann den Tag. Und wenn ich das jetzt ausführen lasse, also F5 oder hier, dann stehen die da brav untereinander. Seien Sie nicht überrascht, Zahlen haben hier im Debug-Fenster immer ein Leer-String davor, das ist für optionale Vorzeichen. Das ist kein Fehler, sondern das ist einfach so. Und wenn Sie genau drauf achten, sehen Sie sogar, obwohl das im VBA-Code in amerikanischer Schreibweise in Reihenfolge steht, wird es trotzdem in deutscher Reihenfolge ausgegeben, auch mit dem Punkt da. Das kommt aus der Systemsteuerung und soll jetzt hier nicht weiter interessieren. Jetzt können Sie natürlich zu Recht sagen: Warum dann die ganze Mühe mit dem Datentyp? Zum Beispiel, um Ihnen Fehler direkt im Code zu zeigen. Ich werde jetzt eine Variable erfinden, die die Anzahl, habe ich jetzt so erfunden, falsch benutzt. Also eine Variable Int Anzahl As Integer und dann versuche ich jetzt ziemlich gnadenlos dieser Variablen sofort einen falschen Datentyp zuzuweisen. Und es passiert nichts zur Schreibzeit, also auch beim Kompilieren nicht. Ich kann hier die beiden kompilieren, keine Fehlermeldung. Eigentlich hätte der Compiler das schon merken müssen, dass hier ein String an eine Integer-Variabel übergeben wird. Sehr gute Compiler können das, der hier nicht. Aber wenn ich das jetzt laufen lasse, gibt es sofort eine Fehlermeldung, ein Laufzeitfehler, wo er mir hier sagt: Der Typ ist unverträglich. Die sind alle durchnummeriert, meint der Datentyp. Und falls ich jetzt mit Debuggen drauf gehe, zeigt er mir auch die Zeile, wo das Problem ist. Und auch das muss ich hier wieder stoppen. Hier ist es sehr offensichtlich, aber oft steckt dieser String in einer Variablen oder in der Eigenschaft irgendeines Objektes. Und das bedeutet, ich merke schon zur Laufzeit sofort, es ist hier nicht irgendwie, was dumm gelaufen und wird schweigend übergangen, vom Code, sondern es ist dumm gelaufen und ich kriege sofort Bescheid. Ich weiß also wo ich mich kümmern muss. Viele Fehler sind ja Fehler, die man nicht mal bemerkt. Also die Anzahl ist eine Integer-Variable und wird keine String annehmen. Und der VAriant, haben Sie gesehen, macht das. Und wenn Sie anschließend versuchen mal zwei zu multiplizieren, dann nimmt er den Wert Null, der Wert den diesen String für eine Variant-Variable hätte und multipliziert das mit zwei. Und Sie wundern sich dann, dass da Null rauskommt, weil Sie vermuten, dass da ein Zahl drinnen ist. Solche Fehler sind ganz übel. Das ist der Vorteil für Variant. Variant als Zusammenfassung für Zahlen. Für Objektvariablen, das ist ja sozusagen der andere Variant, Objekte sind alles andere, sage ich jetzt mal vereinfacht, alles was in der Excel-VBA-Welt vorkommt außer Datentypen, zum Beispiel eine Zelle, eine Tabelle, ganze Arbeitsmappe, ein Diagramm oder was Sie selbst alles erfinden. Und deswegen möchte ich Ihnen zeigen, wie es ohne anständige Deklaration aussieht, also sub, nennen wir es einfach mal Zellinhalt, schlecht auslesen. Und da würde ich das Gegenstück zum Variant nehmen, das ist ein Object, also objZelle as Obj. Das ist so gut wie undeklariert, Object erlaubt alles ohne irgendwelche Prüfung. Und wenn ich hier eigentlich ein Let davor schreiben müsste, bei den einfachen Datentypen, kennt kein Mensch, macht offensichtlich auch keiner, müssen Sie auch nicht wissen, muss ich bei Objekt-Datentypen immer ein Set als Zuweisung dazuschrieben. Also Set objectZelle ist gleich und jetzt greife ich auf eine Zelle zu, ich mache es mal ganz banal mit active cell, das ist vordefiniert, das ist die Zelle in der ich mich befinde. Jetzt muss ich mal mit Alt F11 rüber in die Tabelle selber und hier schreibe ich auch irgendwas rein: Abc. Achten Sie darauf, dass wenn Sie es mit Return bestätigen, dass der Kursor nicht gerade einen runtergeht. Das ist also active cell. Mit Alt F11 wieder zurück und jetzt kann ich hier das auslesen, also debug.Print. Jetzt wüsste ich gerne, was in Objekt-Zelle steht. Dieses Wort, diese Variable ist ja deklariert und konnte ich noch mit Steuerung, Leertaste anzeigen, automatisiert ergänzen lassen. Jetzt kommt der Punkt und ich will wissen welche Fähigkeiten und Eigenschaften dieses Objekt hat. Und da gibt es keine. Jetzt muss ich aus dem Kopf wissen oder schwere Handbücher wälzen und herauskriegen, es gibt eine Value-Eigenschaft. Und mit F5 sehe ich: Aha, die funktioniert! Das steht unten jetzt Abc. Aber besonders hilfreich ist das nicht. Deswegen werde ich das jetzt anders machen, ich werde eine Kopie von dieser Prozedur machen und die ist... besser, man kann auch sagen, die ist gut. Jedenfalls sollte man so machen, nicht als Object, sondern vernünftig deklarieren und der passende Datentyp zu einer Zelle ist: Range, der Bereich. Eine Zelle oder viele Zellen, all das ist ein Range und deswegen sollte natürlich auch die Variable hier nicht Object-Zelle, sondern Range-Zelle heißen. Bitte auf keinen Fall zu Fuß umbenennen. Es gibt inzwischen Editoren, die erkennen, wenn Sie hier eine Variablendeklaration umbenennen, dass alle zugehörige Variablen mit umbenannt werden. Das kann dieser Editor nicht. Sie sollten an dieser Stelle also unbedingt Steuerung H, Arbeit ersetzen, aufrufen und das automatisiert machen, sonst kann ich Ihnen garantieren, dass Sie die vergessen werden. Das ist ja oft nicht drei Zeilen kurz, sondern eher zwanzig oder dreißig und irgendeine von diesen Variablen haben Sie dann vergessen. Also es ist so einfacher, die alte Objekt-Zelle wird jetzt eine Range-Zelle, aber bitte nur innerhalb der Prozedur, sonst wird die da oben fälschlich mit geändert und dann gefühlt drei bis vier, so irgendwie, was man meistens ein Gefühl dafür, wie oft die benutzt ist, alle ersetzen. Drei klingt gut, hat also geklappt. Wenn da jetzt zwanzig stünde, würde ich mich sofort wundern, auch bei sechs, also das kann man sicherheitshalber nochmal kompilieren lassen. Alles ist in Ordnung, aber der wesentliche Unterschied ist, dass wenn ich diese Prozedur neu schreibe, wird es nach Range-Zelle den Punkt machen. Siehe da, da ist die IntelliSense-Liste. Weil das Objekt vernünftig deklariert ist, nicht so unscharf als Object, sondern konkret als Range, weiß es, was es kann oder was es kennt. Und es hat zum Beispiel eine Value-Eigenschaft, die ich hier per Doppelklick auswähle. Ich muss nicht mehr wissen, was es kann, sondern es sagt mir das alles. Und funktioniert jetzt natürlich genauso, also die anständige Deklaration, mit einem konkreten Datentyp, weder Object noch Variant, das sind die beiden Indifferenten, sondern konkret als Integer oder als Range oder als Worksheet oder irgendwie so was, die sorgt vor allem dafür, dass die IntelliSense-Listen hier ausklappen und das spart soviel Arbeit, dass das bisschen Extra-Schrieben hier erstens guter Stil ist zweitens vernünftige Variablenbenennung ist, nämlich hier und sorgt dafür, dass die Variable auch in der Groß- und Kleinschreibung erhalten bleibt und hier dann vor allem die IntelliSense-Liste ausklappt.

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!