我有一个工具,可以根据一些选择标准自动在多列中插入多个小按钮(假设列 C1:C90、E1:E90、G1:G90...)。我使用 Worksheet
类的 .Buttons.Add
方法来创建按钮。
当我点击按钮时,我无法找到正确的单元格地址。例如。如果我单击单元格 C2 中的按钮,它会给出 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
我在按钮下方添加了添加功能。
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
最佳答案
您正在尝试使用以下行识别被单击的按钮:
Set b = ActiveSheet.Buttons(Application.Caller)
以这种方式使用 Application.Caller
依赖于每个 Button
具有唯一的名称。但是,当您创建按钮时,您使用以下代码:
With btn
.OnAction = "BtnCopy"
.Caption = ">>"
.name = "Note" & Now
End With
但是您使用 Now
函数将“id”添加到 Button
。使用 Now
意味着您可以创建多个同名按钮,因为代码运行速度足够快,Now
不会在代码内递增。另外,如果您运行代码几次,例如在 3 次不同的运行中创建 3 列按钮,则每组按钮可能具有相同的名称。这会让 Application.Caller
感到困惑,因为它只会返回“第一个匹配项”的 Button
。
因此您应该使用计数器为每个按钮创建唯一的名称。请参阅下面的代码示例,该代码示例对 10 个 Button
示例集执行此操作:
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
您可以使用 XRow
和 xCol
创建一个唯一的后缀来附加到每个按钮,从而使示例适应您的代码。
关于Excel VBA按钮单元格地址错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43861856/