使用基于搜索的动态行参考来定位范围

时间:2016-03-07 13:17:49

标签: excel vba excel-vba macros

我是VBA编码的真正新手并且一直都做得很好但是我现在已经在我的最终(并且可能比它需要的更复杂)工作表的宏上打了一堵墙。我一直试图让它在整个周末通过多次谷歌搜索工作,并使用stackoverflow的其他问题的各种答案来编译我自己的脚本,但无济于事。这是我到目前为止(道歉编码器,我知道这看起来像是由一个3岁的孩子写的):

Sub Build_Delete()
Dim rngA As Range
Dim cell As Range

Set rngA = Worksheets("Database").Range("D9:D177").End(xlUp)
For Each cell In rngA
If cell.Value = Range("A2").Value Then
cell.Select
Range("D" & ActiveCell.Row & ":AB" & ActiveCell.Row).Select
Selection.Delete
End If
Next cell

End Sub

上述工作,不会返回任何错误,但它没有做任何明显的事情。

我知道这很可能是残暴的,所以这就是我想要做的事情:

Database!D9:D177包含D到AB列(4到28)中一组数据的标题。

有一个ActiveX搜索框可以实时填充单元Database!A2与搜索到的内容(例如,在搜索框中键入“测试”,单元格数据库中出现“测试”!A2)。

当我运行宏时,我希望它检查Database!D9:D177中找到的文本字符串的范围Database!A2,然后删除该行的列D到AB的内容(例如,A2 =“测试“,在单元格D21中找到”测试“,删除D21:AB21)。

该行是一个动态值,这是我主要使用它的原因,但列是固定的。

此外,宏的按钮位于单独的工作表(Front Page!)上,但脚本将仅在数据库上运行!页。

只需要在excel工作,而不是在办公室工作。

我能想到的另一件事是相关的是,细胞可以在删除后留空,不需要填充,工作表永远不需要打印,因此边距不是问题。 / p>

或者我想在脚本开头添加一个“你确定吗?'是''不'Msgbox,但我可以稍后再玩,因为我知道我正在推动我的运气。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我总是发现使用FIND更快,而不是检查每个单元格的值 如果您想在重复的情况下查找所有值,可以继续使用.FINDNEXT(rFound) - https://msdn.microsoft.com/en-us/library/office/ff839746.aspx

Public Sub Build_Delete()

    Dim rngA As Range
    Dim rFound As Range
    Dim wrkSht As Worksheet

    Set wrkSht = ThisWorkbook.Worksheets("Database")
    Set rngA = wrkSht.Range("D9:D177")

    With rngA
        Set rFound = .Find(wrkSht.Range("A2"), LookIn:=xlValues, LookAt:=xlWhole)
        If Not rFound Is Nothing Then
            If MsgBox(rFound.Value & " found on row " & rFound.Row & "." & vbCr & _
                "Delete?", vbInformation + vbYesNo) = vbYes Then
                rFound.EntireRow.Delete Shift:=xlUp
            End If
        End If
    End With

End Sub