Hinzufügen von Schaltflächen zu Arbeitsblatt zur Laufzeit und auch Ereignisse definieren

Ich versuche, fügen Sie ein ActiveX-Befehlsschaltfläche in meine Arbeit Blatt zur Laufzeit. Die Anzahl der Schaltflächen hängt von der Anzahl der Zeilen in dem Arbeitsblatt. Ich Plane, geben Sie x-und y-Koordinaten in die Befehl-Taste-Eigenschaft, um Sie richtig positionieren. Ich verstehe, dass wir uns einfügen können, Befehlsschaltflächen im Formular Benutzer auf diese Weise.

Private Sub CommandButton1_Click()

Me.Controls.Add _
"Forms.CommandButton.2", "CopyOf"
End Sub

Wie können wir einfügen von Befehlsschaltflächen in einem Arbeitsblatt (nicht user-form). Worksheets("abc").Hinzufügen funktioniert nicht. Auch, wie ich definieren, klicken Sie auf unabhängigen Ereignisse für Sie. Zum Beispiel, wenn ich auf einen command-button, sollte es mir sagen, welche Zeile ist es in.

Dank

--------------UPDATE -----------------------------

So, ich bin in der Lage, fügen Sie den Befehl Schaltflächen in Ihren gewünschten Ort dynamisch basierend auf der Anzahl von Zeilen in meinem Arbeitsblatt.

Private Sub addb3(ByVal rows_present_alerts As Integer)
Dim topcounter As Double
topcounter = 15.75
For i = 2 To rows_present_alerts ' The first row has the column headers
   With Worksheets("abc").OLEObjects
   .Add(ClassType:="Forms.CommandButton.1", Link:=False _
    , DisplayAsIcon:=False, Left:=509.25, Top:=topcounter, Width:=48, Height:=14.25 _
    ).Select
    End With
topcounter = topcounter + 15    ' (not sure this approach will work in monitors with diff screen resolution but anyways) 
Next i
End Sub

Will ich weisen Sie auf Veranstaltungen, auf jede Befehlsschaltfläche. Wenn ich auf die Befehlsschaltfläche, sollte es mir sagen, welche Zeile ist es in.

Es wäre einfacher, verwenden Sie ein Formen-Taste anstelle der ActiveX-Typ (es sei denn, es gibt einige Grund, warum Sie wirklich brauchen, die ActiveX-one). Dann weisen Sie das makro mithilfe der onAction-wie von Jon vorgeschlagen. Wenn Sie die Namen der Schaltflächen verwenden Sie die Nummer der Zeile, die Sie verwenden können, Anwendung.Anrufer in der makro, um den Namen der Schaltfläche.
Nun, ich habe verwendet ActiveX in meinem ganzen Projekt. Jetzt Ihr groß geworden und ich kann nicht zurücksetzen 🙁
In diesem Fall ist ein Ansatz, der hier sollte funktionieren: stackoverflow.com/questions/1083603/... Siehe Gary ' s Antwort.
Ich mag den Ansatz, aber dann weiß ich nicht, wie viele command buttons habe ich in meinem Arbeitsblatt. Sie können überall von 2 bis zu tausenden.. Sie sind abhängig von Anzahl der Zeilen in dem Arbeitsblatt.. ich wünschte, ich könnte ein array erstellen von Befehlsschaltflächen.
Mit einem button für jede Zeile, mit möglicherweise tausenden von Zeilen, ist sehr schwer zu pflegen. Viel besser hinzufügen einer Schaltfläche zu der Zeile mit der rechten Maustaste-Menü (oder die Band) das wirkt sich auf die aktuell ausgewählte Zeile(N).

InformationsquelleAutor Ank | 2011-11-23

Schreibe einen Kommentar