Excel 尝试删除所有行,直到单元格(A,1)具有特定值

Excel 尝试删除所有行,直到单元格(A,1)具有特定值,excel,vba,Excel,Vba,在VBA中有问题 尝试删除所有行,直到第1行中的值=“**GRAD*” 我得到运行时错误438 代码如下 Public Sub Delete() Dim i As Long i = 1 'Start from row 1 Application.ScreenUpdating = False With ThisWorkbook.Worksheets("Sheet1") Do Until .Range("A" & i).Value = "**GRAD" If

在VBA中有问题

尝试删除所有行,直到第1行中的值=“**GRAD*”

我得到运行时错误438

代码如下

Public Sub Delete()

Dim i As Long

i = 1 'Start from row 1

Application.ScreenUpdating = False

With ThisWorkbook.Worksheets("Sheet1")

    Do Until .Range("A" & i).Value = "**GRAD"
        If .Rage("A" & i).Value <> "**GRAD" Then
            .Rows(i).EntireRow.Delete
        Else: i = i + 1 'Only increment if the row hasn't been deleted to        prevent skipping rows
        End If
    Loop

End With

Application.ScreenUpdating = True

End Sub
公共子删除()
我想我会坚持多久
i=1'从第1行开始
Application.ScreenUpdating=False
使用此工作簿。工作表(“表1”)
Do Until.Range(“A”和i).Value=“**GRAD”
如果.Rage(“A”&i).Value“**GRAD”,则
.行(i).EntireRow.Delete
Else:i=i+1'仅当行未被删除以防止跳过行时才递增
如果结束
环
以
Application.ScreenUpdating=True
端接头

如果您是VBA新手,请提供帮助。

打字错误?我读了
If.Rage(“A”&I).Value“**GRAD”然后
而它应该是
If.Range(“A”&I).Value“**GRAD”然后
打字?我读了
If.Rage(“A”&I).Value“**GRAD”然后
,而它应该是
If.Range(“A”&I).Value“**GRAD”,然后
L.Dutch已经给了你问题的答案

这里有另一种更快的方法

删除所有行直到第1列中的值=“**GRAD*”

选项显式
公共子删除()
将最后一行变暗,使其变长
变暗f As范围

使用此工作簿。工作表(“Sheet0001”)”L.Dutch已经为您的问题提供了答案

这里有另一种更快的方法

删除所有行直到第1列中的值=“**GRAD*”

选项显式
公共子删除()
将最后一行变暗,使其变长
变暗f As范围

使用此工作簿。工作表(“Sheet0001”)“可能您是新来的,而不是“谢谢”通过标记有用或接受来识别答案可能您是新来的,而不是“谢谢”通过标记有用或接受来识别答案您可能希望包括以下情况:
范围(“A”&i).Value=vbNullString
。否则,上述代码可能会无限期运行(如果从未找到
**GRAD
),甚至可能导致计算机崩溃。这就是为什么我(个人)试图完全避免
Do循环
,而使用
来。。。下一个
仅限(有一个明确的结束行,即使它必须是最后一行=1048576)。始终使用
选项explicit
,您的打字错误将很容易识别!您可能希望包括
范围(“A”&i).Value=vbNullString
的情况。否则,上述代码可能会无限期运行(如果从未找到
**GRAD
),甚至可能导致计算机崩溃。这就是为什么我(个人)试图完全避免
Do循环
,而使用
来。。。下一个
仅限(有一个明确的结束行,即使它必须是最后一行=1048576)。始终使用
选项explicit
,您的打字错误将很容易识别!这要快得多我试着修改你的代码以删除空行后的所有行,但我认为我的方法不好,你可能想在新的一期“如何删除空行后的所有行”中发布一个新问题,添加更多细节,并且,最主要的是,你的代码试图感谢你,对于你的帮助,我是这个网站的新手。这要快得多,我试图修改你的代码以删除空行后的所有行,但我认为我的方法不好,你可能想在你的新问题“如何删除空行后的所有行”中发布一个新问题,添加更多详细信息,并且,主要是,你的代码试图感谢你,感谢你的帮助,我对这个网站还很陌生。
Option Explicit

Public Sub Delete()
    Dim lastRowToDelete As Long
    Dim f As Range

    With ThisWorkbook.Worksheets("Sheet0001") '<-- reference your worksheet
        With Range("A1", .Cells(.Rows.Count, 1).End(xlUp)) '<-- reference its columns "A" cells from row 1 sown to last not empty one
            Set f = .Find(what:="**GRAD", LookIn:=xlValues, lookat:=xlWhole, after:=.Range("A" & .Rows.Count)) '<-- look for the first cell whose value is "**GRAD"
            If f Is Nothing Then '<-- if not found then...
                lastRowToDelete = .Rows(.Rows.Count).Row '<-- the last row to delete is the last row of the range
            Else '<-- otherwise...
                lastRowToDelete = f.Row - 1 '<-- the last row to delete is the one preceeding the one with the found cell
            End If
        End With
        If lastRowToDelete > 0 Then .Range("A1:A" & lastRowToDelete).EntireRow.Delete 'delete all rows in a single shot
    End With
End Sub