Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1516to1520
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
Makro aus einer anderen Exceldatei "vererben"
13.10.2016 11:33:37
Christian
Hallo,
gibt es in Excel eine Funktion oder Möglichkeit ein Makro aus einer anderen Exceldatei in eine geöffnete Datei zu "vererben", ähnlich wie dies bei objektorientierten Programmiersprachen (Methoden und Prototypen) der Fall ist?
Hintergrund:
Ich habe in einer Exceldatei diverse Makros. Nun möchte ich aus dieser Datei diverse Schwesterdateien erzeugen, ohne in die Schwesterdateien die Makros zu kopieren. Falls nämlich ein Fehler im Makro auftaucht, oder eine Funktion hinzukommen würde, müsste jedes Makro in der Schwesterdatei angepasst werden, das wäre blanker Wahnsinn.
Vielen Dank für eure Rückmeldung!

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 13:00:00
Max
So zum Beispiel: (Das fettgedruckte ist das relevante

With Application.FileDialog(3)
If .Show Then
With Workbooks.Open(.SelectedItems(1))
.VBProject.VBComponents.Import Modul
.SaveAs Ordner & "\" & DateiName & ".xlsm", 52
.Close 0
End With
End If
End With
Modul ist hier eine String Variable
Modul = Ordner & "\" & "MinStAbwMid.bas"

AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 15:37:04
Christian
Hallo,
vielen Dank für die Rückmeldung.
Gibt es die Möglichkeit ein Modul direkt aus einer Exceldatei zu importieren?
Da ich mit Sharepoint arbeiten muss, kann ich keine .bas files ablegen (=verbotene Filetypen)
Viele Grüsse
Anzeige
AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 17:28:55
Bastian
Hey Christian so müsste das dann aussehen nicht gerade schön aber es geht ;)
Gruß Basti

Sub Start()
Call Makro_ExPort_import
Call CommandButton1_Click
End Sub
Private Sub CommandButton1_Click()
Call test ' hier wird das Kopierte Makro von Modul1 was sich noch auf der HauptMakro Excel  _
Datei befunden hat gestartet
End Sub
Sub Makro_ExPort_import() ' Verweis auf VB for Applications Extensibility  setzten
Dim objExportCodeModule As Object, objImportVBComponents As Object, WB As Workbook
Dim MODName As String
Application.DisplayAlerts = False
Ordner = "C:\Users\" & Environ("Username") & "\Desktop" ' Pfad zur HauptMakro Excel Datei
DateiName = "Mappe2.xlsm"                               ' Name der HauptMakro Excel Datei
MODName = "Modul1"                                      ' Name des Moduls in diesem Modul muss  _
ein Makro mit dem Namen Test sein weil es am ende dieses codes ausgeführt wird
Set WB = Workbooks.Open(Ordner & "\" & DateiName)
Set objExportCodeModule = WB.VBProject.VBComponents(MODName).CodeModule
Call VBkompSuche(ThisWorkbook, MODName)
Set objImportVBComponents = ThisWorkbook.VBProject.VBComponents.Add(1) ' 1=Standardmodul
objImportVBComponents.Name = MODName
With objImportVBComponents.CodeModule
.DeleteLines 1, .CountOfLines ' Vorsichtshalber alle Zeilen loeschen
.InsertLines 1, objExportCodeModule.Lines(1, objExportCodeModule.CountOfLines)
End With
Set objExportCodeModule = Nothing
Set objImportVBComponents = Nothing
WB.Close
Set WB = Nothing
Application.DisplayAlerts = True
End Sub
Function VBkompSuche(WB As Workbook, SuchName As String) As Boolean
Dim VBkomp As VBComponent
On Error Resume Next
With WB
For Each VBkomp In WB.VBProject.VBComponents
If VBkomp.Name = SuchName Then
VBkompSuche = True
VBkomp.Name = "DELETE"
.VBProject.VBComponents.Remove VBkomp
Exit Function
End If
Next VBkomp
End With
End Function

Anzeige
AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 13:40:51
Daniel
HI
erstelle mal die Schwesterdatei makrofrei und schreibe die Makros in eine eigene Datei.
die Makrodatei muss auf einem Verzeichnis liegen, auf das alle zugreifen können.
zum Start der Makros verwendest du Formularfeld-Buttons, welche du mit den Makros der Makrodatei verknüpfst.
wenn du dann so einen Button klickst, wird die Makrodatei im Hintergrund dazugeladen.
auf diese Weisen können alle Schwesterdateien die selbe Makrodatei verwenden, so dass du im Bedarfsfall nur diese ändern musst.
Nachteilig ist, dass das nur im Netzwerk funktioniert.
Gruß Daniel
AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 16:01:56
Christian
Hallo Daniel,
vielen Dank!
Wie sieht denn der nötige VBA code dazu aus? "Makrodatei im Hintergrund dazu laden!?"
Viele Grüsse
Anzeige
AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 16:25:14
Daniel
Hi
normalerweise sollte kein Code erforderlich sein.
Wenn du die Schwesterdatei erstellst, muss die Markodatei parallel geöffnet sein.
Wenn du dann einem Button ein Makro aus der Markodatei zuweist, merkt sich Excel dies und speichert die Verbindung automatisch mit.
sollte es nicht funktionieren, müssest du im Workbook.Open-Event der Schwesterdatei den Code:
Workbooks.Open "Pfad\...\Makrodatei.xlsb", readonly:=true
Thisworkbook.Activate

hinterlegen, damit die Makrodatei automatisch mit geöffnet wird.
sie muss natürlich auf einem für alle Nutzer zugänglichen Verzeichnis abgelegt sein.
Wie das mit eurem SharePoint harmoniert, kann ich dir aber auch nicht sagen.
gruß Daniel
Anzeige
AW: Makro aus einer anderen Exceldatei "vererben"
13.10.2016 15:10:53
baschti007
Halli Hallo
Man Könnte das so machen Gruß basti

Sub Start()
Call Makro_ExPort_import
Call CommandButton1_Click
End Sub
Sub Makro_ExPort_import() ' Verweis auf VB for Applications Extensibility  setzten
Dim MODName As String
Application.DisplayAlerts = False
On Error Resume Next
Ordner = "C:\Users\" & Environ("Username") & "\Desktop" ' Pfad zur HauptMakro Excel Datei
DateiName = "Mappe2.xlsm"                               ' Name der HauptMakro Excel Datei
MODName = "Modul1"                                      ' Name des Moduls
Modul = Ordner & "\" & MODName & ".bas"                 ' Pfad und NAme des Moduls
With Workbooks.Open(Ordner & "\" & DateiName)
With .VBProject.VBComponents(MODName)
.Export Modul
Call BestimtenVBEKomponentenEntfernen(Workbooks(ThisWorkbook.Name),  _
MODName)
With ThisWorkbook
.VBProject.VBComponents.Import Modul
.SaveAs .Path & "\" & .Name, 52
End With
End With
.Close
End With
Application.DisplayAlerts = True
End Sub
Sub BestimtenVBEKomponentenEntfernen(wb As Workbook, SuchName As String)
Dim VBkomp As VBComponent
On Error Resume Next
With wb
For Each VBkomp In wb.VBProject.VBComponents
If VBkomp.Name = SuchName Then
VBkomp.Name = "DELETE"
.VBProject.VBComponents.Remove VBkomp
Exit Sub
End If
Next VBkomp
End With
End Sub
Private Sub CommandButton1_Click()
Call Test ' dieses ist das Makro auf der Hauptdatei im Modul
End Sub

Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige