Im Gegensatz zu herkömmlichen Programmiersprachen, bietet Microsoft von Haus aus keine Möglichkeit zur VBA-Quellcodeverwaltung. In vielen Fällen behilft man sich, indem man für eine neue Programmversion eine neue Exceldatei anlegt. Für kleinere Projekte, deren Code in einer einzigen Datei enthalten ist, ist es eine gängige und einfache Alternative. Für komplexere Projekte, bei denen gewisse Teile der Geschäftslogik noch in Add-Ins ausgelagert sind, ist das oben beschriebene Vorgehen wenig praktikabel. In diesem Beitrag stelle ich meine Vorgehensweise vor, die ich für größere Projekte anwende.
Tortoise SVN für die Quellcodeverwaltung
Die Codeverwaltung findet im kostenlosen Tool Tortoise SVN statt, welches sich nahtlos in Windows Explorer einfügt und einfach bedienbar ist. Darin kann der Code der zu verwaltenden Anwendung auf unterschiedliche Verzeichnisse aufgeteilt werden, um die logische Struktur der Anwendung besser abbilden zu können.
Die eigentliche Entwicklung betreibe ich natürlich nach wie vor im VBE-Editor statt, der trotz fehlender Versionsverwaltung, für die Entwicklung schon recht komfortabel ist. Ist ein stabiler Stand des Programms erreicht, ist der Zeitpunkt für die Versionierung des neuen Standes gekommen.
Export des Quellcodes für die Versionierung
Da ich die einzelnen AddIns oder Exceltabellen mit VBA-Code nicht als Ganzes als binäre Dateien im SVN-System ablegen wollte, sondern als Quellcode in Textform, musste eine bequeme Möglichkeit her, den Quellcode aus den Dateien zu extrahieren. Hierfür setzte zunächst eine VBA-Methode ein, die ich mittlerweile durch ein eigenständig laufendes C#-Programm abgelöst habe.
Dieses Programm bietet einen zentralen Einstieg in alle meine Kundenprojekte, die mit VBA entwickelt wurden (für andere Projekte ist dieses Overhead nicht erforderlich, da deren Quellcodedateien direkt in der Versionsverwaltung liegen und bearbeitet werden können). Nachdem ich mit der Programmierung eines neuen Features und dem Testen fertig bin, wähle ich in der Auswahlbox dieses Kundenprojekt aus. In der tabellarischen Übersicht werden mir dann alle dazugehörenden Softwarekomponenten angezeigt. Durch die Sortierung nach dem Änderungszeitpunkt habe ich einen guten Überblick über die einzucheckenden und auszuliefernden Komponenten.
Diese Komponenten wähle ich durch das Anklicken aus und drücke auf „Exportieren“.
Daraufhin wird aus den markierten VBA-Komponenten deren Quellcode exportiert und ins Verzeichnis zum Einchecken reingestellt. Wenn sich unter den ausgewählten Komponenten Konfigurationsdateien oder XML-Schlüsselverzeichnisse oder andere Nicht-VBA-Dateien befinden, so werden die 1:1 in das Eincheckverzeichnis kopiert. Des Weiteren kopiert das Programm alle auszuliefernden Komponenten in ein geteiltes OneDrive-Verzeichnis rein, sodass ich anschließend lediglich eine Email an den Kunden zu schicken brauche, um mitzuteilen, dass es eine neue Programmversion gibt.
COM-Schnittstelle für Tortoise
Nachdem ich das C#-Programm für den Quellcodeexport entwickelt habe, habe ich beim Durchlesen der Tortoise-Dokumentation festgestellt, dass es dort eine Dll-Datei als COM-Schnittstelle angeboten wird. Bisher habe ich erstmal nur eine Methode davon an mein Programm angebunden, sodass beim Auswählen eines Kundenprojektes automatisch die dort zuletzt verwendete Revisionsnummer in die Erfassungsmaske eingetragen wird. Diese Revisionsnummer wird automatisiert in alle Excelkomponenten eingetragen, die an den Kunden ausgeliefert werden.
Fazit
Alles in einem ist diese Vorgehensweise natürlich etwas umständlicher als in herkömmlichen und moderneren Programmiersprachen, bei denen die Versionierung direkt in der IDE integriert ist. Nicht desto trotz überwiegen für mich im VBA-Umfeld die Vorteile der vorgestellten Lösung – so bin ich jederzeit in der Lage, nachzuvollziehen, wann sich zum Beispiel eine bestimmte Methode geändert hat und vor allem warum. Dies wäre ohne die SVN-Lösung gar nicht möglich gewesen.
Wie geht ihr bei der Verwaltung eurer größeren VBA-Projekte vor?