mir ist aufgefallen, dass beim Import einer Userform beim Makrocode zwischen dem Header (Beginn / End und Attribute) und den eigentlichen - auch unter VBA sichtbaren - Makroteilen immer eine zusätzliche Leerzeile eingefügt wird.
Ausschnitt nach dem Export:
Attribute VB_Exposed = False
'1
'2
Option Explicit
Private Sub TTT()
Wenn ich den exportieren Code erneut importiere, sieht der eigentliche Makroteill nun so aus:
== hier wurde die Leerzeile eingefügt
'1
'2
Option Explicit
Private Sub TTT()
Vor meinen mit '1 und '2 markierten Zeilen wurde eine neue Zeile eingefügt.
Wird dieser Stand exportiert, und dabei die alte Vesion ersetzt, so wird beim nächsten Import eine weitere Leerzeile eingefügt.
Das Problem besteht nur bei "Formularen" und nicht bei "normalen" Code-Moduln (.cls und .bas).
Grundsätzlich stört eine Leerzeile nicht. Allerdings habe ich mir ein Tool erstellt, welches die einzelnen Moduln aller ausgewählten Mappen exportiert. Dann kann ich vergleichen, ob in den so exportierten Moduln solche vorhanden sind, welche von der Version in meinem Import-Verzeichnis abweichen. Dazu ermittle ich von beiden den MD5-Wert. Und der ist durch die zusätzliche Leerzeile anders. Mit einem weiteren Werkzeug kann ich dann in den jeweiligen Mappen das entsprechende Modul löschen und durch das neue (aus dem Import-Verzeichnis) ersetzen ("Import"). Doch dabei wird wieder die erwähnte Leerzeile eingefügt.
Workbooks(UpdateBook).VBProject.VBComponents.Remove _
Workbooks(UpdateBook).VBProject.VBComponents(Names(Loop1))
Workbooks(UpdateBook).VBProject.VBComponents.Import InclPfad & Names(Loop1) & ModType
Dass Microsoft diesen Fehler korrigiert, halte ich im Rahmen der endlosen Diskussion um den Wegfall von VBA für aussichtsslos. Bleibt also nur eine Lösung über einen eigenen VBA-Code.
Ich habe zwar eine Idee, mir fehlt aber der Lösungsansatz.
Immer dann, wenn ein ".frm"-Modul (Modtype = ".frm") importiert wurde, sollte per Code überprüft werden, ob vor der von mir (fast) immer verwendeten "Option Explicit" eine Leerzeile vorhanden ist, und dann diese löschen.
Ist mir noch zu helfen?
Gruß Joschi