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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg, um zu arbeiten, diese Art der Sache, ist ein makro aufzeichnen, und führen Sie dann die Aktion, und sehen, welcher code aufgenommen wird. In diesem Fall habe ich ein makro aufgezeichnet und Hinzugefügt eine Schaltfläche, um das Blatt und bekam den code-snippet:
Sollten Sie in der Lage sein, um es von dort zu nehmen...
Fügen Sie den Namen der sub den Sie anrufen möchten, über die OnAction-Eigenschaft des Buttons, z.B.
.OnAction = "Macro1"
.Für makro-Aufnahmen google es - es ist die gleiche wie die Aufnahme anderer Aktionen. Sobald Sie erfasst den code, gehe in die VBA-danach zu sehen, was aufgezeichnet wurde.
Wenn ich das mache, was er sagt "Nicht um eine OnAction-Eigenschaft OLEObject-Klasse
Sie können vermeiden, Wählen Sie aus den redcorded makro und verwenden nur
ActiveSheet.Buttons.Add 126.75, 39.75, 46.5, 19.5
InformationsquelleAutor Jon Egerton
kann es helfen, wahrscheinlich werden Sie Fragen auch, wie Sie darauf zugreifen;
Alex hat ein nettes Beispiel hier: stackoverflow.com/questions/566770/...
Ich sah, dass bis vor. Dass der code nicht funktioniert..
Auch ich kann nicht viel von Schaltflächen und machen Sie Sie unsichtbar, wie vorgeschlagen.. Die Anzahl der Zeilen können irgendwo zwischen 2 und Tausende.. 🙁
Die
DynamicButton_Click
funktioniert nicht.InformationsquelleAutor HRgiger