Excel删除行,如果所选单元格在范围内



它的用途:我有一个每个作业都会更改的零件清单。

我正在努力完成什么:如果所选单元格不在 A 列中,则 msgbox 会提示用户"选择部分 #"然后,仅当所选单元格在范围A9:最后一行内时才运行删除宏

为什么只有A列:如果我能强制他们选择A列中的单元格,那么我可以使用ActiveCell.Offset将信息添加到msgbox,询问他们是否确定这是他们想要删除的内容,并包含有关他们选择的部分#的其他单元格信息。

第 8 行上方是标题,因此必须将其锁定。

我的每个部分#都有3行,这就是我运行"EntireRow.Delete"3次的原因。

这就是我现在所拥有的。

Sub DeleteRow()
    If MsgBox("Are you sure you want to delete this part?" & vbNewLine & " " & vbNewLine & ActiveCell.Value & vbNewLine & ActiveCell.Offset(0, 1).Value & vbNewLine & "QTY: " & ActiveCell.Offset(0, 12).Value, vbYesNo) = vbNo Then Exit Sub
    If ActiveCell.Row > 8 Then
    Rows(ActiveCell.Row).EntireRow.Delete
    Rows(ActiveCell.Row).EntireRow.Delete
    Rows(ActiveCell.Row).EntireRow.Delete
    End If
End Sub

活动单元格没有理由位于 A 列中以在MsgBox中显示您希望的信息,因此,如果这是您尝试限制ActiveCell位置的唯一原因,您应该能够将代码更改为如下所示的内容:

Sub DeleteRow()
    If ActiveCell.Row <= 8 Then
        MsgBox "This macro should only be invoked if you are in a non-header row"
    ElseIf MsgBox("Are you sure you want to delete this part?" & vbNewLine & _
                  vbNewLine & _
                  ActiveCell.EntireRow.Cells(1, "A").Value & vbNewLine & _
                  ActiveCell.EntireRow.Cells(1, "B").Value & vbNewLine & _
                  "QTY: " & ActiveCell.EntireRow.Cells(1, "M").Value, _
                  vbYesNo) = vbYes Then
        ActiveCell.EntireRow.Delete
        ActiveCell.EntireRow.Delete
        ActiveCell.EntireRow.Delete
    End If
End Sub

关注@YowE3K评论,也许我在你的帖子中遗漏了一些东西,但我认为它应该像下面的代码一样简短。

如果用户选择"",则Exit Sub,如果他选择"",则只需删除行。

Sub DeleteRow()
    If ActiveCell.Row > 8 Then ' <-- first check if not above row 8 (headers)
       If MsgBox("Are you sure you want to delete this part?" & vbNewLine & " " & _
            vbNewLine & ActiveCell.value & vbNewLine & ActiveCell.Offset(0, 1).value _
            & vbNewLine & "QTY: " & ActiveCell.Offset(0, 12).value, vbYesNo) = vbYes Then
            ActiveCell.Resize(3, 1).EntireRow.Delete
        End If           
    End If
End Sub

在不知道您的问题是什么的情况下(顺便说一下,您应该说明您的问题中存在什么问题),我只能假设您希望用户在您的代码中选择一个部分,然后在病房后进行某种检查。看看这个:

Dim rNg As Range
Set rNg = Application.InputBox("Select something", "Obtain Range Object", Type:=8)
If target.address "something" then
end if

这应该让你开始。

对于那些对没有更多信息的答案特别挑剔的人 - 如果事实证明我的答案无关紧要,我会删除

最新更新