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

Property-Prozeduren erstellen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Property-Prozeduren werden oft paarweise erstellt, damit sie lesend und schreibend arbeiten können. Fehlt eine der beiden Versionen, so steuern Sie damit wie bei den bereits integrierten Properties, ob auf die Werte nur schreibend oder nur lesend zugegriffen werden kann.

Transkript

Die normalen Prozeduren, also Sub und Function sind dafür zuständig, dass sie zum Beispiel etwas tun können oder einen Wert zurückbekommen. Ich hatte schon erwähnt, dass es da etwas Besseres gibt, die Properties. Es ist ein Hauch komplizierter, wenn man das, das Erste mal macht, ich sage mal, ab dem zweiten, dritten Mal nicht mehr wirklich. aber es ist enorm viel praktischer. Ich möchte Ihnen das hier zeigen in einem neuen Modul, das ich schon mal angelegt habe, und zwar erstmal im Normalfall. Es soll völlig fiktiv irgend ein Name, sagen wir Farbname zwischengespeichert werden, so dass Sie später darauf zugreifen können. Es gibt also eine Modul-öffentliche Variable, die nennen wir mal StrFarbname und das ist deswegen As String. Das Kommentarzeichen, damit sie den Unterstrich später noch sehen, wenn die Trennungsstriche auftauchen. Normalerweise würden Sie jetzt hier eine Sub erfinden, die heißt "Farbe setzen" und der übergeben Sie StrFarbe oder sagen wir besser Farbname As String und würden hier nichts anderes machen, als der Modul öffentlichen Variable die natürlich m_strFarbname heißt, den Parameterinhalt übergeben. Das sieht relativ langweilig aus hier. Warum soll ich dieser Variable oder diesem Parameter einfach nur an diese Variable übergeben. Das ist aber durchaus üblich, wenn Sie nämlich darüber steuern, was darf man von außen in diesem Modul machen und etwas Anderes ist dann mit Privat geschützt. Spätestens wenn Sie mit Klassenprogrammierung zu tun haben, ist das sozusagen der Kern der Programmierung, dass man solche Variablen nur über bestimmte Prozeduren setzen dürfte. Hier dient es einfach nur dazu, zu zeigen, wie ich eine Farbe setze, konkrete Auswirkungen hat es nicht. Die Variable, diese Modul-öffentliche Variable merkt sich den Farbnamen. Und deswegen kann ich nämlich zu einem beliebigen Zeitpunkt später, mit einer Function, Farbe lesen, auch As String, diesen Farbnamen auch wieder herausholen. Also Name der Function, gleich das was ich hier gerne als Inhalt haben möchte. Ich setze über den Parameter diese Variable und kann später diese Variable wieder auslesen. Das ist ein ganz normales Verfahren, kommt immer und überall vor, wenn Sie in solchen Modulen mehrere Aktionen haben, die sich auf das Gleiche beziehen. Damit Sie sehen, wie das funktioniert, das werde ich jetzt hier drinnen machen. Normalerweise würde man diese Testfunktion außerhalb des Moduls schreiben, aber so haben wir es alles zusammen. Da gibt es irgendwann Code, der das testen will, ich sage einfach nur mal "Teste Farbe", und der bekommt eine Variable, die heißt ganz lieblos "Farbe As String" und da passiert irgendetwas drin und wenn ich alles vorbereitet habe, dann will ich diese Variable setzen. Ich muss also mit Farbe setzen, irgendetwas ausfüllen, sagen wir Himmelblau. Dann passiert irgendwie anderes. Dann möchte die auslesen, also StrFarbe gleich und jetzt kann ich "Farbe lesen" aufrufen und damit es deutlich ist, dass es eine Function ist, schreibe ich auch immer dahinter diese Klammern, selbst wenn sie leer sind. Sie haben also einmal eine Prozedur "Farbe setzen" und einmal eine Prozedur, "Farbe" lesen. Dieses ist eine Sub, dieses ist eine Function und damit wir beweisen können, dass es funktioniert, mach ich jetzt hier Debug Print. Das heißt wenn ich das hier einmal laufen lasse, sollte da unten, einmal F5, Himmelblau erscheinen. Funktioniert, und so sieht es in den meisten Programm auch aus. Aber es geht besser, und dabei geht es nicht nur um die Schönheit des Codes, sondern auch um lesefreundlichere und mit weniger Aufwand betriebene Programmierung. Sei es nur, dass sie nicht zwei mal ein Wort sich ausdenken müssen, obwohl eigentlich das Gleiche passiert. Einmal wird die Farbe gesetzt, einmal wird sie ausgelesen. Das ist das was Properties leisten und das wird Ihnen sehr bekannt vorkommen. Ich schreibe hier schon einmal deutlich ohne Property. Es wird ihnen deswegen bekannt vorkommen, weil genau so, ganz viele VBA Funktionen arbeiten. Das sind nämlich Properties, die haben den Vorteil, dass Sie beim Lesen und Schreiben das gleiche Wort benutzen können. Deswegen brauchen Sie ein Pärchen von gleichnamigen Prozeduren. Properties treten häufig in Pärchen auf, und da es durch aus Anfangs lästig ist, sich die Schreibweise zu merken, empfehle ich Ihnen zwischendurch mit Einfügen Prozedur, hier diesen Dialog zu nutzen. Die Property heißt einfach Farbe und wenn ich hier Property angebe, dann wird der Rest automatisch erzeugt. Hier das können Sie ignorieren. Ganz ehrlich, nach dem zweiten, dritten Mal brauchen Sie auch den Dialog nicht mehr. Nach dem Okay wird links hier unten, das muss ich erst nach oben holen, also markieren und nach oben schieben, wird hier dieses Pärchen gleichnamiger Properties, eingefügt. Die sind nicht wirklich gleichnamig, es gibt nämlich immer zwei Schlüsselwörter: Property Get und Property L#et. Ich werde ein bisschen aufräumen, hier zum Beispiel, Public ist Quatsch, denn so wie Sub und Function auch, sind Properties immer Public. Es sei denn, Sie würden sie explizit mit Privat verstecken. Aber wenn sie beim Prozeduren und Properties nichts machen, dann sind die sowieso Public. Das können wir uns wirklich schenken. Es bleiben also die Schlüsselwörter Property Get und Property Let übrig. Das Property Let entspricht der Sub. Deswegen werde ich hier die Reihenfolge ändern, so dass ich also in gleicher Reihenfolge, und ich schreibe das auch dahinter: wie eine Sub und dieses Property Get ist das Holen, den Wert auslesen, das ist wie Function, dann haben wir die unten in der gleichen Reihenfolge. Dieser Name ist identisch, daran wird die Zusammengehörigkeit erkannt. Hier gibt es schon wieder ein Schlüsselwort, das wir nicht brauchen. Es gibt die Unterscheidung zwischen ByValue und ByReference. ByValue heißt dieser Parameter wird inhaltlich übergeben als komplette Kopie aus dem Speicher, in diese Prozedur hinein. Im Gegensatz zum ByRef, das ist übrigens der Standard in VBA. ByRef gibt nur einen Zeiger, dann weiß die Prozedur wo sie es im Speicher nachschauen kann und könnte dort auch das Original verändern. Das ist hier uninteressant, ByValue brauchen wir im Moment nicht. Ganz gelegentlich meckert der Compiler und sagt Ihnen dann mal so etwas dieses ginge aber nur mit ByValue Parametern, dann schreiben Sie es einfach hinein. Bis dahin können Sie im Normalfall mit byReference arbeiten und weil das Standard ist, brauchen Sie es gar nicht hinein zu schreiben. Das ist sozusagen die Minimalanforderung an zwei Properties. Die Let hat zwingend mindestens einen Parameter. Und die Get Property hat mindestens einen Parameter weniger, denn dieser eine Parameter und dessen Datentyp entspricht diesem Rückgabewert. Dieses Variant New Value ist so neutral, um nicht zu sagen unentschieden formuliert, das können wir besser. Schreiben wir doch direkt so wie unten auch StrFarbname und dieses wird dann entsprechend String. Das bedeutet automatisch: wenn dieser Datentyp sich ändert, muss er sich hier exakt so ändern. Das wird der Compiler sonst bemeckern. Der Eingabe Datentyp, der in die Prozedur hinein führt, muss hier identisch sein mit dem Rückgabe Datentyp. Jetzt kommen die eigentlichen Inhalte, das ist so gleich, das können wir direkt hinüber kopieren, Also hier da passiert exakt das Selbe. Diese Variable oder dieser Parameter wird übergeben, an unsere Modul-öffentliche Variable übergeben. Und hier wird es geringfügig anders, denn die Prozedur heißt nicht mehr Farbe lesen, sondern die heißt einfach nur Farbe = m Unterstrich und da ist wieder die Variable von oben. Wenn Sie genau schauen, fast identisch, außer, dass da jetzt Property Let Farbe steht und Property Get, auch Farbe. Der Aufruf unterscheidet sich ein bisschen, wir können trotzdem, sage ich mal, die beiden Zeilen kopieren. Aber natürlich diesmal mal mit Property, keine gleichnamigen. Das ist jetzt zu viel Intelligenz vom Editor gewesen. Ich habe hier also genauso wieder eine StrFarbe und wenn ich das, ich fahre mal ein bisschen höher, damit Sie es im Vergleich sehen, wenn ich das jetzt zuweisen will, dann schreibe ich Farbe gleich das fühlt sich wirklich wie eine Zuweisung an und nehmen wir mal eine andere Farbe, damit Sie sehen, dass es wirklich dieses ausführt, Farbe ist gleich ein neuer Wert. Und das Gegenstück beim Auslesen heißt dann auch gleich Farbe. Sie können an der Stelle schon deswegen die runden Klammern weglassen, weil es sich weil es sich wirklich wie eine Variable anfühlt. Diese Variable bekommt diesen Wert zugewiesen und da lese ich die Variable aus. Jetzt kommt wieder das Debug Print, von StrFarbe, also das ist der Teil um den es mir geht. Das Lesen beziehungsweise anders herum, erst das Schreiben und hier das Lesen, fühlen sich gleich an. Sie haben nicht nur das gleiche Wort, Sie wissen also, Sie schreiben wirklich in den gleichen Inhalt rein, sondern Sie haben auch beide Male ein Gleichheitszeichen. Und das ist das was hier so lästig ist und zu Überraschungen führt. Hier ist es eine Prozedur ohne Gleichheitszeichen und hier ist es eine ganz anders benannte Function, die dann mit Gleichheitszeichen arbeitet. Und diese Variante, kennen Sie überall in VBA. Dort werden nämlich Werte, wenn Sie die lesen und ersetzen mit der gleichen Bezeichnung bearbeitet. Natürlich müssen Sie auch überprüfen, ob es funktioniert, also hier mit F5, da erscheint unten jetzt das ferkelrosa. Das ist das was Properties ausmacht. Sie werden geringfügig anderes geschrieben, nämlich mit doppeltem Schlüsselwort, Property Let, Propery Get, haben dann aber die identische Bezeichnung, jedenfalls dann wenn sie beide vorkommen. Wenn Sie eine Property, eine Eigenschaft schreiben wollen, die nicht gesetzt werden kann, dann lassen sie den einfach weg, Kommentiert und schon wird diese Zeile nicht mehr funktionieren. Es gibt ein Laufzeitfehler. Ich kann nicht zuweisen, ich kann nur noch auslesen. Das können Sie natürlich auch umgekehrt haben, das wird selten sein. Eine Property, die Sie setzen können, aber nicht lesen, dann würden Sie diesen hier weglassen. Dann ist jeweils, der Compiler weiß das immer, hier ist die Property Let und hier die Property Get drinnen und dann können Sie entsprechend steuern, was damit funktioniert. Es gibt übrigens noch eine Dritte, eine Property Set. Die ist dann notwendig, wenn es sich hier nicht um einfache Datentypen, wie String, Long oder sonstiges handelt, sondern über Objektdatentypen. Dann steht hier Property Set irgendetwas und hier muss dann auch Set Variable gleich anderer Inhalt stehen. Die ist aber eher selten. Also Properties verbessern Ihren Code, machen ihn lesbarer und weniger fehleranfällig.

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!