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

Posted

技术标签:

【中文标题】如果选定的单元格在范围内,Excel 删除行【英文标题】:Excel Delete row if selected cell is in range 【发布时间】:2017-05-25 03:08:55 【问题描述】:

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

我想要完成的工作: 如果选定的单元格不在 A 列中,则 msgbox 提示用户“选择部件号” 如果所选单元格在 A9:lastrow 范围内,则仅运行删除宏

为什么只有 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

【问题讨论】:

在确定ActiveCell 行是> 8(列是=1 之后问这个问题不是对用户更友好吗?否则他们会说“是”,然后你无论如何都会忽略它们。 【参考方案1】:

没有理由将活动单元格放在 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

【讨论】:

【参考方案2】:

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

如果用户选择“No”,则在Exit Sub 之外,如果他选择“Yes”,则只需删除行。

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

【讨论】:

【参考方案3】:

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

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

这应该会让你继续前进。

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

【讨论】:

很高兴您没有删除您的答案。它可以帮助读者看到新的方法来解决相关(或不相关)问题的潜在解决方案。

以上是关于如果选定的单元格在范围内,Excel 删除行的主要内容,如果未能解决你的问题,请参考以下文章

Excel应用技巧

excel每个单元格多行内加入相同的内容?

UIScrollView 选定的单元格在旋转到横向时超出当前视图

将 Excel 条件格式公式调整为选定范围

excel中怎样用vba使单元格在特定条件下才可以编辑?

如何更改所选范围内所有行的样式?