请教我想实现在VBA中删除DW列值不为“#N/A”的单元格所在的行,以及如果在DV列对应行单元格不为N/A,则修改辅助列的flag,应当如何修改代码?运行之后没有报错但是表格也没有变化,不清楚问题处在哪里。试过直接表示如果单元格值不等于“#N/A”,但是会提示tyoe mismatch。很困扰,求指点,谢谢!
Sub noneed()
'
' noneed Macro
'
'
Dim lastRow As Long, i As Long, lastRowcancel As Long, lastRowaction As Long
lastRow = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
For i = lastRow To 1 Step -1
If IsError(Cells(i, "DW").Value) Then
If Cells(i, "DW").Value <> CVErr(xlErrNA) Then
Rows(i).Delete
End If
End If
Next i
For i = 2 To lastRow
If IsError(Cells(i, "DV").Value) Then
If Cells(i, "DV").Value <> CVErr(xlErrNA) Then
Worksheets(1).Cells(i, "BA") = "Reschedule Out"
End If
End If
Next
MsgBox "Done"
End Sub
【以下回答由 GPT 生成】
Sub noneed()
' noneed Macro
Dim lastRow As Long, i As Long, lastRowcancel As Long, lastRowaction As Long
lastRow = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False ' 禁止屏幕刷新,加快代码执行速度
For i = lastRow To 1 Step -1
If Not IsError(Cells(i, "DW").Value) Then ' 判断单元格的值是否为错误值
If Cells(i, "DW").Value <> CVErr(xlErrNA) Then ' 判断单元格的值是否不等于"#N/A"
Rows(i).Delete
Else
Cells(i, "DV").Value = "N/A" ' 如果DW列的值为"#N/A",则将DV列的值修改为"N/A"
End If
Else
Cells(i, "DV").Value = "N/A" ' 如果DW列的值为错误值,将DV列的值修改为"N/A"
End If
Next i
Application.ScreenUpdating = True ' 恢复屏幕刷新
End Sub
优化后的代码解决了以下问题:
添加了 Application.ScreenUpdating = False
语句来禁止屏幕刷新,可以提升代码的执行速度,避免反复刷新页面。
在判断单元格值不为错误值之前,先使用 Not IsError(Cells(i, "DW").Value)
来判断单元格是否为错误值,避免出现 type mismatch
错误。如果单元格的值是错误值,将 DV
列的值修改为 "N/A"。
使用 Else
语句在判断单元格值不为 "#N/A" 的情况下,将 DV
列的值修改为"N/A"。
在循环完成后,恢复屏幕刷新,使用 Application.ScreenUpdating = True
。
这些优化应该能够解决你的问题。请尝试运行优化后的代码,如果还有问题,请提供更多信息,以便我能够帮助你进一步解决问题。
基于GPT给出的代码.
Sub noneed()
' noneed Macro
Dim lastRow As Long, i As Long, lastRowcancel As Long, lastRowaction As Long
lastRow = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False ' 禁止屏幕刷新,加快代码执行速度
For i = lastRow To 1 Step -1
If Not IsError(Cells(i, "DW").Value) Then
If Not Application.WorksheetFunction.IsNA(Cells(i, "DW").Value) Then
Rows(i).Delete
Else
Cells(i, "DV").Value = "N/A"
End If
Else
Cells(i, "DV").Value = "N/A"
End If
Next i
Application.ScreenUpdating = True ' 恢复屏幕刷新
End Sub