Die neue Kolumne «sudo rm -rf /» widmet sich ab heute in unregelmäßigen Abständen Themen aus den unendlichen Weiten des Softwarentwicklungsuniversums. Die erste Instanz erklärt, wie man für Excel eine Versionskontrolle über Git hinbekommt. Denn das funzt, wenn auch über einen kleinen Umweg.
Edit 13.10.2023: Unter https://github.com/gueleh/flowframework2/tree/main/independent-features-DEPRECATED gibt es ein Workbook, in dem eine Klasse demonstriert wird, mit der auf Knopfdruck alle Module, alle definierten Namen sowie alle Worksheet-(Code)Namen exportiert werden. Damit wird die Versionskontrolle noch leichter.
Unter https://vba-flow.net/ gibt es einen kostenlosen Newsletter, der keine Werbung, sondern ausschließlich kostenlose „Nuggets of Value“ bringt. Für die Registrierung gibt es kostenloses Welcome Package. Bald wird es dort eine Anleitung dazu geben, wie Versionskontrolle mit Excel VBA und Git repositories gut realisierbar ist.
Edit 09.07.2022: Ich habe heute am Ende des Beitrags eine Ergänzung vorgenommen, ab „Edit 09.07.2002“ – diese zeigt meine nunmehrige Praxis. Den bisherigen Text habe ich bis auf den letzten Absatz aber stehen gelassen, aus Faulheit oder Nostalgie, such es Dir aus :-).
Ich arbeite momentan gerade an einem Tool, das ich vor einigen Jahren in halbfertigem Zustand übernommen und fertigentwickelt habe. Nun steht eine wesentliche funktionale Erweiterung an. Dabei fiel mir auf, dass auch ein umfangreiches Refactoring notwendig ist. Zurzeit hat das Tool noch kein automatisiertes Testing, jede Änderung muss also manuell getestet werden. Schreit das grundsätzlich schon nach Versionskontrolle, so ist dieser Schrei dadurch in der Nähe von Trommelfellzerfetzpotenzial.
Excel und Git scheinen sich nicht zu mögen, eine diesbezügliche Recherche zeigte mir zwar einige interessante Ansätze, teilweise kostenpflichtige Add-Ins. Aber nichts, was mich zufrieden stellte. Den nur mit öffentlichen Repositories verfügbaren Cloud Service habe ich mir ob der Öffentlichkeit gleich gar nicht angesehen. Hier nun Schritt für Schritt meine Lösung, welche nur für Excel-Dateien funktioniert, die bereits auf XML beruhen, zB xlsx- oder xlsm-Dateien:
- Lokale Repository anlegen.
- Mit Git initialisieren, erstes Commit machen und mit einer Online-Repository verbinden (z.B. bei BitBucket könnt ihr kostenlose private Repositories haben).
- Bei mehr als einer Excel-Datei für jede Datei einen eigenen Unterordner anlegen und die Datei dorthin verschieben. Wenn es nur eine Datei ist, gerne auch im Hauptverzeichnis der Repository ablegen.
- Die Excel-Datei entpacken (ja, die Excel-Dateien im auf XML beruhenden Format sind nichts Anderes als komprimierte Ordner).
- Für jedes Modul, jede Klasse sowie jedes andere Element, in dem sich Code befindet: Aus dem VBA Editor exportieren und in der Repository ablegen.
- Commit durchführen und in die Online-Repository pushen.
- Für jedes neue geplante Commit die entpackten Inhalte erneut entpacken sowie die relevanten Inhalte aus dem VBA Editor neu exportieren. Die Excel-Dateien selbst bleiben dabei immer in nur einer Instanz bestehen, die Erstellung von Kopien ist durch die Versionskontrolle ja nicht mehr notwendig.
Variante: Im verlinkten Artikel wird erklärt, wie Du mithilfe von Python Dein System so einrichten kannst, dass der Code bei jedem Commit automatisch extrahiert wird: https://www.xltrail.com/blog/auto-export-vba-commit-hook
Edit 09.07.2022: Mittlerweile habe ich auch Erfahrungen mit Branches, das funktioniert reibungslos. Die Mühe des Entpackens des gesamten .xlsm-Pakets mache ich mir nicht mehr, ich lasse die Beschreibung oben aber so wie sie ist, falls das jemand doch nützlich finden sollte.
Mein nunmehriger Prozess:
- Mit „MZ Tools“ über die Option „Extract files…“ alle VBA Komponenten auf einmal exportieren, inklusive einer Textdatei mit den selektierten Referenzen des Projekts.
- Das dann committen, bei Bedarf in eine neue Branch – damit sollte man aber sehr vorsichtig umgehen, Branching funktioniert nur, wenn die Änderungen ausschließlich den Code betreffen und nicht die Inhalte der Worksheets.
Das geht nun alles sehr rasch, dank MZ Tools, das ich mir auch ansonsten nicht mehr wegdenken kann aus meinem Entwicklungsprozess. In einem dritten Anlauf habe ich heute, also am 9. Juli 2022 mit einem Framework für Excel VBA Applikationen begonnen. Ein erstes Skelett steht und kann bereits verwendet werden. Die nicht-kommerzielle Verwendung ist frei, für eine kommerzielle Verwendung (sobald es reif sein wird) werden die Kosten individuell auf Anfrage kalkuliert.
Geplant ist besonders auch die Möglichkeit für „Test Driven Development“. Das hatte ich schon im Vorgängerprojekt, das aber nicht öffentlich ist. Dazu ist es zu komplex und zu wenig modular, auch wenn es bereits sehr leistungsfähig ist und in einer kommerziellen Lösung verwendet wird, die ich noch als Freiberufler für meinen derzeitigen Arbeitgeber entwickelt habe. Infos zu diesem alten „FlowFrameworkSelfcontained“ gerne auf Anfrage.
Das neue, von beginn an öffentliche Projekt ist hier: https://github.com/gueleh/flowframework2
Neben dem automatisierten Testing werde ich auch noch andere Funktionalitäten aus dem alten Framework im neuen Anlauf aufgreifen, dabei aber großen Wert darauf legen, dass es schlank bleibt und die Komponenten neben einem Kern sehr einfach auch weggelassen werden können.
Mehr über Günther Lehner alias Anders Balari: