Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1540to1544
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

Module aus AddIn einlesen

Module aus AddIn einlesen
09.02.2017 11:19:39
Peter
Liebe Experten,
ich bitte um Eure Hilfe.
Ich habe eine Datei Test1.xlsm. In dieser Datei befinden sich ca. 15 Module. Wird diese Datei unter Test2 abgespeichert werden die Module natürlich mit abgespeichert.
Mittlerweile habe ich ca. 150 Dateien.
Wenn nun ein Modul in z.B. Test50 geändert wird, dann müsste ich das Modul in allen 150 Dateien verändern.
Daher habe ich ein Addin "TestMod" erstellt in dem sich alle Module der Test1 befinden.
Nun soll eine beliebige Datei z.B. Test5 beim Speichern alle Module löschen und beim Öffnen alle Module aus TestMod einlesen.
Geht das irgendwie mit VBA?
Für Eure Hilfe bedanke ich mich voraus!
LG, Peter

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Module aus AddIn einlesen
09.02.2017 17:25:37
Peter
Hallo Zusammen,
vielleicht habe ich mich schlecht ausgedrückt.
Eigentlich möchte ich beim Öffnen einer Datei alle Module aus der AddIn (TestMod) in die aktuelle Datei per VBA importieren.
Das AddIn wird vorher geöffnet.
Geht das?
LG, Peter
AW: Alle Module aus AddIn einlesen
09.02.2017 17:59:48
Hajo_Zi
Hallo Peter,
Ja, das war ja nur die Frage.
Der Zugriff auf das VBA Projekt muss zugelassen sein.
Dazu gebe ich keine Auskunft, da dies Tief in die Sicherheit geht.

AW: Alle Module aus AddIn einlesen
09.02.2017 19:26:45
Peter
Hallo Hajo,
vielen Dank für deine Antwort.
Das AddIn habe ich sebst erstellt und es ist nicht gesichert.
Ich möchte meine eigenen Module importieren.
Das Problem ist, ich habe eine Masterdatei erstellt.Diese Masterdatei wird immer wieder, nach dem die Werte aktualisiert wurden unter einem neuen Namen (xlsm) gespeichert. Wenn ich nun in der Masterdatei ein Modul optimiere muss ich das Modul in meinen mittlerweile anderen ca. 150 Dateien manuell anpassen.
Daher habe ich ein AddIn (TestMod) erstellt. Soweit alles OK. Das AddIn wird auch beim Öffnen einer der anderen Datei automatisch mitgeöffnet und ich kann das entsprechende aktualisierte Modul im VBA-Exporer manuell in meine neue Datei kopieren.
Bei 150 Dateien ist das sehr zeitraubend. Deshalb möchte ich die eigenen Module aus dem AddIn immer wenn ich eine der anderen Dateien öffene per Makro automatisch importieren.
LG, Peter
Anzeige
AW: Alle Module aus AddIn einlesen
09.02.2017 21:16:52
littletramp
Hallo Peter
Ich habe verschiedene Projekte, die z.T. bei einer grösseren Anzahl Kunden laufen. Da ist dann das Updaten des Codes, wenn sich dieser in allen Dateien befindet wie bei dir, nicht mehr möglich.
Um das Problem zu lösen, befindet sich bei mir der eigentliche Code in einem passwortgeschützten AddIn. Die anderen Dateien rufen nur die jeweiligen im AddIn befindlichen Prozeduren auf.
Der AddIn kann auch Ereignisprozeduren enthalten (auf Applikationsebene), die auf Ereignisse der anderen Dateien reagieren. Dazu muss aber erkannt werden, ob es sich um eine der zu kontrollierenden Dateien handelt. Dies löse ich, indem ich bei den Dateien einen eindeutigen Namen (Namensmanager) festlege.
Muss der AddIn nur auf Ereignisse reagieren, so können die anderen Dateien sogar codefrei sein.
Somit reicht es bei Änderungen am Code, die AddIn Datei zu ersetzen.
Ich hoffe dies gibt dir eine Idee wie du das Problem lösen kannst.
Gruss Markus
Anzeige
AW: Alle Module aus AddIn einlesen
09.02.2017 22:02:17
Peter
Hallo Markus,
ich bin ein VBA-Anfänger.
Ich möchte alle Makros, die sich in ca. 15-20 Modulen befinden die in der AddIn sind in die aktuelle Datei importieren.
Muss ich das AddIn erstmal schützen damit ich die Makros importieren kann und
wie sieht der VBA-Code aus um alle Module aus dem AddIn (TestMod) zu importieren?
Diesen VBA-Code müsste ich wahrscheinlich in "DieseArbeitsmappe" legen?
LG, Peter
AW: Alle Module aus AddIn einlesen
10.02.2017 00:10:27
Piet
Hallo Peter,
kennst du Katja? Es war dieser Thread: - Lies ihn bitte durch, ga gibt es auch eine Beispieldatei von mir.
1497153 Makros in viele Dateien übertragen - Katja 06.06.2016 14:01:30
Makro in 1000 Dateien auswechseln https://www.herber.de/bbs/user/106073.xls 
Damals flog ich in Urlaub und habe nicht mehr mitbekommen ob alles einwandfrei lief. Es ging, wenn ich mich richtig erinnere, auch nur um kopieren in ein Modulblatt. Die Datei laesst sich aber sicher auf dein Problem umschreiben. Dazu schicke mir bitte mal eine kleine Liste mit allen Modulnamen, in die kopiert werden soll. Die gesamte Datei, inklusive Makros, kannst du mit der beigefügten Datei auflisten. Wenn du mir mal eine Beispieldatei mit den Modulnamen schickst kann ich an einer Lösung arbeiten. Ob und wie man das auch in ein ADDIns bekommt weiss ich nicht, damit habe ich noch nicht gearbeitet. Können wir ja mal aus probieren.
Ich brauche aber etwas Zeit dafür, habe soziale Pflichten.
mfg Piet
https://www.herber.de/bbs/user/111356.xlsm
Anzeige
AW: Alle Module aus AddIn einlesen
10.02.2017 00:22:46
littletramp
Hallo Peter
Damit du die Module kopieren kannst musst du die Sicherheitseinstellungen verändern (siehe dazu auch Hajo's Antwort). Du musst den Zugriff auf das VBA-Projektobjektmodell zulassen. Dies ist aber eine gefährliche Einstellung, die ich nicht empfehlen würde.
Ich nehme mal an, dass du deine Makros in der Firma einsetzen möchtest. Dann wird das Ändern dieser Einstellung mit grösster Sicherheit sowieso nicht freigegeben sein.
Deshalb war mein Rat, den Code in einen AddIn auszulagern.
Wenn du weiterhin deinen Lösungsansatz verfolgen möchtest, so könnte ich dir ein Demoprojekt mit den benötigten Routinen erstellen.
Gruss Markus
Anzeige
AW: Module aus AddIn einlesen
10.02.2017 10:33:46
littletramp
Hallo Peter
Hier der versprochene Code (Download-Link: https://www.herber.de/bbs/user/111362.xlsm -> Code in DieseArbeitsmappe).
Im Code muss der Name der Quelldatei angepasst werden (siehe 'TODO: )
Falls der Code in einem anderen Projekt verwendet wird, so muss ein Verweis auf die "Microsoft Visual Basic for Applications Extensibility" Objektbibliothek erstellt werden (in IDE -> Menü Extras | Verweise).
Der Code darf sich nicht in einem Standardmodul befinden, da dieses sonst ebenfalls gelöscht wird!!!
Private Sub Demo()
Const cQuellDateiName = "MAS_CodeElementeEinfügen.xlam" 'TODO: Name anpassen
' Komponenten importieren
ImportVBComponents NameSourceProjectFile:=cQuellDateiName, _
DeleteExistingComponents:=True
End Sub
Private Sub DeleteVBComponents()
Dim vbcItem As VBComponent
For Each vbcItem In ThisWorkbook.VBProject.VBComponents
' Standardmodule, UserForms und Klassenmodule löschen
Select Case vbcItem.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, vbext_ct_ClassModule
ThisWorkbook.VBProject.VBComponents.Remove vbcItem
End Select
Next
' Aufräumen
Set vbcItem = Nothing
End Sub
' Wenn DeleteExistingComponents True ist, so werden vor dem
' Importieren die bestehenden Komponenten gelöscht werden!
Private Sub ImportVBComponents(ByVal NameSourceProjectFile As String, _
Optional DeleteExistingComponents As Boolean = False)
Dim vbcItem As VBComponent
Dim wbkSource As Workbook
Dim strTempFile As String
If DeleteExistingComponents Then DeleteVBComponents
strTempFile = ThisWorkbook.Path & "\Temp"   ' !!! ohne Extension!
' Bestehende Log-Datei löschen
If Len(Dir(strTempFile & ".log")) Then Kill strTempFile & ".log"
Set wbkSource = Workbooks(NameSourceProjectFile)
For Each vbcItem In wbkSource.VBProject.VBComponents
Select Case vbcItem.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, vbext_ct_ClassModule
' Komponente exportieren
vbcItem.Export strTempFile & ".tmp"
' Komponente importieren
ThisWorkbook.VBProject.VBComponents.Import strTempFile & ".tmp"
' Temp-Dateien löschen
If Len(Dir(strTempFile & ".tmp")) Then Kill strTempFile & ".tmp"
If Len(Dir(strTempFile & ".frx")) Then Kill strTempFile & ".frx"
End Select
Next
' Prüfen ob Import-Fehler auftraten
If Len(Dir(strTempFile & ".log")) Then
MsgBox "Beim Importieren sind Fehler aufgetreten!" & vbLf & vbLf _
& "Details siehe:" & vbLf _
& strTempFile & ".log", _
vbExclamation
End If
'--- Aufräumen ---
Set wbkSource = Nothing
Set vbcItem = Nothing
End Sub
Gruss Markus
Anzeige
AW: Module aus AddIn einlesen
10.02.2017 10:36:42
littletramp
Noch ein Nachtrag:
Das VBA-Projekt der Ziel- und Quelldatei darf nicht passwortgeschützt sein!
AW: Module aus AddIn einlesen
10.02.2017 12:44:27
littletramp
Und noch ein Nachtrag:
Der Zugriff auf das VBA-Projektobjektmodel muss natürlich auch aktiviert sein!
Mehr dazu siehe hier: https://support.office.com/de-de/article/Aktivieren-oder-Deaktivieren-von-Makros-in-Office-Dateien-12B036FD-D140-4E74-B45E-16FED1A7E5C6#__toc311698312
AW: Module aus AddIn einlesen
10.02.2017 13:31:17
Peter
Hallo Markus,
superb!
Alle Module werden so wie ich es mir vorgestellt habe eingelesen!
Ein kleine Frage. Wenn die neuen aktualisierten Module in die Datei eingelesen werden, werden die alten überschrieben?
Super, wenn ja!
LG, Piotr
Anzeige
AW: Module aus AddIn einlesen
10.02.2017 14:49:46
littletramp
Hallo Peter
Wenn noch alte Module da sind, und neue Module mit gleichem Namen importiert werden, so wird der Name des neuen Moduls mit einem Index versehen. Dies ist auch der Grund, weshalb ich zuerst die alten Module lösche. Siehe Codezeile:
 If DeleteExistingComponents Then DeleteVBComponents

Bei UserForms entsteht ein Laufzeitfehler, und es wird ein Log-File erstellt.
Gruss Markus
AW: Module aus AddIn einlesen
10.02.2017 14:56:18
Peter
Hallo Markus,
vielen, vielen Dank für deine Hilfe!
Wünsche ein schönes Wochenende.
LG, Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige