Excel 尝试删除所有行,直到单元格(A,1)具有特定值
在VBA中有问题 尝试删除所有行,直到第1行中的值=“**GRAD*” 我得到运行时错误438 代码如下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
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