我有这段代码来读取excel文件中的每个单元格。
Do Until objRange.Cells(intRow, 1).value.Equals("小 計")
intRow
每次递增但当单元格指向合并的行时,例如,第3,4和5行合并 - 当它指向3时,它会执行但是当它指向4时,它会返回错误 - System.NullReferenceException
如何解决该错误,以便在导致错误时,只会增加并移至下一行? 我尝试On Error Resume Next
但它好像它没有移动到下一个intRow
。它仍然会导致错误,但这一次,它是合乎逻辑的,因为当它导致错误时,它会恢复下一行,因此intRow没有增加但值似乎在增加的intRow位置。这就是我所理解的。 任何人都可以解释这究竟是如何导致逻辑错误的吗?
以下是导致逻辑错误的最新代码
On Error Resume Next
Do Until objRange.Cells(intRow, 1).value.Equals("小 計") 'causes an error
If objRange.Cells(intRow, 1).Value.Equals("I") Then
Do Until objRange.Cells(intRow + 1, 1).Value.Equals("II")
If Not objRange.Cells(intRow + 1, 2).Font.Size.Equals("16") Then
intBunruiType += 1
arrBunruiType(intBunruiType) = "I"
End If
intRow += 1
Loop
ElseIf objRange.Cells(intRow, 1).value.Equals("II") Then
Do Until objRange.Cells(intRow + 1, 1).value.Equals("III")
If Not objRange.Cells(intRow + 1, 2).Font.Size.Equals("16") Then
intBunruiType += 1
arrBunruiType(intBunruiType) = "I"
End If
intRow += 1
Loop
End If
intRow += 1
Loop
程序就是这样。第一列中的单元格值如下所示:
I
-
-
II
-
-
-
-
-
III
-
-
IV
-
代表空白。因此,当I
之后的单元格值为空时,我检索I,当单元格值为II
时,我只检索II
之后和III
之前的单元格值,I如果II
中的下一列没有字体大小I, II, III and IV
,则会检索16
等等...
答案 0 :(得分:0)
当你delete
时,你仍然会遇到问题,因为On Error Resume Next
需要增加,所以你可以到达下一行。你可以这样做:
intRow
然后在你的子/函数的底部你可以放这样的东西来增加On Error GoTo HandleError
,然后回到导致错误的那一行:
intRow
处理此问题的另一种方法是检查单元格对象是否为空。我的猜测是错误是由于尝试访问HandleError:
intRow += 1
Resume
对象的.Value
属性引起的。如果对象不存在,则无法从对象获取属性。如果是这种情况,请在检查值之前检查对象是否存在。如果没有,那么只需增加objRange.Cells(intRow, 1)
。您可以检查对象是否存在,如下所示:
intRow