好吧,我知道John Saunders关于NRE问题的帖子。我已经阅读了我能找到的所有主题,但它对我没有帮助。我有点被困在这里。
For Each lum As Lumiere In autom.colLumiere
s += If(lum.Checked, "1", "0") + ";"
Next
第一行抛出NRE。问题是在处理几分钟后抛出。我使用Instant Spy检查是否有什么东西,但autom和autom.colLumiere不是。实际上,当我在NRE被抛出之前和之后检查时,整个事情是完全一样的。
我试图把它放在For Each之前,并且按照预期它不会显示任何MsgBox,因为没有任何东西是空的。
If autom Is Nothing Then
MsgBox("autom NRE")
ElseIf autom.colLumiere Is Nothing Then
MsgBox("colLumiere NRE")
ElseIf autom.colLumiere(1) Is Nothing ... Or autom.colLumiere(8) Is Nothing Then
MsgBox("lum NRE")
End If
最后一件事是autom不应该在这个片段之外被更改,实际上它似乎根本没有改变。不管它是错误,它是巫术;)
编辑:
我用这个代替了代码:
For i = 1 To 8 Step 1
s += If(autom.colLumiere(i).Checked, "1", "0") + ";"
Next
它似乎有用(实际上它在使用几分钟后没有抛出NRE,它不是100%确定它永远有效)。但即使它工作得很好,我也无法理解以前的代码有什么问题。
那些For和For Each不应该执行相同的操作吗?