2011-06-05 261 views
11

我想在Excel中制作一个按钮,将活动工作簿的某个范围的单元格复制到另一个工作簿。当我指定一个固定的范围时,这个范围的复制完美地工作,但是我很难理解如何确定点击按钮的行。Excel VBA:获取点击按钮的行

每行包含7个左右的单元格,而第8个单元格包含一个带有附加宏的形状(按钮)。 当用户按下此按钮时,需要复制与包含按下按钮的行相同的行上的7个单元格。

使用ActiveCell是没有用的,因为按下按钮并不会真正将该单元设置为活动状态。我搜索了很多,但我似乎无法找到如何获得此值。 一旦我有了点击按钮的行号,我可以自己找出其他的东西。

回答

18

每个ShapeTopLeftCell财产。它包含形状左上角所在的单元格。

+1

我明白了,谢谢你的回答。我也想知道如何获得被点击的形状的名称,但经过一些搜索后,我发现这一点:ActiveSheet.Shapes(Application.Caller).Name。我会尝试使用形状的TopLeftCell属性,并让它知道它何时工作。再次感谢您指点我正确的方向! – Jort 2011-06-05 11:46:23

+10

得到它完全工作:MsgBox(“按下按钮的行:”&ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row)。再次感谢! – Jort 2011-06-05 11:51:38

14

这里有提到一个很好的解决方案: http://www.ozgrid.com/forum/showthread.php?t=33351&p=167317#post167317

金码从上面的帖子复制:

Sub Mainscoresheet() 
    ' Mainlineup Macro 
    Dim b As Object, cs As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
     cs = .Column 
    End With 
    MsgBox "Column Number " & cs 
End Sub 
+0

动态生成的按钮非常有用。 – 2017-12-01 20:47:43

4

出色答卷。顺便说一句,它也适用于Rownumber!

'Same for rownumbers! 
Sub Mainscoresheet() 
    ' Mainlineup Macro 
    Dim b As Object, RowNumber As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
     RowNumber = .Row 
    End With 
    MsgBox "Row Number " & RowNumber 
End Sub