首页 > 解决方案 > 删除按钮上方的单行但不允许删除,如果

问题描述

我正在使用表单控制按钮来添加和删除按钮上方的行。每个工作表有几个部分,因此有查找功能。

添加行没有问题。问题是关于删除行......到一个限制。

编码:

Sub Button4_Click()
    ActiveSheet.Unprotect
    Dim Found  As Range
    Set Found = Columns("B").EntireRow.Find(what:="          Remove Row ", LookIn:=xlValues, Lookat:=xlWhole)
    If Not Found Is Nothing Then
        Rows(Found.Row - 1).EntireRow.Delete
    End If
    ActiveSheet.Protect
End Sub

问题是我不希望最终用户删除包含标题的行。如果Found.Row上方的行包含文本“Travel Expenditures” ,我想添加一些将停止子的内容。

我怀疑这是一个“如果”,但我被困住了。

有什么建议么?

(新手用户)

标签: vbaconditionalrowdelete-row

解决方案


您可以Intersect使用行和列ActiveSheet.UsedRange来限制扫描范围

这是一个带有Application.Match方法的代码,我认为它比 Range.Find() 更快,但不区分大小写:

Sub Button4_Click()
    Dim iRow As Variant

    iRow = Application.Match("          Remove Row ", Intersect(ActiveSheet.UsedRange, Columns("B")), 0)
    If Not IsError(iRow) Then
        If IsError(Application.Match("Travel Expenditures", Intersect(ActiveSheet.UsedRange, Rows(iRow - 1).EntireRow), 0)) Then
            ActiveSheet.Unprotect
            Rows(iRow - 1).Delete
            ActiveSheet.Protect
        End If
    End If
End Sub

推荐阅读