Добавление командных кнопок на лист во время выполнения, а также определение событий - PullRequest
2 голосов
/ 24 ноября 2011

Я пытаюсь добавить командную кнопку ActiveX в свой рабочий лист во время выполнения. Количество командных кнопок будет зависеть от количества строк на рабочем листе. Я планирую дать координаты x и y в свойстве командной кнопки, чтобы правильно расположить их. Я понимаю, что мы можем вставить командные кнопки в форме пользователя таким образом.

Private Sub CommandButton1_Click()

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

Как мы можем вставить командные кнопки в рабочий лист (не в форму пользователя). Рабочие листы ("abc"). Добавить не работает. Также, как определить независимые события клика для них. Например, если я нажимаю командную кнопку, она должна сказать мне, в какой строке она находится.

Спасибо

-------------- ОБНОВЛЕНИЕ -----------------------------

Таким образом, я могу динамически добавлять кнопки команд в нужное место в зависимости от количества строк в моей рабочей таблице.

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

Я хочу назначить события щелчка для каждой кнопки. Когда я нажимаю командную кнопку, она должна сказать мне, в какой строке она находится.

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

это может помочь, возможно, вам будет интересно, как получить к нему доступ;

Sub addButton()

Dim myButton As OLEObject



Set myButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Left:=0, Top:=300, Height:=20, Width:=200)

myButton.Placement = XlPlacement.xlFreeFloating

myButton.Object.Caption = "Click Me..."

myButton.Name = "DynamicButton"


End Sub

Private Sub DynamicButton_Click()



   MsgBox "Hello sheet"



End Sub
1 голос
/ 24 ноября 2011

Самый простой способ решить эту проблему - записать макрос, затем выполнить действие и посмотреть, какой код записывается. В этом случае я записал макрос, добавил кнопку на лист и получил фрагмент кода:

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.Buttons.Add(126.75, 39.75, 46.5, 19.5).Select
End Sub

Вы должны быть в состоянии взять его оттуда ...

...