Aktuelle Seite:
/vba/vbaexportmakros.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003  
Makro/Datei speichern
Print

Ausgehend von dem Beispiel  Prozedur-Übersicht können mit folgenden Abänderungen alle verfügbaren Module (Standardmodul/Userform/Klassenmodul) in ein beliebiges Verzeichnis exportiert werden.

Zur Ermittlung werden nacheinander alle Projekte (VBProjects-Einträge) durchlaufen. Diese entsprechen den obersten Einträgen im Projekt-Explorer der IDE und stellen alle geöffneten und geladenen Dokumente, Vorlagen und Add-Ins dar.
Sofern diese nicht geschützt sind, was für Add-Ins und per Kennwort geschützte Vorlagen und Dokumente gilt, werden in einer weiteren Schleife alle enthaltenen Module (VBComponents-Einträge) durchlaufen und der Typ des Moduls ermittelt.
Anschließend wird das Modul über die Export-Methode in ein beliebiges Verzeichnis gespeichert. Dieses wird mittels des  SHBrowseForFolder-API ausgewählt.

Damit beim Export die korrekte Dateiendung verwendet wird, ist die Typ-Berücksichtigung des jeweiligen Moduls notwendig, da die Dateieindung nicht automatisch gesetzt wird.

Update-Informationen:
Die Ausgabe der Module erfolgt jetzt in separate Verzeichnisse pro Projekt (VBProject).


' Damit auf die Projekte und Module zugegriffen werden kann,  
' muss in der IDE ein Verweis (Extras/Verweise) auf die  
' "Microsoft Visual Basic for Applications Extensibility 5.3"  
' gesetzt sein! 

Sub ExportMacros() 
Dim myProject As VBProject
Dim myComponent As VBComponent
Dim strFile() As String
Dim strOrdner As String
Dim strNames As String
Dim strProj As String , strProjOrdner As String
Dim strMSG As String
' Ordner auswählen 
strOrdner = GetFolderInternal("Ordner auswählen", "C:\")
' Alle Projekte durchlaufen 
For Each myProject In VBE.VBProjects
' Nur ungeschützte berücksichtigen 
If myProject.Protection = vbext_pp_none Then
  On Error Resume Next
  If myProject.VBComponents.Count > 1 Then
    strFile() = Split (myProject.FileName, "\")
    strNames = strFile(UBound(strFile()))
    strNames = Replace (strNames, ".dot", "")
    If Len (Dir (strOrdner & "\" & strNames, vbDirectory ))= 0 Then
      MkDir strOrdner & "\" & strNames
    End If
    strProjOrdner = strOrdner & "\" & strNames
    On Error GoTo 0
    ' Alle Module durchlaufen 
    strProj = ""
    For Each myComponent In myProject.VBComponents
      With myComponent
      strProj = strProj & .Name & vbCr
      ' Modul-Typ ermitteln und mit richtiger Endung exportieren 
      If .Type = vbext_ct_StdModule Then
        .Export strOrdner & "\" & strNames & "\" & .Name & ".bas"
      ElseIf .Type = vbext_ct_ClassModule Then
        .Export strOrdner & "\" & strNames & "\" & .Name & ".cls"
      ElseIf .Type = vbext_ct_MSForm Then
        .Export strOrdner & "\" & strNames & "\" & .Name & ".frm"
      ElseIf .Type = vbext_ct_Document Then
        .Export strOrdner & "\" & strNames & "\" & .Name & ".cls"
      End If
      End With
    Next myComponent
    strMSG = strMSG & strProjOrdner & ":" & vbCrLf & strProj & vbCrLf
  End If
End If
Next myProject
MsgBox "Es wurden alle Module aus folgenden Vorlagen exportiert: " & vbCrLf & strMSG, _
  vbInformation , "Module exportieren"
End Sub 

Zur besseren Identifizierung wird dem Modulnamen noch der Vorlagenname angehängt.

Wichtig:
Damit auf die Projekte und Module zugegriffen werden kann, muss in der IDE ein Verweis (Extras/Verweise) auf die

Microsoft Visual Basic for Applications Extensibility 5.3

gesetzt sein!


 www.chf-online.de/vba/vbaexportmakros.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)