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

Forumthread: oleobject mit code/makro bestücken

oleobject mit code/makro bestücken
max
hallo excel-freunde,
brauch mal wieder hilfe.
wie bestücke ich ein oleobject, das per makro erstellt wird, ebenfalls über makro mit einem makro.
soweit bin ich bisher in meiner testdatei:
Sub Makro1()
Application.Worksheets.Add
ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1"
ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count).Name = "cb_Loeschen"
ActiveSheet.OLEObjects("cb_Loeschen").Object.Caption = "löschen"
End Sub
und jetzt zur königsfrage - wie komme ich dazu
Private Sub cb_Loeschen_Click()
ActiveSheet.Delete
End Sub

bedanke mich schon mal vorab für konstruktive hilfe.
gruss max
Anzeige
AW: oleobject mit code/makro bestücken
13.02.2012 14:48:51
selli
hallo max,
sicher bin ich mir nicht. lasse die frage deshalb offen.
versuch es mal so:
ActiveSheet.OLEObjects("cb_Loeschen").Object.onaction = "cb_Loeschen_Click"
gruß
selli
nee. geht so nicht
13.02.2012 14:53:50
selli
.
Code mit Vba in Modul eintragen schreiben
13.02.2012 15:15:19
Reinhard
Hallo Max,
Sub Makro1()
Application.Worksheets.Add
With ActiveSheet
.OLEObjects.Add ClassType:="Forms.CommandButton.1"
.OLEObjects(.OLEObjects.Count).Name = "cb_Loeschen"
.OLEObjects("cb_Loeschen").Object.Caption = "löschen"
With ThisWorkbook.VBProject.VBComponents(.Name).CodeModule
.InsertLines .CountOfLines + 1, "Private Sub cb_Loeschen_Click()"
.InsertLines .CountOfLines + 2, "ActiveSheet.Delete"
.InsertLines .CountOfLines + 3, "End Sub"
.InsertLines .CountOfLines + 4, ""
End With
End With
End Sub

Gruß
Reinhard
Anzeige
AW: Code mit Vba in Modul eintragen schreiben
13.02.2012 15:25:19
max
hallo reinhard
versteh den code zwar nicht, aber funktioniert einwandfrei.
bedanke mich für die schnelle hilfe.
gruss max
Code per Code erstellen
13.02.2012 15:21:45
Rudi
Hallo,
Sub xxxxx()
Dim sCode As String, wks As Worksheet, myCB As OLEObject
Set wks = Worksheets.Add
With wks
Set myCB = .OLEObjects.Add(ClassType:="Forms.CommandButton.1")
With myCB
.Name = "cb_Loeschen"
.Object.Caption = "löschen"
End With
End With
sCode = "Private Sub cb_Loeschen_Click()" & vbLf
sCode = sCode & "Activesheet.Delete" & vbLf
sCode = sCode & "End Sub" & vbLf
With ThisWorkbook.VBProject.VBComponents(wks.CodeName).codemodule
.AddFromString sCode
End With
End Sub
Du musst dem Zugriff auf das VBA-Projekt vertrauen.
Gruß
Rudi
Anzeige
AW: Code per Code erstellen
13.02.2012 15:31:54
max
hallo rudi,
hier gilt das gleiche wie bei reinhard:
versteh den code zwar nicht, aber funktioniert einwandfrei.
bedanke mich auch bei dir für die schnelle hilfe.
Noch eine Frage. Was meinst du mit

"Du musst dem Zugriff auf das VBA-Projekt vertrauen."
gruss max
Anzeige
Zugriff auf das VBA-Projekt
13.02.2012 15:36:31
Rudi
Hallo,
normalerweise muss man das im Vertrauensstellungscenter einstellen. Code kann sonst nicht durch Code erstellt oder geändert werden. Da aber der Code von Reinhard funktioniert, ist das bei dir schon so.
Gruß
Rudi
AW: Zugriff auf das VBA-Projekt
13.02.2012 15:40:51
max
hab's gefunden - ja, ist bei mir so eingestellt
Zugriff auf das VB-Projekt vertrauen
13.02.2012 18:28:40
NoNet
Hallo Leute,
die oftmals so lapidar verwendete Bemerkung
Du musst dem Zugriff auf das VB-Projekt vertrauen

mag für geübte VBA-Anwender verständlich sein - für Suchende wirkt dieser Satz jedoch oftmals sehr unverständlich, da sie sich (zurecht !) fragen :
Wie soll ich denn einem VBA-Projekt vertrauen oder NICHT vertrauen ?
bzw. "Wie drücke ich denn mein Vertrauen aus ?"
Daher empfehle ich folgende Seite, die diese Bemerkung etwas näher erklärt :
http://www.excelei.de/seiten/vba_zugriff_per_vba.php
Gruß, NoNet
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

oleobject mit VBA bestücken: So funktioniert's


Schritt-für-Schritt-Anleitung

  1. Neues Arbeitsblatt hinzufügen:

    Application.Worksheets.Add
  2. OLEObject hinzufügen:

    ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1"
  3. Name und Caption des OLEObjects festlegen:

    ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count).Name = "cb_Loeschen"
    ActiveSheet.OLEObjects("cb_Loeschen").Object.Caption = "löschen"
  4. Code für das OLEObject hinzufügen:

    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
       .InsertLines .CountOfLines + 1, "Private Sub cb_Loeschen_Click()"
       .InsertLines .CountOfLines + 2, "ActiveSheet.Delete"
       .InsertLines .CountOfLines + 3, "End Sub"
       .InsertLines .CountOfLines + 4, ""
    End With
  5. Makro ausführen: Starte das Makro, um das OLEObject zu erstellen und den Code hinzuzufügen.


Häufige Fehler und Lösungen

  • Fehler: OLEObject wird nicht hinzugefügt.

    • Lösung: Stelle sicher, dass der ClassType korrekt ist. Verwende Forms.CommandButton.1.
  • Fehler: Der Code für das OLEObject wird nicht erkannt.

    • Lösung: Überprüfe, ob du dem Zugriff auf das VBA-Projekt vertraust. Gehe ins Vertrauensstellungscenter und aktiviere die entsprechenden Optionen.

Alternative Methoden

Eine alternative Methode zur Erstellung eines OLEObjects ist die Verwendung einer Variablen für das OLEObject:

Dim myCB As OLEObject
Set myCB = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1")
myCB.Name = "cb_Loeschen"
myCB.Object.Caption = "löschen"

Du kannst den Code für das Click-Ereignis auch als String speichern und dann in das Modul einfügen:

Dim sCode As String
sCode = "Private Sub cb_Loeschen_Click()" & vbLf & "ActiveSheet.Delete" & vbLf & "End Sub"
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
    .AddFromString sCode
End With

Praktische Beispiele

Hier ist ein komplettes Beispiel, das die oben genannten Schritte zusammenfasst:

Sub Makro1()
    Application.Worksheets.Add
    With ActiveSheet
        Dim myCB As OLEObject
        Set myCB = .OLEObjects.Add(ClassType:="Forms.CommandButton.1")
        myCB.Name = "cb_Loeschen"
        myCB.Object.Caption = "löschen"

        Dim sCode As String
        sCode = "Private Sub cb_Loeschen_Click()" & vbLf & "ActiveSheet.Delete" & vbLf & "End Sub"
        With ThisWorkbook.VBProject.VBComponents(.CodeName).CodeModule
            .AddFromString sCode
        End With
    End With
End Sub

Tipps für Profis

  • Verwende With-Anweisungen, um den Code leserlicher und effizienter zu gestalten.
  • Achte darauf, dass der Zugriff auf das VBA-Projekt immer erlaubt ist, insbesondere wenn du mit oleobjects.add arbeitest.
  • Teste deinen Code regelmäßig, um sicherzustellen, dass alles wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich ein OLEObject in ein bestehendes Arbeitsblatt einfügen? Du kannst den gleichen Code verwenden, aber anstelle von Application.Worksheets.Add wählst du dein bestehendes Arbeitsblatt aus.

2. Warum funktioniert der Code für das Click-Ereignis nicht? Stelle sicher, dass du dem VBA-Projekt vertraust. Ohne diese Einstellung kann der Code nicht ausgeführt werden.

3. Was ist der Unterschied zwischen OLEObject und ActiveX-Steuerelement? OLEObjects sind ein breiterer Typ von Objekten, während ActiveX-Steuerelemente spezifische Steuerelemente sind, die in Formularen verwendet werden können.

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