Как добавить кнопку программно в VBA рядом с некоторыми данными ячейки листа?
У меня есть функция, которая генерирует данные для, скажем, 100 строк ячеек (и 2 колонки). Для каждой строки (в 3-м столбце) мне нужно добавить кнопку, которая при нажатии вызывает пользовательское модальное диалоговое окно, предоставляющее пользователю 4 опции/кнопки на выбор.
есть идеи, как это сделать?
/ T
2 ответов
Я думаю, что этого достаточно, чтобы получить вас на хороший путь:
Sub a()
Dim btn As Button
Application.ScreenUpdating = False
ActiveSheet.Buttons.Delete
Dim t As Range
For i = 2 To 6 Step 2
Set t = ActiveSheet.Range(Cells(i, 3), Cells(i, 3))
Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
With btn
.OnAction = "btnS"
.Caption = "Btn " & i
.Name = "Btn" & i
End With
Next i
Application.ScreenUpdating = True
End Sub
Sub btnS()
MsgBox Application.Caller
End Sub
он создает кнопки и связывает их с butnS(). В btns () sub вы должны показать свой диалог и т. д.
предположим, что ваша функция вводит данные в столбцы A и B, и вы хотите, чтобы пользовательская форма отображалась, если пользователь выбирает ячейку в столбце C. Один из способов сделать это-использовать SelectionChange
событие:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim clickRng As Range
Dim lastRow As Long
lastRow = Range("A1").End(xlDown).Row
Set clickRng = Range("C1:C" & lastRow) //Dynamically set cells that can be clicked based on data in column A
If Not Intersect(Target, clickRng) Is Nothing Then
MyUserForm.Show //Launch custom userform
End If
End Sub
обратите внимание, что userform появится, когда пользователь выбирает любая ячейка в столбце C, и вы можете заполнить каждую ячейку в столбце C чем-то вроде "выберите ячейку для запуска формы", чтобы сделать очевидным, что пользователю необходимо выполнить действие (имея кнопку естественно предполагает, что его нужно кликнуть)