excel vba添加表单button到每一行

我有代码添加button到电子表格的每一行,我想要发生的是当button被点击给定的行时,某些单元格将更新该行。 我的代码将button添加到正确的行,并单击button更新右列,但每行中的每个button只更新第一行,在这种情况下,5,因为这是我开始(与variables我)。 看起来.row函数总是返回最上面一行。 任何想法为什么是这样的情况?

Sub Button1_Click() Dim btn As Button Sheets(foldername).Buttons.Delete Dim t As Range For i = 5 To Sheets(foldername).Cells(Rows.Count, "A").End(xlUp).Row Set t = Sheets(foldername).Range(Cells(i, 10), Cells(i, 10)) Set btn = Sheets(foldername).Buttons.Add(t.Left, t.Top, t.Width, t.Height) With btn .OnAction = "Createbutton" .Caption = "Preparer" .Name = "Preparer" End With Next I end sub Sub CreateButton() 'code that is used to inject into each button that is created Dim b As Object, cs As Integer, RowNumber As Long Set b = ActiveSheet.Buttons(Application.Caller) With b.TopLeftCell cs = .Column RowNumber = .Row End With If ActiveSheet.Cells(RowNumber, "F").Value = vbNullString Then ActiveSheet.Cells(RowNumber, "F").Value = "User: " & Application.UserName & vbNewLine & "Date: " & Date Else ActiveSheet.Cells(RowNumber, "F").Value = vbNullString ActiveSheet.Cells(RowNumber, "F").Interior.ColorIndex = 2 ActiveSheet.Cells(RowNumber, "F").Font.Color = vbBlack GoTo skiptoend: End If If Date <= ActiveSheet.Cells(RowNumber, "E").Value Then ActiveSheet.Cells(RowNumber, "F").Font.Color = RGB(1, 125, 33) ActiveSheet.Cells(RowNumber, "F").Interior.Color = RGB(0, 255, 127) Else ActiveSheet.Cells(RowNumber, "F").Font.Color = vbRed ActiveSheet.Cells(RowNumber, "F").Interior.Color = RGB(255, 204, 204) End If skiptoend: End Sub 

你给你的button所有相同的名称。

尝试像这样:

 Sub Button1_Click() Dim btn As Button, t As Range, sht As Worksheet, i As Long Set sht = Sheets(FolderName) sht.Buttons.Delete For i = 5 To sht.Cells(Rows.Count, "A").End(xlUp).Row Set t = sht.Cells(i, 10) Set btn = sht.Buttons.Add(t.Left, t.Top, t.Width, t.Height) With btn .OnAction = "Createbutton" .Caption = "Preparer" .Name = "Preparer_" & i End With Next i End Sub Sub CreateButton() Dim RowNumber As Long, sht As Worksheet Dim c As Range Set sht = ActiveSheet RowNumber = CLng(Split(Application.Caller, "_")(1)) Set c = sht.Cells(RowNumber, "F") If c.Value = vbNullString Then c.Value = "User: " & Application.UserName & vbNewLine & "Date: " & Date If Date <= ActiveSheet.Cells(RowNumber, "E").Value Then c.Font.Color = RGB(1, 125, 33) c.Interior.Color = RGB(0, 255, 127) Else c.Font.Color = vbRed c.Interior.Color = RGB(255, 204, 204) End If Else c.Value = vbNullString c.Interior.ColorIndex = 2 c.Font.Color = vbBlack End If End Sub