如何解决从excel文件中读取合并单元格值的错误?

时间:2015-07-15 03:15:29

标签: .net vb.net excel

我有这段代码来读取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等等...

1 个答案:

答案 0 :(得分:0)

当你delete时,你仍然会遇到问题,因为On Error Resume Next需要增加,所以你可以到达下一行。你可以这样做:

intRow

然后在你的子/函数的底部你可以放这样的东西来增加On Error GoTo HandleError ,然后回到导致错误的那一行:

intRow

处理此问题的另一种方法是检查单元格对象是否为空。我的猜测是错误是由于尝试访问HandleError: intRow += 1 Resume 对象的.Value属性引起的。如果对象不存在,则无法从对象获取属性。如果是这种情况,请在检查值之前检查对象是否存在。如果没有,那么只需增加objRange.Cells(intRow, 1)。您可以检查对象是否存在,如下所示:

intRow