jra*_*rad 6 excel vba excel-vba
我正在尝试运行一个宏来删除B列中不包含特定值的行.这是我的代码:
Sub deleteRows()
Dim count As Integer
count = Application.WorksheetFunction.CountA(Range("AF:AF"))
Dim i As Integer
i = 21
Do While i <= count
If (Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("OSR Platform", Range("B" & i))) = False) Then
If (Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("IAM", Range("B" & i))) = False) Then
Rows(i).EntireRow.Delete
i = i - 1
count = count - 1
End If
End If
i = i + 1
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)
现在它应该做的是以下内容:
1.)找到要经过的行数并将其设置为count(这是有效的)
2.)从第21行开始,在B栏中寻找"OSR平台"和"IAM"[这种作品(见下文)]
3.)如果两者都找不到,删除整行并根据需要调整计数和行号(这有效)
出于某种原因,每当代码到达第一个If语句时,弹出一个带有红色X的错误窗口,只显示"400".据我所知,我已经在语法上写出了一切,但显然有些不对劲.
您可能希望从另一种方式循环开始.删除行时,将移动所有前一行.你解释了这一点,但是反向循环比我(无论如何)更容易理解,而不是跟踪我在循环中偏移当前位置的时间:
For i = count To 21 Step -1
另外,你过分依赖Application.WorksheetFunction
:
(Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("OSR Platform", Range("B" & i))) = False)
至
InStr(Range("B" & i).value, "OSR Platform") > 0
Application.WorksheetFunction
需要更多的处理能力,并且取决于您要完成的任务,这可能需要更长的时间.此外,对于此建议的更改,代码大小会减少,并且在没有它的情况下变得更容易阅读.
你count
也可以在没有A.WF
:
count = Range("AF65536").End(xlUp).Row
count = Range("AF1048576").End(xlUp).Row
count = Range("AF" & Rows.Count).End(xlUp).Row
还有一件事是你可以做(并且在这种情况下应该做)将你的If
陈述合并为一个.
进行这些更改后,您最终得到:
Sub deleteRows()
Dim count As Integer
count = Range("AF" & Rows.Count).End(xlUp).Row
Dim i As Integer
For i = count To 21 Step -1
If Len(Range("B" & i).value) > 0 Then
If InStr(Range("B" & i).value, "OSR Platform") > 0 Or InStr(Range("B" & i).value, "IAM") > 0 Then
Range("B" & i).Interior.Color = RGB(255, 0, 0)
End If
End If
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,那么你可以逐行逐步完成代码.添加断点,然后逐步执行F8.突出显示代码中的变量,右键单击,选择"添加Watch ...",单击"确定",(这是一个很好的资源,可以帮助您进行一般的调试)并注意以下事项:
i
,并count
当这种情况发生?(添加关于这些变量的监视以帮助) 归档时间: |
|
查看次数: |
20484 次 |
最近记录: |