我正在创建一个宏,以删除在AN列中其单元格的值为0的每一行。
这是我使用的代码:
Sub DeleteRow()
Dim lastrow As Long, r As Long
lastrow = Cells(Rows.Count, "AN").End(xlUp).Row
For r = lastrow To 2 Step -1
If Cells(r, "AN") = 0 Then
Rows(r).EntireRow.Delete
End If
Next r
End Sub
此代码为“ If Cells(r,“ AN”)= 0 Then“行产生“不匹配”错误。我该如何解决?
谢谢
答案 0 :(得分:2)
我将使用Range
而不是Cells
。
If [ActiveSheet.]Range("AN" & r) = 0 Then
请注意,您应该始终将Range
,Cells
,Rows
,Columns
和Names
成员调用限定为具有适当的Worksheet
对象参考-否则,您将隐式地处理碰巧为ActiveSheet
的任何工作表,并且只要活动工作表不是代码所假定的工作表,都有可能导致错误。除非代码是写在工作表的后台代码中,否则隐式限定符为Me
,并且将其明确表示也无妨。
但这不能解决问题。
问题是,您假设您正在读取的单元格包含与0
在法律上可比的值。将单元格值与0
或""
进行比较时,抛出类型不匹配错误,请查看工作表:很可能存在#N/A
或{{1} }工作表错误。
工作表错误值是一种特殊的数据类型:#VALUE!
,该数据类型的值不能与Variant/Error
值以外的任何值进行比较-类型不匹配错误是否则提出。
因此,在使用值进行任何操作之前,请确保您没有在查看单元格错误:
Variant/Error