2017-05-09 43 views
1

我有一个工具,我可以根据一些选择标准自动在多列中插入多个小按钮(假设列C1:C90,E1:E90,G1:G90 ...)。我正在使用Worksheet类的.Buttons.Add方法来创建按钮。Excel VBA按钮单元格地址有误

我点击按钮时找不到正确的单元格地址。例如。如果我点击单元格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 
+2

它们是什么类型的按钮? Active-X命令按钮? User_Form命令按钮? –

+0

@ShaiRado我在VBA代码中使用“Buttons.Add”函数 – Manish

+0

@ShaiRado我也使用添加按钮功能修改了问题。我提前致谢 – Manish

回答

1

您正在试图找出与单击下面一行的按钮:

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 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创造一个独特的后缀追加到每个按钮。

+0

非常感谢你Robin Mackenzie!我按照你的建议进行了修改,并按我的要求工作。 – Manish

+0

@Manish - 很高兴帮助。如果您觉得答案有用,请随时注册。 –

相关问题