我已将宏分配给几个按钮。
如何找出内部宏点击了哪个按钮?
我正在以用户形式进行,他可以在这里输入来自家庭的人:
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
答案 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