2017-05-09 45 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 - 很高興幫助。如果您覺得答案有用,請隨時註冊。 –

相關問題