VBA Export, Quellcode + Versionsverwaltung
10.09.2009 17:30:35
fcs
Hallo Tobias,
du kannst zum Beispiel alle Module eines VBA-Projekts in ein Verzeichnis exportieren. Diesen Exprot kann man automatisieren.
Dabei erzeugt Excel Dateien mit den Erweitereungen
bas - für algemeine Module
cls - für "DieseArbeitsmappe", Tabellen und Klassenmodule
frm - Code eines Userforms
frx - Aufbau eines Userform
Mit Ausnahme der frx-Dateien sind dies alles Text-Dateien, die zu Beginn ein paar Informationen zu dem zugehörigen Element enthalten und dann den Code wie du ihn im VBA-Editor siehst.
Im Datei-Explorer kannst du dann mit Senden an "Wordpad" oder einen anderen Editor die Dateien einsehen.
Mit diesen Dateien müsste dann ja auch dein Versionierungs-Tool funktionieren.
Die Nachfolgende Prozedur export alle Module des VBA-Projekts der aktiven Datei in ein Verzeichnis und erstellt auch einen Satzt Text-Dateien zum "nachschauen".
Gruß
Franz
'Prozedur erstellt unter Excel 2003
Sub Code_Export()
'Gesamten Code und Module der aktiven Datei exportieren
'Zur Ausführung der Prozedur muss:
'1. Im VBA-Editor unter Extras--> Verweise... _
der Verweis auf die _
Microsoft Visual Basic for Applications Extensibility x.x _
aktiviert werden
'2. In Excel unter Extras --> Optionen --> Sicherheit --> Makrosicherheit _
die Option "Zugriff auf das VB-Projekt vertrauen" aktiviert werden.
Dim myVBComponent As VBComponent, varFolderName, wbAktiv As Workbook
Dim strFile As String
On Error GoTo Fehler
If MsgBox("Sämtlichen VBA-Code der aktiven Mappe exportieren?", _
vbYesNo, "VBA-Code-Export") = vbYes Then
Set wbAktiv = ActiveWorkbook
'Verzeichnis auswählen für Export
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.InitialView = msoFileDialogViewList
'Verzeichnis "C:\Lokale Daten\Test\" als Basis-Verzeichnis für Code- _
Dateien ggf. anpassen
strFile = "C:\Lokale Daten\Test\" & "Code_" & _
VBA.Replace(wbAktiv.Name, ".", "_")
If Dir(strFile, vbDirectory) = "" Then
VBA.MkDir strFile
End If
.InitialFileName = strFile & Application.PathSeparator
.Title = "Bitte den Ordner wählen, in dem das Unterverzeichnis " _
& "für Export angelegt werden soll"
If .Show False Then
varFolderName = .SelectedItems(1)
'Unterverzeichnis für Dateien erstellen
varFolderName = varFolderName & Application.PathSeparator _
& Format(Now, "YYYYMMDD_hhmm")
VBA.MkDir Path:=varFolderName
'Unterverzeichnis für TXT-Dateien erstellen
VBA.MkDir Path:=varFolderName & Application.PathSeparator & "TXT"
Else
Exit Sub
End If
End With
With ActiveWorkbook.VBProject
For Each myVBComponent In .VBComponents
With myVBComponent
Select Case .Type
Case 1: strFile = .Name & ".bas" 'Allgemeines Modul
Case 2: strFile = .Name & ".cls" 'Klassenmodul
Case 3: strFile = .Name & ".frm" 'Userform
Case 100: strFile = .Name & ".cls" 'Tabelle oder DieseArbeitsmappe
End Select
'alle Module exportieren
.Export FileName:=varFolderName & Application.PathSeparator & strFile
'Code der Module als TXT-Datei speichern
.Export FileName:=varFolderName & Application.PathSeparator & "TXT" _
& Application.PathSeparator & .Name & ".txt"
If .Type = 3 Then 'Userform
'Bei Userformen die erzeugte frx-Datei wieder löschen
strFile = varFolderName & Application.PathSeparator & "TXT" _
& Application.PathSeparator & .Name & ".frx"
Kill strFile
Else
End If
End With
Next
End With
End If
MsgBox "Fertig"
Fehler:
With Err
If .Number 0 Then
Select Case .Number
Case 1004
MsgBox "Fehler: " & .Number & vbLf & .Description & vbLf _
& "Vor Start des Makros unter Optionen ""Sicherheit --> " _
& "Makrosicherheit"" Option " _
& """Zugriff auf das VB-Projekt vertrauen"" aktivieren!"
Case Else
MsgBox "Fehler: " & .Number & vbLf & .Description
End Select
End If
End With
End Sub