Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA-Code Module vergleichen

VBA-Code Module vergleichen
26.08.2020 21:13:26
Pepi
Hallo zusammen
Ich habe in meinem VBA-Projekt (Makro-VBA-Code-ändern.xlsm + Personal.xlsb) je ein Modul mit dem Namen "z_Tools"
Jetzt möchte ich "z_Tool" von Personal.xlsb nach Makro-VBA-Code-ändern.xlsm kopieren, wenn es neuer ist (Datum steht auf 1. Zeile!
Userbild
Ich habe folgendes Makro gefunden
Sub Test_Herber()
Dim i&, z&, sLin, sTmp$, oVBE As Object
For i = 1 To ThisWorkbook.VBProject.VBE.CodePanes.Count
Set oVBE = ThisWorkbook.VBProject.VBE.CodePanes(i).CodeModule
sTmp = sTmp & Format(i, "00.) ") & oVBE & vbLf
Next i
MsgBox sTmp 'ThisWorkbook.VBProject.VBE.CodePanes(i).CodeModule
End 

Sub  'Test_Herber()
Ich dachte, dass es alle Module einliest "oVBE" - gemäss Screenshoot aber leider nicht!
Auch habe ich nicht rausgefunden, wie man den ProjektNamen (zB Personal.xlsb) ermittelt, damit  _
ich weiss aus welchem Projekt "z_Tools" ist.
Hat jemand einen Tipp, wie ich herausfinden kann, welches Modul neuer ist und wie ich es  _
kopieren kann?
Einfaches Problem, doch schwierig zu erklären - Sorry - vielen Dank für Eure Hilfe
Pepi



		
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code Module vergleichen
27.08.2020 04:05:09
fcs
Hallo Pepi,
nachfolgend ein entsprechendes Makro.
Beispiel-Datei mit der ich getestet hab.
https://www.herber.de/bbs/user/139857.xlsm
LG
Franz
Sub Copy_Modul_z_Tool()
Dim sLin, sTmp$
Dim oVBE As Object ' VBE
Dim varCodePane As Object ' CodePane
Dim oVBComponent As Object ' VBComponent
Dim DatumPersonal As Date, Datum_Me As Date
On Error GoTo Fehler
With Application.Workbooks("PERSONAL.XLSB").VBProject
Set oVBComponent = .VBComponents("z_tools")
With oVBComponent.CodeModule
sTmp = .Lines(1, 1) '1. Zeile im Code-Modul
sLin = .Lines(1, .CountOfLines)
End With
DatumPersonal = CDate(Trim(Mid(sTmp, 2)))
End With
With ThisWorkbook.VBProject 'Application.Workbooks("Makro-VBA-Code-ändern.xlsm")
Set oVBComponent = .VBComponents("z_tools")
sTmp = oVBComponent.CodeModule.Lines(1, 1) '1. Zeile im Code-Modul
Datum_Me = CDate(Trim(Mid(sTmp, 2)))
End With
If Datum_Me 

Anzeige
AW: VBA-Code Module vergleichen
27.08.2020 19:59:36
Pepi
Hallo Franz
ganz lieben Dank für deine grosse Arbeit, mir ein vollständiges Programm zu liefern - du hast mein Anliegen genau erfasst.
Leider habe ich Fehlermeldungen, obwohl ich den Haken im VBA-Editor gesetzt haben
zB
Set wkb(2) = Application.Workbooks("Makro-VBA-Code-ändern.xlsm")
Fehler: Index ausserhalb gültiger Bereich
sTmp = sTmp & vbLf & wkb1.Name & vbLf
Fehler: Objektvariable nicht festgelegt
vielleicht finde ich es noch raus, waran es liegt - bei dir hat es offenbar funktioniert
vielleicht hast du noch für mich noch einen Tipp
trotzdem vielen Dank
mfg Pepi
Anzeige
AW: VBA-Code Module vergleichen
27.08.2020 20:44:26
fcs
Hallo Pepi,
in der Zeile
Set wkb(2) = Application.Workbooks("Makro-VBA-Code-ändern.xlsm")

musst du auf die korrekte Schreibweise des Dateinamens achten. bzw. die Datei muss geöffnet sein.
Wenn das Makro in der Datei gespeichert ist, in der das Module "z_Tools" aktualisiert werden soll, dann kannst du auch folgende Anweisung verwenden:
  Set wkb(2) = ThisWorkbook

Wenn du nur die VBA-Module in der aktiven Arbeitsmappe anzeigen möchtest,dann etwa so:
Sub VBA_Module_Activeworkbook()
'Liste die VBA-Module in beiden Dateien
Dim i&, sTmp$
Dim oVBE As Object ' VBE
Dim varCodePane As Object ' CodePane
Dim oVBComponent As Object ' VBComponent
Dim wkb1 As Workbook, varType As Variant 'vbext_componenttype
Set wkb1 = ActiveWorkbook
i = 0
sTmp = sTmp & vbLf & wkb1.Name & vbLf
For Each oVBComponent In wkb1.VBProject.VBComponents
With oVBComponent
varType = .Type
i = i + 1
sTmp = sTmp & Format(i, "00"".) """) & .Name & " - Type: " & varType & vbLf
Select Case varType
Case 1 'vbext_ct_StdModule  _ Standard-Module
Case 2 'vbext_ct_ClassModule - Klassenmodule
Case 3 'vbext_ct_MSForm - Userformen
Case 11 'vbext_ct_ActiveXDesigner
Case 100 'vbext_ct_Document - DieseArbeitsmappe, Tabellenblätter
End Select
End With
Next
MsgBox sTmp, vbOKOnly, "VBA-Module in aktiver Arbeitsmappe "
End Sub
LG
Franz
Anzeige
AW: VBA-Code Module vergleichen
29.08.2020 14:36:00
Pepi
Danke lieber Franz
Es hat zwar etwas gedauert, aber jetzt laufen beide Makros bestens
PS der Fehler 13 kam vom ausgelesenen Datum - ich musste da den Code noch anpassen, weil ich das Datum anders geschrieben habe als du angenommen (konntest du ja nicht wissen) - supper Makro - jetzt habe ich immer die aktuellen Makros in jeder Mappe
lg Pepi
Anzeige
;
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige