如何在VBA旁边的某些工作表单元格数据中以编程方式添加按钮?

时间:2010-12-30 00:32:09

标签: excel vba

我有一个为100个单元格行(和2列)生成数据的函数。对于每一行(在第3列中),我需要添加一个按钮,当单击该按钮时,会弹出一个自定义模式对话框,为用户提供4个选项/按钮供您选择。

知道怎么做吗?

/ T

2 个答案:

答案 0 :(得分:84)

我认为这足以让你走上一条不错的道路:

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()子程序中,您应该显示对话框等。

Mathematica graphics

答案 1 :(得分:4)

假设您的函数在A列和B列中输入数据,并且您希望在用户选择C列中的单元格时显示自定义Userform。一种方法是使用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列中的任何单元格时,将显示userform,并且您可能希望在C列中填充“select cell to launch form”之类的单元格以使其显而易见用户需要执行操作(有一个按钮自然表明应该单击它)