Как программно добавить кнопку в VBA рядом с данными ячейки листа?

37

У меня есть функция, которая генерирует данные для 100 строк ячеек (и 2 столбца). Для каждой строки (в третьем столбце) мне нужно добавить кнопку, которая при нажатии вызывает настраиваемое модальное диалоговое окно, в котором пользователь может выбрать 4 варианта/кнопок.

Любая идея, как это сделать?

  • 0
    Проверка: Вы хотите что-то вроде List / ComboBox в третьем столбце, но модально?
  • 0
    и Велисарий, и Остаток будут работать
Теги:
excel

2 ответа

67
Лучший ответ

Я думаю, этого достаточно для того, чтобы вы смогли найти хороший путь:

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() вы должны показать свое диалоговое окно и т.д.

Изображение 3773

  • 0
    это работает, если вы измените «target» на «t» и «tLeft» на «t.Left»
  • 0
    @datatoo Да, спасибо. Исправленный.
Показать ещё 2 комментария
3

Предположим, что ваша функция вводит данные в столбцы 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

Обратите внимание, что пользовательская форма появится, когда пользователь выбирает любую ячейку в столбце C, и вам может понадобиться заполнить каждую ячейку в столбце C чем-то вроде "select cell to launch form", чтобы было очевидно, что пользователю необходимо выполнить действие (с кнопкой, естественно, предполагает, что его нужно нажать)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню