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

Forumthread: ActiveX mit Makros einfügen

ActiveX mit Makros einfügen
26.12.2014 00:10:54
Arceus
Hallo auch,
ich möchte ActiveX Steuerelemente (speziell Labels und Comboboxen) im Excel Tabellenblatt mit einem Makro einfügen lassen. Dabei stoße ich auf einige seltsame Probleme. Ich habe verschiedene Add/Insert Methoden ausprobiert und nichts klappt. Der Makrorekorder macht das mit OLEObjects.Add, allerdings kann man dann komischerweise nicht mehr debuggen!? (Kein Haltemodus erlaubt) Außerdem muss ich die Objekte nach dem Einfügen noch modifizieren und will sie dafür in eine Variable speichern, weiß aber nicht welche Typen ich dafür brauche.

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveX mit Makros einfügen
26.12.2014 01:05:40
Mullit
Hallo,
Bei Einfügen von ActiveX-Controls geht Excel/VBA bis zum Ende des Prozedurdurchlaufs in den Entwurfsmodus, deswegen versagt das Einzelschritt-Debugging.
Und obacht: bei diesem Vorgang werden sämtliche öffentlichen und statischen Variablen zurückgesetzt, sowie alle virtuellen Klassen 'zerstört'.
Zugriff auf Variablen ginge z.B. so:
Option Explicit

Public Sub test()
   Dim lblLabel As MSForms.Label
   Dim cboComboBox As MSForms.ComboBox
   
   With ActiveSheet.OLEObjects
       Set cboComboBox = .Add(ClassType:="Forms.ComboBox.1", Link:=False, _
         DisplayAsIcon:=False, Left:=249, Top:=102, Width:=76.5, Height:=56.25).Object
       Set lblLabel = .Add(ClassType:="Forms.Label.1", Link:=False, _
         DisplayAsIcon:=False, Left:=400.5, Top:=109.5, Width:=121.5, Height:=40.5).Object
   End With
   
   With cboComboBox
      MsgBox lblLabel.Name & vbCr & .Name & _
        vbCr & .ListCount
   End With

   Set lblLabel = Nothing
   Set cboComboBox = Nothing
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß,

Anzeige
AW: ActiveX mit Makros einfügen
26.12.2014 01:38:34
Arceus
Endlich, danke dir. Wenn dabei alle Variablen kaputt gehen, ist das echt übel. Aber wie soll man denn sonst während der Laufzeit Comboboxen & Co. einfügen? In meinem Testlauf wurden die Variablen jetzt allerdings gar nicht zurückgesetzt?
Die MSForms-Typen hatte ich probiert, aber ich wusste nicht, dass ich noch .Object ans Ende hängen muss, warum auch immer.

Anzeige
AW: ActiveX mit Makros einfügen
26.12.2014 02:01:08
Mullit
Hallo,
null problemo,
Wenn dabei alle Variablen kaputt gehen,

Nein, nicht alle Variablen sondern:
sämtliche öffentlichen und statischen Variablen

d.h. die Werte der lokalen auf Prozedurebene deklarierten Variablen in der Prozedur test bleiben erhalten....
noch .Object ans Ende hängen muss, warum auch immer.

Nur durch das Zuweisen als .Object greifst Du direkt auf den jeweiligen Control-Typ der MSForms-Bibliothek zu, andernfalls würde die .Add Methode ein OLEObject-Objekt zurückliefern...
Gruß,
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

ActiveX Steuerelemente mit Makros einfügen


Schritt-für-Schritt-Anleitung

Um ActiveX Steuerelemente wie Labels und ComboBoxen in Excel mithilfe eines Makros einzufügen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Erstelle ein neues Modul: Rechtsklicke auf "VBAProject (deinWorkbookName)" > Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Option Explicit
    
    Public Sub ActiveXSteuerelementeEinfügen()
       Dim lblLabel As MSForms.Label
       Dim cboComboBox As MSForms.ComboBox
    
       With ActiveSheet.OLEObjects
           Set cboComboBox = .Add(ClassType:="Forms.ComboBox.1", Link:=False, _
               DisplayAsIcon:=False, Left:=249, Top:=102, Width:=76.5, Height:=56.25).Object
           Set lblLabel = .Add(ClassType:="Forms.Label.1", Link:=False, _
               DisplayAsIcon:=False, Left:=400.5, Top:=109.5, Width:=121.5, Height:=40.5).Object
       End With
    
       With cboComboBox
           MsgBox lblLabel.Name & vbCr & .Name & vbCr & .ListCount
       End With
    
       Set lblLabel = Nothing
       Set cboComboBox = Nothing
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle ActiveXSteuerelementeEinfügen und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Problem: Der Makrorekorder kann ActiveX Steuerelemente nicht korrekt aufzeichnen.

    • Lösung: Verwende den Code manuell, wie oben beschrieben, da der Rekorder in den Entwurfsmodus wechselt.
  • Problem: Bei der Ausführung des Makros werden Variablen zurückgesetzt.

    • Lösung: Achte darauf, dass nur öffentliche und statische Variablen betroffen sind. Lokale Variablen in der Prozedur bleiben erhalten.
  • Problem: Fehler beim Zuweisen von Objekten.

    • Lösung: Stelle sicher, dass du .Object am Ende des Set-Befehls hinzufügst, um auf den spezifischen Control-Typ zuzugreifen.

Alternative Methoden

Wenn du ActiveX Steuerelemente in Excel einfügen möchtest, gibt es auch alternative Methoden:

  • Excel ActiveX Steuerelement in Zelle einbetten: Du kannst Steuerelemente direkt in Zellen einbetten, indem du die Eigenschaften der OLEObjects anpasst.
  • Verwendung von Formeln: Anstatt ActiveX Steuerelemente zu nutzen, kannst du auch Formeln und Datenvalidierungen verwenden, um einfache Dropdowns oder Labels zu erstellen.

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von ActiveX:

  1. Combobox mit vordefinierten Werten:

    With cboComboBox
       .AddItem "Wert 1"
       .AddItem "Wert 2"
       .AddItem "Wert 3"
    End With
  2. Label mit dynamischem Text:

    lblLabel.Caption = "Dies ist ein Label"

Diese Beispiele zeigen, wie du ActiveX Steuerelemente in Excel verwenden kannst, um interaktive Anwendungen zu erstellen.


Tipps für Profis

  • Debugging: Wenn du während der Ausführung den Debugging-Modus benötigst, verwende Debug.Print anstelle von MsgBox, um die Ausgaben im Direktfenster anzuzeigen.
  • VBA ActiveX: Stelle sicher, dass du die richtigen Bibliotheken in den Verweisen aktiviert hast, insbesondere wenn du mit MSForms arbeitest.
  • Optimierung der Performance: Schalte die Bildschirmaktualisierung vor der Ausführung des Makros aus und wieder an, um die Performance zu verbessern:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich ein ActiveX Steuerelement in eine bestimmte Zelle einfügen?
Verwende die Left und Top Parameter im .Add Befehl, um die genaue Position zu bestimmen.

2. Warum funktioniert das Debugging nicht, wenn ich ActiveX Steuerelemente verwende?
Während des Einfügens von ActiveX Steuerelementen wechselt Excel in den Entwurfsmodus, was das Debugging erschwert. Nutze alternative Debugging-Methoden wie Debug.Print.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige