我在Excel上做了一个待办事项列表。我有一个按钮,可以让我在新行上添加任务和有关任务的一些细节。 基本上,我想添加一条指令,对于添加的每个新任务,还会在我的行末尾添加一个删除所述行的按钮(在任务结束时删除该任务)。
现在我已尝试过这个,但遇到了几个问题:
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
现在它的作用就是它确实给了我一个我想要的按钮,但是后来我必须对我的任务进行排序(截止日期),我留下的按钮不随排序移动(或者可能ActiveCell
位遗忘了它,而我留下的按钮没有删除正确的任务。
有没有人知道我怎么能引用一个按钮所在的行(这样我可以在按钮的宏中编写代码),或者任何其他方式使按钮删除它实际上的行?
答案 0 :(得分:0)
您需要删除与单击按钮位置相关的行。使用Application Caller
方法获取所点击按钮的名称,使用TopLeftCell
属性获取其位置。
使用.Name = "Deleteline"
命名所有按钮相同,这使得识别单击按钮变得困难。除非你有充分的理由这样做,否则请删除此行。
重构deletebutton
sub(假设.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