Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Beispiel zum Export aller Makros gesucht

Beispiel zum Export aller Makros gesucht
09.03.2015 17:47:27
Werner Perouse

Hallo Forum,
ich suche ein (lauffähiges) Beispiel, mit welchem alle Makros eines Workbooks exportiert werden können.
Ich google jetzt schon den ganzen Nachmittag und habe mehrere Beispiele heruntergeladen und probiert; doch keines ist wirklich gelaufen. Es fehlten immer irgend welche Referenzen.
Ich möchte die Makros von 2 Workbooks exportieren und dann miteinander vergleichen. Dummerweise habe ich in beiden Workbooks Änderungen vorgenommen, obwohl sie anfangs gleiche Makros hatten.
Wer kann helfen??
Gruß aus dem Schwabenland
Werner

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beispiel zum Export aller Makros gesucht
09.03.2015 17:51:38
Hajo_Zi
Hallo Werner,
führe nur den eil des Exportes aus. Du kennst Dich ja aus.
Option Explicit                                     ' Variablendefinition erforderlich
Option Private Module                               ' keine Anzeige in der Makroliste
Dim StDatei As String                               ' Variable Datei
' Zugrifff auf das VBA-Projekt muss zugelassen sein
Sub Code_Exportieren()
Dim StZielPfad As Variant                       ' Ordner für Zieldatei
Dim StZiel As String                            ' Variable Dateiname
StDatei = ActiveWorkbook.Name
StZielPfad = Application.GetOpenFilename("Exceldateien (*.xls*), *.xls*", _
, "Zieldatei auswählen")
If StZielPfad <> "" Or StZielPfad <> False Then
' Dateiname abtrennen
StZiel = Mid(StZielPfad, InStrRev(StZielPfad, "\") + 1)
If StZiel <> ActiveWorkbook.Name Then
If InStr(UCase(StZiel), "XL") > 0 Then
Application.DisplayAlerts = False   ' Mitteilungen aus
Application.EnableEvents = False    ' Reaktion auf Eingabe aus
Workbooks.Open StZiel               ' Zieldatei öffnen
'                On Error Resume Next                ' fehlerbehandlung aus
'                Workbooks(StZiel).Worksheets("Muster Vorlage").Visible = True
'                Workbooks(StZiel).Worksheets("Muster Vorlage").Delete
'                On Error GoTo 0                         ' Fehlerbehandlung Standard
'                Workbooks(StDatei).Worksheets("Muster Vorlage").Visible = True
'                Workbooks(StDatei).Worksheets("Muster Vorlage").Copy Before:=Workbooks(StZiel). _
Sheets(1)
'                Workbooks(StZiel).Worksheets("Muster Vorlage").Visible = xlVeryHidden
'                Workbooks(StDatei).Worksheets("Muster Vorlage").Visible = xlVeryHidden
'                Workbooks(StZiel).Worksheets("Muster Vorlage").Visible = xlVeryHidden
Loeschen_Datei                       ' vorhandene Dateien löschen
CodeLoeschen                         ' Code löschen
' Export des Codes
alleMakrosExportieren Workbooks(StDatei).Name
Import StZiel                       ' Import des Codes
Workbooks(StZiel).Close True        ' sichern der Änderungen in Zieldatei
Loeschen_Datei                      ' vorhandene Dateien löschen
Application.EnableEvents = True     ' Reaktion auf Eingabe ein
Application.DisplayAlerts = True    ' Mitteilungen ein
End If
Else
MsgBox "Gleiche Datei"
End If
End If
End Sub
Sub Loeschen_Datei()
On Error Resume Next                            ' Fehlerbehandlung nächste Anweisung
Kill Workbooks(StDatei).Path & "\" & "*.bas"    ' vorhandene Moduldateien löschen
Kill Workbooks(StDatei).Path & "\" & "*.FRM"    ' vorhandene UserFormdateien löschen
Kill Workbooks(StDatei).Path & "\" & "*.CLS"    ' vorhandene Klassendateien löschen
Kill Workbooks(StDatei).Path & "\" & "*.FRX"    ' vorhandene Dateien löschen
On Error GoTo 0                                 ' Fehlerbehandlung Standard
End Sub
Sub CodeLoeschen()
' von Nepumuk, allen vorhandenen Code löschen, in Zieldatei
Dim objVBComponents As Object
With ActiveWorkbook.VBProject
For Each objVBComponents In .VBComponents
Select Case objVBComponents.Type
Case 1, 2, 3
.VBComponents.Remove .VBComponents(objVBComponents.Name)
Case 100
With objVBComponents.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End Sub
Public Sub alleMakrosExportieren(StDateiExport As String)
' von Nepumuk, Export des gesamten Codes aus ThisWorkbook
Dim vbc As Object, iCounter As Integer, cType As String
For Each vbc In Workbooks(StDateiExport).VBProject.VBComponents
With vbc.CodeModule
For iCounter = 1 To .CountOfLines
If .ProcOfLine(iCounter, 0) > "" Or InStr(1, .Lines(iCounter, 1), "Dim") <> 0 _
Or InStr(1, .Lines(iCounter, 1), "Public") <> 0 _
Or InStr(1, .Lines(iCounter, 1), "Type") <> 0 _
Or InStr(1, .Lines(iCounter, 1), "Static") <> 0 _
Or InStr(1, .Lines(iCounter, 1), "Declare") <> 0 Then
Select Case vbc.Type
Case 1: cType = ".bas"      ' Module
Case 2, 100: cType = ".cls" ' Tabelle; DieseArbeitsmape; Klassen
Case 3: cType = ".frm"      ' UserForm
End Select
' Code Exportieren Ablagepath ThisWorkbook.Path
Workbooks(StDateiExport).VBProject.VBComponents(vbc.Name).Export _
Workbooks(StDatei).Path & "\" & vbc.Name & cType
Exit For
End If
Next iCounter
End With
Next vbc
End Sub
Public Sub Import(StDateiExport As String)
' von Nepumuk
Dim vbc As Object, StDateiname As String
With Workbooks(StDateiExport).VBProject
' Code importieren, UserForm korrekt, sonstiges alles in Klassenmodule
StDateiname = Dir(Workbooks(StDatei).Path & "\" & "*.*")
Do While StDateiname <> ""
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" _
Or UCase(Right(StDateiname, 4)) = ".CLS" Then
.VBComponents.Import Workbooks(StDatei).Path & "\" & StDateiname
End If
StDateiname = Dir
Loop
' Code auf DieseArbeitsmappe und Tabellen (interner Name) verteilen
For Each vbc In .VBComponents
If vbc.Type = 2 Then
' alle Klassen beginnen mit cls und müssen nicht verteilt werden
If UCase(Left(vbc.Name, 3)) <> "CLS" Then
' Code an die entsprechenden Stelle kopieren
.VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1,  _
_
vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
' Code in Klasse löschen
.VBComponents.Remove .VBComponents(vbc.Name)
End If
End If
Next vbc
End With
End Sub

Anzeige
AW: Beispiel zum Export aller Makros gesucht
09.03.2015 18:45:25
Werner Perouse
Hallo Hajo,
Danke für das umfangreiche Beispiel. Du bist der Meinung, dass ich mich auskenne!! Nicht ganz. Ich habe versucht, den Teil "alleMakrosExportieren" als eigenständiges Makro auszuführen. Da tauchte schon das erste Problem auf: beim Direktaufruf des Makros kann ich keinen Parameter angeben. Deshalb habe ich die Variable StDateiExport als Parameter entfernt und selbst definiert und gefüllt:
Dim StDateiExport As String
StDateiExport = "Muster aktuelle Daten"
Oder wie müsste diese Variable gefüllt sein???
ich habe auch folgenes versucht:
StDateiExport = "w:\aw\Muster aktuelle Daten.xlsm"
Immer bekomme ich den Laufzeitfehler 9 bei folgendem Befehl:
For Each vbc In Workbooks(StDateiExport).VBProject.VBComponents
Ein ratloser Werner?????

Anzeige
AW: Beispiel zum Export aller Makros gesucht
09.03.2015 19:11:04
Hajo_Zi
Hallo Werner,
ich hätte nur die Zeile
Import StZiel ' Import des Codes
aus kommentiert. Die Zeile macht auch das was der Name schon sagt. Den Import.
Gruß Hajo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige