vba按钮 - 找到被点击的按钮

时间:2010-10-04 18:09:26

标签: vba excel-vba excel

我已将宏分配给几个按钮。

如何找出内部宏点击了哪个按钮?

我正在以用户形式进行,他可以在这里输入来自家庭的人:

NAME1:
姓1:

NAME2:
surname2:
|添加下一个成员|

我希望按钮始终显示在最后添加的人的最后一行中。 为简单起见,我认为最好有100个空表格 但是在开始时都是看不见的 然后当用户点击添加下一个成员时,我只是让下一行可见, 并将按钮移动到下一个人。但要做到这一点,我需要知道我目前的立场。

与删除类似,当点击删除按钮时,我会使行不可见。

NAME1:
姓氏1:
[删除]

NAME2:
姓2:
[删除]

NAME3:
surname3:
|添加下一个成员|

我需要知道点击了哪个删除按钮。

编辑: 在网络中找到 - 你觉得怎么样,似乎是最好的/方式

Dim r As Range
Set r = ActiveSheet.Buttons(Application.Caller).TopLeftCell
Range(Cells(r.Row, r.Column), Cells(r.Row, r.Column)).Select

4 个答案:

答案 0 :(得分:15)

我总是为每个按钮编写包装器,然后调用相关的宏。

像这样:

Public Sub StoreButton_Click()

  Call StoreTransValues(ActiveSheet)

End Sub

如果任何一个页面只有一个按钮,则只需获取ActiveSheet属性,它就是该页面上的按钮。


修改

以下是获取和使用调用按钮名称的代码:

Dim ButtonText As String

ButtonText = Application.Caller

ActiveSheet.Shapes(ButtonText).Delete

您可以使用.Move方法移动按钮。

答案 1 :(得分:9)

我终于找到了确定工作表中哪个按钮被推送的解决方案。积分归功于Derk http://www.ozgrid.com/forum/showthread.php?t=33351

我的最终示例代码:

Sub HereIAm()
    Dim b As Object
    Dim cs, rs As Integer
    Dim ss, ssv As String
    Set b = ActiveSheet.Buttons(Application.Caller)
    With b.TopLeftCell
        rs = .Row
        cs = .Column
    End With
    ss = Left(Cells(1, cs).Address(False, False), 1 - (ColNumber > 26)) & rs
    ssv = Range(ss).Value
    MsgBox "Row Number " & rs & "    Column Number " & cs & vbNewLine & _
        "Cell " & ss & "   Content " & ssv
End Sub

如果您不需要单元格标签,则单元格(rs,cs).Value也可以。

答案 2 :(得分:1)

由于您的按钮连接了一个宏,我假设您知道单击了哪个按钮。要获取按钮的位置,请使用:

ActiveSheet.Shapes("ButtonName").TopLeftCell.Address

要将按钮移动到新位置,请使用:

Dim NewAddress as Range
NewAddress = ActiveSheet.Cells(5, 5) 'Or where ever you need it to go
ActiveSheet.Shapes("ButtonName").Left = NewAddress.Left
ActiveSheet.Shapes("ButtonName").Top = NewAddress.Top

答案 3 :(得分:-2)

Dim button as a string:

    button = ActiveSheet.Shapes(Application.Caller).Name