2016-06-02 26 views
0

Ich bin absolut frustriert. Ich möchte, dass eine Schaltfläche vorhanden ist, die es einem Benutzer ermöglicht, zwei ComboBoxen in der nächsten Zeile zu duplizieren. (Klicken, kopieren, Zeile darunter einfügen, einfügen.)Hinzufügen von Steuerelementen zur Laufzeit

Nichts, was ich bis jetzt getan habe, hat funktioniert. Ich habe versucht, das OLE-Objekt in die Zwischenablage zu kopieren und einzufügen, aber das kopiert auch den Namen. Ich bin nicht in der Lage, auf das Objekt nach der Erstellung zuzugreifen. Das Erstellen eines neuen Objekts von Grund auf funktioniert auch nicht. Manchmal kopiert es den Namen der Combobox, die ich standardmäßig habe (erstellt vor der Laufzeit). Ich habe sogar mit einer neuen Kopie angefangen. Ich habe bemerkt, dass nach dem Erstellen der ersten Kopie die folgenden ComboBox2, 3, 4 und so weiter benannt sind. enter image description here

ActiveSheet.OLEObjects.Add ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, Height:=15 

Wenn dies VB.NET wäre, würde es kein Problem sein. (Erzeuge Instanz, setze Eigenschaften, füge Handler hinzu, füge zur Kontrollsammlung hinzu.) Wäre MS Access besser für mein Projekt geeignet? Wahrscheinlich, aber die Zielbenutzer haben es nicht.

Antwort

0

Der Code, den Sie oben verwendeten, erstellt ein neues Steuerelement, anstatt das Steuerelement zu kopieren. Möchten Sie das von Ihnen hinzugefügte Steuerelement umbenennen? Wenn ich richtig verstanden habe, können wir das OleObject, das wir hinzugefügt haben, bekommen und seine Eigenschaft ändern, wie wir es wollten. Hier

ist ein Beispiel Verdrahtung VBA verwenden, die die Combobox in die nächste Zeile hinzufügen und benennen Sie es:

Dim combo As OLEObject 

Selection.Offset(1, 0).Select 

Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove 

Set combo = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _ 
    DisplayAsIcon:=False, Left:=Selection.Left, Top:=Selection.Top, Width:=48, Height _ 
    :=15) 

combo.Name = "combox_newName" 
Verwandte Themen