使一个button删除它所在的行

我已经做了一个Excel的清单。 我有一个button,可以让我在一个新行上添加一个任务和有关任务的一些细节。 基本上,我想添加一条指令,对于添加的每个新任务,在我的行末尾添加一个button,删除所述行(在任务结束时删除任务)。

现在我已经尝试了这一点,但遇到了几个问题:

Set btn = ActiveSheet.Buttons.Add(cellul.Offset(0, 1).Left, _ cellul.Offset(0, 1).Top, cellul.Offset(0, 1).Width,_ cellul.Offset(0, 1).Height) With btn .OnAction = "deletebutton" .Caption = "Done !" .Name = "Deleteline" End With 

 Sub deletebutton() Activecell.Entirerow.Delete End Sub 

现在,它的工作原理是它给我一个我想要的button,但是随后我必须按照截止date对我的任务进行sorting,剩下的button不随sorting而移动(或者ActiveCell位废墟),我留下的button不删除正确的任务。

有没有人知道我可以引用一个button所在的行(这样我可以在button的macros中编写代码),或者任何其他方式来使一个button删除它实际在行?

您需要删除与被点击的button位置有关的行。 使用Application Caller方法获取点击button的名称,并使用TopLeftCell属性获取其位置。

使用.Name = "Deleteline"将所有button命名为相同,这使识别点击的button变得困难。 除非你有足够的理由这样做,否则删除这一行。

重构的deletebutton子(假设.Name = "Deleteline"被删除)

 Sub deletebutton() Dim rng As Range Dim rngOld As Range Dim msgRes As VbMsgBoxResult Set rngOld = ActiveCell Set rng = ActiveSheet.Buttons(Application.Caller).TopLeftCell.EntireRow rng.Select msgRes = MsgBox("Proceed?", vbOKCancel, "About to Delete this row.") If msgRes = vbOK Then rng.Delete End If rngOld.Select End Sub