Vba 提示用户确认行删除

Vba 提示用户确认行删除,vba,excel,Vba,Excel,我的用户需要能够删除行。他们很乐意右键单击行选择器并选择“删除”。我如何添加提示,让用户确认他们要删除行 请注意,工作表\u BeforeDelete()不会捕获行删除。以下解决方案将“删除行”自定义菜单项添加到行上下文菜单中。当右键单击行选择器时,看起来是这样的。它会提示用户在实际删除行之前确认行删除 在项目级模块中,添加以下子例程 Public Sub DeleteRow() If MsgBox("Are you sure?", vbOkCancel, "Confirm Del

我的用户需要能够删除行。他们很乐意右键单击行选择器并选择“删除”。我如何添加提示,让用户确认他们要删除行


请注意,工作表\u BeforeDelete()不会捕获行删除。

以下解决方案将“删除行”自定义菜单项添加到行上下文菜单中。当右键单击行选择器时,看起来是这样的。它会提示用户在实际删除行之前确认行删除

在项目级模块中,添加以下子例程

Public Sub DeleteRow()

    If MsgBox("Are you sure?", vbOkCancel, "Confirm Delete") = vbOk Then
        Selection.EntireRow.Delete
    End If

End Sub
在工作表代码模块中,添加以下子例程

Private Sub Worksheet_Activate()

    'reset to standard context menu before adding new option
    Application.CommandBars("Row").Reset

    'add custom row deletion call
    With Application.CommandBars("Row").Controls.Add
        .Caption = "Delete Row"
        .Style = msoButtonCaption
        .OnAction = "DeleteRow"
    End With

End Sub

Private Sub Worksheet_Deactivate()
    'get rid of the customization when you're done with this sheet
    Application.CommandBars("Row").Reset

End Sub
或者,您可以使用几乎相同的方法重用现有的Delete选项

在“图纸”模块中:

Option Explicit

Private Sub Worksheet_Activate()
    Dim c As CommandBarButton
    For Each c In Application.CommandBars("row").Controls
        If c.Caption = "&Delete" Then
            c.OnAction = "delete_row"
            Exit For
        End If
    Next
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Set right_click_target = Target
End Sub

Private Sub Worksheet_Deactivate()
    Dim c As CommandBarButton
    For Each c In Application.CommandBars("row").Controls
        If c.Caption = "&Delete" Then
            c.OnAction = ""
            Exit For
        End If
    Next
End Sub
在您的独立模块中:

Option Explicit

Public right_click_target As Range

Public Sub delete_row()
    If MsgBox("Are you sure you want to delete this row?", vbYesNo, "Deletion") = vbYes Then
        right_click_target.Delete
    End If
End Sub

工作表\u BeforeDelete
不起作用,因为
工作表
类不公开任何此类事件(请参见对象浏览器/F2)。你为什么这么做?第一个太宽了,这个怎么更好?处理
工作表\u更改
在您上一篇文章的评论中提出,您尝试过吗?如果是这样的话,请发表您的帖子,包括您的代码,并描述哪些不起作用,我将非常高兴收回我的投票结果。@Mathieu Guindon,首先-感谢您在这里帮助我变得更聪明。我正在努力,但我看不出这个问题有什么太宽泛的地方。我正试图用激光精确定位我需要的东西,同时也以一种有助于未来访问者的方式发布它。谢谢你没有因为我是一个“卑鄙、无益的权力绊倒近距离投票的混蛋”而猛烈抨击我!Meta Q&A在解释这一点上比我做得更好=)@Mathieu Guindon,相反,我认为一旦我完全理解你的建议,我将成为这里更好的成员。谢谢。你不知道我多么希望每个人都带着这种很棒的心态来到这里!!做得好!请注意,您还可以删除默认“Delete”上下文命令的commandbar按钮,该命令在其他情况下仍然可用=)。。(只是吹毛求疵)-我会选择
vbYesNo
作为提示,而不是
vbOkCancel
,或者使用
vbequipment
(或者不使用-用户喜欢忽略警告!)@MathieuGuindon我认为
vbQuestion
也是一个不错的选择,是的,OP在这种情况下肯定应该使用
vbYesNo
。@AhmedAbdelhameed
vbQuestion
是含糊不清的UX,但不鼓励使用;-)哦,真的吗?我不知道。我对UX tbh了解不多。如果你有一个详细阐述这一点的文章/帖子的链接,我将不胜感激。@Mathieuguin没关系,我在.NET的网站上找到了一个很好的解释。哇!我已经用了很长一段时间,从来没有想过这是一个坏的选择哈哈。感谢这些信息!