Live-Forum - Die aktuellen Beiträge
Datum
Titel
07.05.2024 16:36:49
07.05.2024 14:51:38
07.05.2024 13:27:17
Anzeige
Archiv - Navigation
1924to1928
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

Neue Datei + Workbook Object Makro

Neue Datei + Workbook Object Makro
19.04.2023 09:32:19
Pascala

Hallo zusammen,

ich würde gerne eine neue Excel Datei erzeugen die im Workbook Object ein Makro enthält.

Folgenden Code habe ich um ein Modul hinzuzufügen:

    Dim vbMod As Object
    
    'Makro-Modul hinzufügen
    Set vbMod = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).CodeModule
    
    'Code in das Modul einfügen
    vbMod.InsertLines vbMod.CountOfLines + 1, "Sub TestMakro()" & vbCrLf & _
                                   "   MsgBox ""Dies ist ein Test-Makro in dieser Arbeitsmappe!""" & vbCrLf & _
                                   "End Sub"
    
    'Meldung anzeigen
    MsgBox "Das Makro wurde in der Arbeitsmappe gespeichert."


Wie müsste ich den Code umbauen damit kein Modul erstellt wird sondern es in das Workbook event geschirben wird?

Danke für die Hilfe!

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

Betreff
Datum
Anwender
Anzeige
AW: Neue Datei + Workbook Object Makro
19.04.2023 10:39:00
Yal
Hallo Pascala,

eigentlich schon alles richtig gemacht.
In den speziellen Code-Module auf Workbook-Ebene ("DieseArbeitsmappe") oder Worksheets-Ebene ("Tabelle1", ..) sollte man allerdings nur für Ereignis-Behandlung verwenden (so die Best Practice). Daher ist es richtig, diese Makro in einem allgemeine Module abzulegen.

Gibt es einen speziellen Grund, warum Du den Code im Workbook-Modul haben möchtest?

VG
Yal


AW: Neue Datei + Workbook Object Makro
19.04.2023 11:19:56
Pascala
Hallo Yal,

vielen Dank für deine Antwort!

Die neu erzeugten Excel Dateien sind Lieferscheine und ich möchte bei den Ereignisse BeforPrint und BeforSave noch einige dinge erledigen lassen.
Leider sind diese Ereignisse nur auf Worksheet-Ebene umsetzbar, deshalb soll das Makro in die Workseet-Ebene.

Danke und viele Grüße,
Pascala


Anzeige
AW: Neue Datei + Workbook Object Makro
19.04.2023 11:41:45
Yal
Hallo Pascala,

im Projektfenster siehst Du Einträge in Form
"Code1(Tabelle1)"
der erste Teil "Code1" ist der Name der Modul, der zweite, der Name des Objekts, worauf es sich bezieht (in dem Fall das Blatt "Tabelle1"). Der VBProjekt-Verwaltung selbst macht keine Verbindung zwischen beiden, sodass eine Zugriff über den Blattname nicht möglich ist. Per Default werden die Codemodule fortlaufent mit "Tabelle1", "Tabelle2", usw. benannt. Diese Namen können geändert werden, ohne dass das Blatt umbenannt wird.

Mit
Sub Module_auflisten()
Dim vbMod

'Auflistung der Modulnamen
    For Each vbMod In ActiveWorkbook.VBProject.VBComponents
        Debug.Print vbMod.Name
    Next
End Sub
Kannst Du alle Module auflisten.

Wenn Du dein Ziel-Modul isoliert hast, kannst Du so den Code reinschreiben:
Sub Code_reinschreiben()
Const cCode = "Sub TestMakro()|   MsgBox ""Dies ist ein Test-Makro in dieser Arbeitsmappe!""|End Sub"

'reinschreiben
    With ActiveWorkbook.VBProject.VBComponents("Tabelle3").CodeModule
        .InsertLines vbMod.CountOfLines + 1, Join(Split(cCode, "|"), vbCrLf)
    End With
End Sub
VG
Yal


Anzeige
Ergängzung
19.04.2023 11:52:06
Yal
Natürlich viel zu schnell gelabert: Es gibt selbstverständlich eine Verbindung zwischen Blatt und Code, aber diese ist nicht seitens VBProject zu suchen, sondern seitens Worksheet:

Sub VonBlattNameZuCodeName()
Dim T
    For Each T In Worksheets
        Debug.Print T.Name, T.CodeName
    Next
End Sub
Der Codename entspricht der Name des Moduls.

Also:
Sub Code_reinschreiben()
Const cCode = "Sub TestMakro()|   MsgBox ""Dies ist ein Test-Makro in dieser Arbeitsmappe!""|End Sub"

    With ActiveWorkbook.VBProject.VBComponents(Worksheets("Tabelle1").CodeName).CodeModule
        .InsertLines vbMod.CountOfLines + 1, Join(Split(cCode, "|"), vbCrLf)
    End With
End Sub
Du könntest auch prüfen, wie der Code aus einem vorhandenen Modul gelesen werden kann, um so ein Art von Copy-Paste zu haben. Weil der Form "Code-fest-im-Code-geschreiben" wird schnell mühsam werden. Es gibt auch anstatt "InsertLines" einen "AddFromFile".

VG
Yal


Anzeige
AW: Ergängzung
19.04.2023 14:56:42
Pascala
Hallo Yal,

ich glaube mir ist aufgefallen das wir aneinander vorbei reden.
Und zwar möchte ich eine Datei erstellen und direkt in das Workbook eine Makro schreiben.
Ich habe es hinbekommen deinen Code zu nutzen jedoch fügt er das Makro in ein Worksheet ein und nicht in das Workbook.

Hast du hierzu eine Idee?


AW: Ergängzung
19.04.2023 15:05:35
Yal
Hallo Pascala,

Du musst den "ActiveWorkbook" durch den Zielworkbook erstezen.
Wenn Du die Datei erzeugst, nehme den Bezug dazu in einer Variable:

Set myWB = Workbooks.Add ("NameDerTemplate.xlsx")
With myWB.VBProject. ...

VG
Yal


Anzeige
AW: Neue Datei + Workbook Object Makro
19.04.2023 13:16:12
Pascala
Hallo Yal,

vielen Dank für deine Antwort!

bei folgender Zeile bekomme ich die Fehlermeldung: "Object erforderlich" Code Zeile: .InsertLines vbMod.CountOfLines + 1, Join(Split(cCode, "|"), vbCrLf)

Hast du hierfür zufällige eine Idee?

Viele Grüße,
Pascala

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige