Excel VBAbutton单元格地址是错误的

我有一个工具,在那里我自动插入多个小button(假设列C1:C90,E1:E90,G1:G90 …),根据一些select标准。 我正在使用Worksheet类的.Buttons.Add方法来创buildbutton。

当我点击一个button时,我无法find正确的单元格地址。 例如,如果我点击单元格C2中的button,它给出C70单元格地址,如果我点击E4它仍然给其他一些单元格地址。 我尝试下面的代码。 谁可以帮我这个事?,

 Sub Mainscoresheet() ' Mainlineup Macro to add button Dim b As Object, RowNumber,ColNumber As Integer Set b = ActiveSheet.Buttons(Application.Caller) With b.TopLeftCell RowNumber = .Row ColNumber = .Col End With MsgBox "Row Number " & RowNumber MsgBox "Row Number " & ColNumber End Sub 

我添加下面的button添加function。

 XRow = 7: xCol = 5 Do Until wks.Cells(XRow, 1) = "" DoEvents For i = 1 To M_Count Set Bt = wks.Range(Cells(XRow, xCol), Cells(XRow, xCol)) Set btn = wks.Buttons.Add(Bt.Left + 1, Bt.Top + 1, Bt.Width - 2, Bt.Height - 2) With btn .OnAction = "BtnCopy" .Caption = ">>" .name = "Note" & Now End With xCol = xCol + 2 Next i xCol = 5 XRow = XRow + 1 Loop 

您正尝试使用以下行标识已单击的button:

 Set b = ActiveSheet.Buttons(Application.Caller) 

以这种方式使用Application.Caller依赖于具有唯一名称的每个Button 。 但是,当您创buildbutton时,您使用此代码:

 With btn .OnAction = "BtnCopy" .Caption = ">>" .name = "Note" & Now End With 

但是你使用Now函数向Button添加一个'id'。 使用Now意味着您可以创build多个具有相同名称的button,因为代码运行得足够快, Now不会在代码中增加。 此外,如果您运行代码几次,例如在3个不同的运行中创build3列button,那么每组button可能具有相同的名称。 这会混淆Application.Caller ,它只会返回“第一个匹配”的Button

所以你应该使用一个计数器为每个button创build一个唯一的名称。 请参阅下面的代码示例,对于10个Button s的示例集合:

 Option Explicit Sub CallButton() Dim btn As Object Dim lngRow As Long, lngCol As Long Set btn = ActiveSheet.Buttons(Application.Caller) With btn.TopLeftCell lngRow = .Row lngCol = .Column End With MsgBox "Button name " & btn.Name MsgBox "Row Number " & lngRow MsgBox "Col Number " & lngCol End Sub Sub Make10Buttons() Dim ws As Worksheet Dim lng As Long Dim rng As Range Dim btn As Object Set ws = ThisWorkbook.Worksheets("Sheet1") For lng = 1 To 10 Set rng = ws.Cells(lng + 1, 2) Set btn = ws.Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height) With btn .OnAction = "CallButton" .Caption = ">>" .Name = "Note" & lng '<--- need a unique ID for each button End With Next lng End Sub 

您可以使用XRowxCol创build一个唯一的后缀来添加到每个button,以使样本适应您的代码。