bas-Datei in Excelmappe importieren

Dieser Thread ist Teil einer Diskussion zu einem Artikel:  Zum News-Artikel gehen

Miniturtle

Stammgast
Hallo zusammen!

Ich bin auf der Suche nach einem Makro mit dem man eine bas-Datei (vordefiniertes Makro) in eine Excelmappe importieren kann. Momentan habe ich dies mit dem Befehl "ThisWorkbook.VBProject.VBComponents.Import ("E:\Neuer Ordner\Modul3.bas")" zu Laufen bekommen, was bei mir aber lediglich zum Einfügen in der Modulebene funktioniert.

1. Frage: Gibt es eine Möglichkeit z.B. ein "Private Sub Worksheet_Change(ByVal Target As Excel.Range)"-Makro in ein bestimmtes Tabellenblatt einzufügen?
2. Frage: Gibt es eine Möglichkeit vorab abzufragen ob dieses Makro in dem Tabellenblatt schon vorhanden ist?
3. Frage: Gibt es eine Möglichkeit vorab abzufragen ob ein bestimmtes Makro in der Modulebene vorhanden ist?

Bei Frage 1 wäre es von Vorteil, besser sogar nötig, wenn das über den Tabellenblattname und nicht über den Tabellenindex funktionieren würde.

Hintergrund meiner Fragen ist dass ich viele xlsx-Dateien habe (ca. 100 Stk.) die vom Aufbau gleich sind aber unterschiedlichen Inhalt haben, diese sollen jetzt mit Makros versehen werden. Ich möchte mir eine Möglichkeit zusammenbauen mit der ich mittels aus einer Excelmappe heraus jeweils eine von diesen Dateien öffne und in der dann automatisiert mehrere Makros importiert werden sollen, anschliessend soll die Datei dann im xlsm-Format gespeichert werden. Zu diesem Zeitpunkt sind diverse Tabellenblätter noch nicht vorhanden, diese werden bei erneuten Starten erstellt und jetzt soll z.B. ein Makro ("Private Sub Worksheet_Change(ByVal Target As Excel.Range)") in ein bestimmtes Tabellenblatt importiert werden.

Ggf. kann man die zusätzlich nötigen Tabellenblätter auch direkt nach dem Speichern im xlsm-Format erstellen, anschliessend die Makros einfügen und erneut abspeichern

Hauptsächlich geht es mir vorrangig um Antworten zu den o.g. Fragen, der Text soll nur zur Erklärung dienen.

MfG Maik
 

nochEinAndreas

Stammgast
Gute Abend Maik,

ich kann dir die erste Frage mit "ja, aber" beantworten, die zweite mit "ja" und die dritte wieder mit "ja, aber":

1. Ich fange mit dem "aber" an: Die Prozedur, die du in ein Tabellenblatt einfügen willst, darfst du nicht vorher über "Datei exportieren" erzeugt haben. Statt dessen kopiere den Code der Prozedur, füge ihn in einen .txt-Datei ein, und speichere sie, z.B. als Prozedur.txt
Und jetzt kommt das "ja": Dann kannst du mit folgendem Code die Prozedur in eine Tabelle laden:
Code:
Workbooks("Name der Mappe").VBProject.VBComponents("Tabelle1").CodeModule.AddFromFile("Prozedur.txt")
Hierbei ist "Tabelle1" der Codename der Tabelle, wo es rein soll.

2. Um abzufragen, ob eine Prozedur z.B. in der Tabelle1 schon vorhanden ist, benutze:
Code:
If Workbooks("Name der Mappe").VBProject.VBComponents("Tabelle1").CodeModule.Find("Sub Prozedurname",1,1,-1,-1) Then ...

3. Wenn du ein Makro in der Modul-Ebene suchst, geht das hiermit:
Code:
Option Explicit

Sub prozedurInStandardModulenFinden()
    Dim modul As Object
   
    For Each modul In Workbooks("Name der Mappe").VBProject.VBComponents
        If modul.Type = 1 Then
            If modul.CodeModule.Find("Sub prozedur()", 1, 1, -1, -1) Then _
                MsgBox "'Sub prozedur()' steht in Standardmodul " & modul.Name
        End If
    Next modul
End Sub

Aber: Der Code darf nicht in der Mappe stehen, in der du suchst. Sonst findet er sich selber.

Gruß, Andreas
 
Zuletzt bearbeitet:

Miniturtle

Stammgast
Hi Andreas,

Sorry für die Späte Antwort, aber das Projekt mit dem bas-Datei-Import lag in der letzten Zeit auf Grund von Zeitmangel still.

Trotzdem Danke für Deine schnelle Antwort!

Ich werde das mal in den nächsten Tagen testen.

MfG Maik
 
Oben