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

Excel VBA für Profis: Klassen (Konzepte)

Excel-Adressen per Klasse importieren und testen

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit wenigen Handgriffen ist eine zusätzliche Excel-Import-Klasse erstellt, welche die Daten aus einer Excel-Tabelle einlesen kann.

Transkript

Weil das so schön funktioniert hat mit den Klassen und dem Zugriff auf andere Datenquellen, habe ich mir überlegt, wir können ja an der Stelle einfach mal Excel-Daten auslesen. Ich habe schon eine Datei vorbereitet, eine ganz normale xlsx-Datei. Die hat ein Tabellenblatt "Adressen" und da stehen Daten drin. Die erste Zeile sind Überschriften und der Rest sind die Inhalte. Und die möchte ich gerne genauso einlesen. Das heißt, wenn ich mir meinen Code jetzt heranhole, dann brauche ich eine neue Klasse nach diesem Muster. Genauso wie es "CSV" oder "Access" gibt, soll es eine neue Klasse für Excel geben und da kann ich schon mal wieder vieles rüberkopieren. Also bis da, das wird sich sehr, sehr ähnlich sein und dann gibt es ein neues Klassenmodul. Das kann ich hier schon mal eben reinkopieren und hier mit "Return" dafür sorgen, dass "End Function" erscheint. Und das Ding wird "clsExcel" heißen. Und jetzt kann ich anfangen mir inhaltlich auszudenken, was passieren muss. An dieser Stelle passiert so gut wie nichts, aber ich muss auf eine Excel-Arbeitsmappe zugreifen können. Es gibt also wirklich, wie bei der "Access"-Datenbank eine Datei, die als Objekt existiert. Das ist ein Workbook, also werde ich jetzt den "wbkDieses As Workbook" erfinden. Ich bin ja in Excel, also kann ich auf das Workbook-Objekt zugreifen. Und das mache ich genau hier beim Öffnen. Also "set m_wbkDieses=" und dann kommen die normalen Excel-Techniken "Workbooks.Open". Und öffnen tue ich genau diejenige, die ich mit "strPfadDatei" angegeben habe. Und dann kann ich noch ein paar Parameter setzen. Vorsichtshalber [ReadOnly]. Und da hinten kommt noch so ein Parameter, Sie sehen das, wenn jetzt dieser Parameter fett wird. [AddToMru] heißt "most recently used". Das wird hinzugefügt zu so einer Liste der zuletzt geöffneten Dateien. Das ist immer nervig, wenn so ein Benutzer da mit "vba" geöffnete Dateien findet. Deswegen unterdrücke ich das. Dann ist dieser Teil eigentlich soweit fertig. Jetzt kommt der eigentliche Datensatz. Also ich muss mir hier das Worksheet hinterlegen, oder als Variable merken. "wks", ich weiß ja das heißt Adressen, deswegen ist das auch ein schöner Name. "As Worksheet natürlich". So! Und ich brauch ein "Range", also "dim rngZeile". Ich werde eine ganze Zeile einlesen. "As Range", das ist ja so ein Bereichsobjekt. Jetzt muss ich erst mal auf das Arbeitsblatt zugreifen, also "set wksAdressen=" von dieser globalen "wbkWorkbook"-Variable eines von den Worksheets und zwar dasjenige, was den Namen "Adressen" trägt. Ich prüfe jetzt nicht großartig, ob es das darin gibt. Die ganze Fehlerbearbeitung fällt hier weg. Ich mache wirklich nur das Nötigste. Ich verlange sozusagen, dass das eine gute Datei ist, wo alles enthalten ist, was ich erwarte. Und dann kann ich festlegen, dass "rngZeile" erst mal das ist, was in diesem "wks" als "UsedRange" hinterlegt ist, nämlich dass ich erst mal den ganzen Block an Inhalten kriege. Und die Zeile, die ich haben will, kann ich jetzt direkt angeben. "set rngZeile" ist von diesem Bereich, also "UsedRange" hätte ich jetzt auch hier schon schreiben können. Eine von den "Rows", Achtung im Plural und zwar diejenige mit der "lngNr+1". Sie erinnern sich oben in der ersten Zeile stehen nämlich Überschriften. Die will ich ignorieren. Und davon hätte ich gerne "entirerow", sprich die gesamte Zeile, über die gesamte Breite. Jetzt habe ich die richtige Zeile schon in der Hand und da kommt jetzt "with" dieser Zeile, "end with". Und ich könnte jetzt auf einzelne Zellen da drin so zugreifen. Kann ich auch, es mir jetzt nur zu viel Schreibarbeit. Da müssen Sie mir nicht beim Tippen zugucken. Da kann ich nämlich jetzt hier, das einfach rüberkopieren. Ist im Grunde, wie mit dem "Split" und mit dem "Array". Ich sage jetzt, innerhalb der Zeile hätte ich gerne die vierte Zelle und die fünfte. Das sind Nachname und Vorname. In Zelle 3 steht die Straße, in Zelle 1 die Postleitzahl und in 2 der Ort. Und das gebe ich an dieses Datensatz zurück. Und wenn ich das noch ordentlich machen will, kann ich auch hier aufräumen. Also mit "ClassTerminate". Da wird dann einmal das Ding geschlossen, also das Workbook insgesamt. Mit "Close" und wenn ich ganz sicher gehen will mit "xlDoNotSaveChanges", falls ich da irgendwas angerichtet haben sollte. Und Sie sehen, diese Klasse zu erstellen mit den vorgegebenen Prozeduren, das Einzige, was ich eigentlich ernsthaft durchdenken musste, war der echte Zugriff auf den Datensatz. Der unterscheidet sich natürlich nach Datenquelle. Der Rest war Runtertippen, ein bisschen Kopieren. Diese drei Klassen sind sich sehr, sehr ähnlich und nach außen so identisch, dass ich jetzt direkt den Test dranhängen kann, mit Klassen nämlich. Dann kopiere ich einfach den hier und kann dann wieder das Wortstückchen "Access" in diesem Fall ersetzen durch "Excel". In dieser Prozedur alles ersetzen, aber es ist natürlich hier eine xlsx-Datei. Dann nochmal alles durchdenken. Die Klasse heißt so "clsExcel". Sie wird wieder an die lokale Variable "clsx" übergeben. Ich will den dritten Datensatz sehen. Damit ich den sehe, brauche ich den Direkt-Bereich. Und nach dem Speichern und dem Kompilierchek, können wir mit "F5" einfach mal testen. Und Sie haben es kurz blitzen sehen. Das ist jetzt eine Eigenheit von Excel, weil das in gleichen Programmen ausgeführt wird. Dieser Teil wurde geöffnet, ausgelesen, geschlossen und da ist der passende Datensatz. Ich könnte ihn jetzt noch prüfen. Das es auch wirklich der dritte ist kann ich Ihnen versprechen. Also für die Klassen spricht jetzt, dass die sich sehr schnell kopieren lassen. Wenn mir jetzt einfällt, ich brauche das Ganze noch von einer Outlook-Adresse, dann gibt es hier eine Class "Outlook" und hier greife ich immer gleich drauf zu. Und ich kann Ihnen jetzt schon verraten, der Outlook-Zugriff ist ungefähr 50 Zeilen länger. Aber das ist mir nachdem die Klasse fertig ist, völlig egal. Ich kann einen Kollegen bitten mir diese Klasse zu programmieren mit der Oberfläche sozusagen, mit den drei Prozedurnamen und muss mich um den Rest nicht mehr Kümmern. Und das ist der Vorteil von Klassen. Wenn ich eine neue Datenquelle brauche, gibt es hier ein neues Klassenmodul. Das ist mir anschließend völlig egal und verstopft mir nicht den Code, wie ich das hier habe. Wo das nämlich innerhalb des Moduls irgendwo ist, kann ich auch auslagern. Aber immer, wenn eine neue dazukommt, habe ich irgendwo sehr viel Code, der unübersichtlich wird. Und hier ist er übersichtlich, weil ich immer das Gleiche programmieren kann. Und ich kann Ihnen versprechen mit noch ein paar Ergänzungen wird das noch weniger hier im Aufruf.

Excel VBA für Profis: Klassen (Konzepte)

Verbessern Sie Ihren VBA-Code durch Klassenprogrammierung.

1 Std. 35 min (21 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!