Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code programmtechnisch generieren

Forumthread: VBA Code programmtechnisch generieren

VBA Code programmtechnisch generieren
07.08.2005 19:08:33
Josef
Hallo!
Mit folgendem Code kann man mittels VBA einen VBA Code programmtechnisch in word generieren:

Sub ModulErstellen()
'On Error Resume Next
Q = Chr(34) 'Gänsefüsschen
Set MyModule = ActiveDocument.VBProject.VBComponents.Add(vbext_ct_StdModule)
With MyModule
.Name = "Pipapo"
With .CodeModule
.InsertLines 1, "

Sub HalloWelt()"
.InsertLines 2, "MsgBox " & Q & "Hallo Welt!" & Q & " ,vbExclamation"
.InsertLines 3, "End Sub
"
End With
End With
End Sub

Wo müßte man hier dieses Makro ändern , damit es auch in Excel funktioniert:
Mit

Sub ModulErstellen()
'On Error Resume Next
Q = Chr(34) 'Gänsefüsschen
Set MyModule = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
With MyModule
.Name = "Pipapo"
With .CodeModule
.InsertLines 1, "

Sub HalloWelt()"
.InsertLines 2, "MsgBox " & Q & "Hallo Welt!" & Q & " ,vbExclamation"
.InsertLines 3, "End Sub
"
End With
End With
End Sub

erhalte ich immer eine Fehlermeldung bei .Add obwohl es Add(vbext_ct_StdModule) in Excel laut Hilfe gibt.
Danke
Josef
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Code programmtechnisch generieren
07.08.2005 19:14:06
Leo
Hi,
statt ActiveDocument ActiveWorkbook
mfg Leo
AW: VBA Code programmtechnisch generieren
07.08.2005 19:28:08
Josef
Hallo Leo!
Mit dem folgenden Code erehalte ich folgende Fehlermeldung:

Sub ModulErstellen()
'On Error Resume Next
Q = Chr(34) 'Gänsefüsschen
Set MyModule = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
With MyModule
.Name = "Pipapo"
With .CodeModule
.InsertLines 1, "

Sub HalloWelt()"
.InsertLines 2, "MsgBox " & Q & "Hallo Welt!" & Q & " ,vbExclamation"
.InsertLines 3, "End Sub
"
End With
End With
End Sub

Die Methode Add für das Object VBComponents ist fehlgeschlagen.
Josef
Anzeige
AW: VBA Code programmtechnisch generieren
07.08.2005 19:35:20
Josef
Hallo Leo!
Habs gefunden:
Unter Verweise muß man
Microsoft Visual Basic for Applications Extensibility
aktivieren,dann funktinierts.
Danke
Josef
AW: VBA Code programmtechnisch generieren
07.08.2005 19:36:39
Leo
Hi,
hast du den Verweis auf die Microsoft Visual Basic 6.0 Extensibility gesetzt?
mfg Leo
AW: VBA Code programmtechnisch generieren
07.08.2005 19:45:04
Josef
Hallo Leo!
Der Code läuft bereits un das Makro wird in der aktiven Arbeitsmappe in einem modul mit dem Namen Pipao generiert.
Jetzt hätte ich dazu bitte noch ein paar Fragen:
1.) Wie müßte ich vorgehen, damit das Makro in einem Arbeitsblatt z.B. Tabelle1 generiert wird?
2.) wenn ich zuerst mittels VBA eine neue Arbeitsmappe erzeuge, wird dann der Code aufgrund "ActiveWorkbook" in dieser Arbeitsmappe in Tabelle1 erzeugt?
Josef
Anzeige
AW: VBA Code programmtechnisch generieren
07.08.2005 19:54:00
Leo
Hi,
wenn du ein Workbook erzeugst, ist es aktiv, das spielt aber keine Rolle, wenn du eine
Objektvariable verwendest:

Sub WB_Code_via_VBA()
Const WS      As String = "Tabelle1"
Dim WB        As Workbook
Dim VBC       As Object
Dim LineNr
Set WB = Workbooks.Add(1)
With WB.VBProject.VBComponents(WS).CodeModule
LineNr = .CreateEventProc("Activate", "Worksheet")
.InsertLines LineNr + 1, "''Code wurde durch Makro eingefügt!"
.InsertLines LineNr + 2, "MsgBox ""Ich werde durch Worksheet_activate angezeigt!          "", 64, ""Hinweis..."""
End With
End Sub

mfg Leo
Anzeige
AW: VBA Code programmtechnisch generieren
07.08.2005 19:59:49
Josef
Hallo Leo!
Besten Dank für Deine Hilfe. Funktioniert bestens.
Schönen Abend noch
Josef
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Code programmtechnisch generieren


Schritt-für-Schritt-Anleitung

Um VBA Code programmtechnisch in Excel zu generieren, kannst du folgende Schritte befolgen:

  1. Verweise aktivieren:

    • Gehe zu Entwicklertools > Visual Basic.
    • In der VBA-Umgebung, klicke auf Extras > Verweise.
    • Aktiviere den Eintrag Microsoft Visual Basic for Applications Extensibility.
  2. Code einfügen:

    • Öffne ein neues Modul: Einfügen > Modul.
    • Füge den folgenden VBA Code ein:
    Sub ModulErstellen()
       Dim Q As String
       Q = Chr(34) 'Gänsefüsschen
       Set MyModule = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
       With MyModule
           .Name = "Pipapo"
           With .CodeModule
               .InsertLines 1, "Sub HalloWelt()"
               .InsertLines 2, "MsgBox " & Q & "Hallo Welt!" & Q & ", vbExclamation"
               .InsertLines 3, "End Sub"
           End With
       End With
    End Sub
  3. Makro ausführen:

    • Führe das Makro ModulErstellen aus, um den Code in der aktiven Arbeitsmappe zu generieren.

Häufige Fehler und Lösungen

  • Fehlermeldung bei .Add: Falls du die Fehlermeldung "Die Methode Add für das Objekt VBComponents ist fehlgeschlagen" erhältst, überprüfe, ob der Verweis auf Microsoft Visual Basic for Applications Extensibility gesetzt ist.

  • Falsches Objekt: Stelle sicher, dass du ActiveWorkbook oder ThisWorkbook korrekt verwendest. In den meisten Fällen ist ThisWorkbook die bessere Wahl, um sicherzustellen, dass der Code im aktuellen Arbeitsbuch gespeichert wird.


Alternative Methoden

Eine alternative Methode zur Generierung von VBA Code kann die Verwendung von Excel VBA Scripts sein, die in einer externen Datei gespeichert sind. Du kannst diese Skripte dann durch einen Import in dein VBA-Projekt einfügen.

Sub ImportVBA()
    Dim vbComp As VBComponent
    Set vbComp = ThisWorkbook.VBProject.VBComponents.Import("C:\Path\To\Your\Code.bas")
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du einen Code in ein spezifisches Arbeitsblatt (z.B. Tabelle1) einfügen kannst:

Sub WB_Code_via_VBA()
    Const WS As String = "Tabelle1"
    Dim WB As Workbook
    Dim LineNr As Long
    Set WB = Workbooks.Add(1)
    With WB.VBProject.VBComponents(WS).CodeModule
        LineNr = .CreateEventProc("Activate", "Worksheet")
        .InsertLines LineNr + 1, "''Code wurde durch Makro eingefügt!"
        .InsertLines LineNr + 2, "MsgBox ""Ich werde durch Worksheet_activate angezeigt!"", 64, ""Hinweis..."""
    End With
End Sub

Tipps für Profis

  • Nutze vbext_ct_StdModule, um sicherzustellen, dass dein Modul korrekt erstellt wird.
  • Verwende With-Blöcke, um den Code lesbarer zu gestalten und die Performance zu verbessern.
  • Teste deine Skripte in einem geschützten Arbeitsbuch, um unerwartete Änderungen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich den generierten Code später wieder ändern?
Du kannst den Code einfach im VBA-Editor öffnen und die gewünschten Änderungen vornehmen.

2. Ist es möglich, VBA Code in mehreren Modulen gleichzeitig zu generieren?
Ja, du kannst die Methode .Add mehrmals aufrufen, um mehrere Module zu erstellen und in jedes Modul spezifischen Code einzufügen.

3. Was tun, wenn ich die Excel-Version wechsle?
Achte darauf, dass die Verweise korrekt gesetzt sind und teste deine Makros in der neuen Version, da sich einige Funktionen ändern könnten.

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