If err.Number = 0 Or err.Number = 8005 Then else err.Clear End If
因为你想错了, If err.Number <> 0 Or err.Number <> 8005 Then你觉得什么值会符合你所要的呢? 你应该用and的,用or的只要有一个是真就符合你的要求,那么不管是0还是8005都符合你的要求
要用AND来实现你这种写法。 If err.Number <> 0 Or err.Number <> 8005 Then这样判断有两种情况: 1、err.Number<>0成立时,err.Number有可能=8005,err.Clear执行。 2、err.Number<>8005时,err.Number有可能=0,err.Clear同样也被执行。 所以你这么用OR永远达不到目的。 非要用OR的话,这么写: If err.Number <> 0 And err.Number <> 8005 Then err.Clear
试试: If Not((err.Number = 0) Or (err.Number = 8005)) Then '无效端口错误内容清除处理 err.Clear End If等效于: If (err.Number <> 0) And (err.Number <> 8005) Then '无效端口错误内容清除处理 err.Clear End If
Select Case err.Number Case 0, 8005 Case Else '无效端口错误内容清除处理 err.Clear End If
用 and 就可以了 If err.Number <> 0 and err.Number <> 8005 Then '无效端口错误内容清除处理 err.Clear End If
逻辑运算问题。Not((A = i) Or (B = j)) <=> ((A <> i) And (B <> j))
楼主的表达式运算不及格啊。为清晰起见,先加上括号,不影响运算 (err.Number <> 0) Or (err.Number <> 8005)如果 err.Number = 0, (err.Number <> 0) Or (err.Number <> 8005) = False Or True = True如果 err.Number = 8005, (err.Number <> 0) Or (err.Number <> 8005) = True Or False = True所以,你的表达式永远为真, err.Clear 始终被调用。
楼主还要加强逻辑训练了... and 和 or 是最基本的逻辑了
这个err.Number是检测串口是否存在和是否被占用的值啊,我的想法是除了值为0或8005外就清除掉错误号,err.Number有其它很多不同值啊, 我确实对用OR不行,机会每次用都会用错. 同时我觉得2楼说的: If err.Number = 0 Or err.Number = 8005 Then else err.Clear End If 和我说的似乎应该是等效的,还是没想明白为什么. 如果err.Number=8012 '设备没有打开这类下面我这样还是不能实现自己的想法: If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理 err.Clear End If
1 if err.Number = 0 Or err.Number = 8005 Then else err.Clear End If 和你的不一样,这是满足0和8005条件,什么都不做,其它全要走err.clear2: If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理 err.Clear End If 你的,打比如,8015,它满足了: err.Number <> 0条件,也进去clear了3: 你的or 改成 and 就达到效果了 If err.Number <> 0 and err.Number <> 8005 Then err.Clear End If
1 if err.Number = 0 Or err.Number = 8005 Then else err.Clear End If 和你的不一样,这是满足0和8005条件,什么都不做,其它全要走err.clear2: If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理 err.Clear End If 你的,打比如,8005,它满足了: err.Number <> 0条件,也进去clear了3: 你的or 改成 and 就达到效果了 If err.Number <> 0 and err.Number <> 8005 Then err.Clear End If
If err.Number = 0 Or err.Number = 8005 Then else err.Clear End If实际上,就是满足表达式条件就什么都不执行;否则 err.Clear。而你的 If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理 err.Clear End If 在逻辑上与之并不等效。因为 Not((err.Number = 0) Or (err.Number = 8005)) 的等价表达式是 ((err.Number <> 0) And (err.Number <> 8005))换言之,err.Number = 0 或 err.Number = 8005 的非,是既不等于 0 也不等于 8005。明白了吗?
正常情况下,跳转不到错误处理中啊!
else
err.Clear
End If
你应该用and的,用or的只要有一个是真就符合你的要求,那么不管是0还是8005都符合你的要求
If err.Number <> 0 Or err.Number <> 8005 Then这样判断有两种情况:
1、err.Number<>0成立时,err.Number有可能=8005,err.Clear执行。
2、err.Number<>8005时,err.Number有可能=0,err.Clear同样也被执行。
所以你这么用OR永远达不到目的。
非要用OR的话,这么写:
If err.Number <> 0 And err.Number <> 8005 Then err.Clear
If Not((err.Number = 0) Or (err.Number = 8005)) Then '无效端口错误内容清除处理
err.Clear
End If等效于:
If (err.Number <> 0) And (err.Number <> 8005) Then '无效端口错误内容清除处理
err.Clear
End If
Case 0, 8005
Case Else '无效端口错误内容清除处理
err.Clear
End If
If err.Number <> 0 and err.Number <> 8005 Then '无效端口错误内容清除处理
err.Clear
End If
(err.Number <> 0) Or (err.Number <> 8005)如果 err.Number = 0,
(err.Number <> 0) Or (err.Number <> 8005)
= False Or True
= True如果 err.Number = 8005,
(err.Number <> 0) Or (err.Number <> 8005)
= True Or False
= True所以,你的表达式永远为真, err.Clear 始终被调用。
and 和 or 是最基本的逻辑了
我确实对用OR不行,机会每次用都会用错.
同时我觉得2楼说的:
If err.Number = 0 Or err.Number = 8005 Then
else
err.Clear
End If
和我说的似乎应该是等效的,还是没想明白为什么.
如果err.Number=8012 '设备没有打开这类下面我这样还是不能实现自己的想法:
If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理
err.Clear
End If
else
err.Clear
End If
和你的不一样,这是满足0和8005条件,什么都不做,其它全要走err.clear2:
If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理
err.Clear
End If
你的,打比如,8015,它满足了: err.Number <> 0条件,也进去clear了3: 你的or 改成 and 就达到效果了 If err.Number <> 0 and err.Number <> 8005 Then
err.Clear
End If
else
err.Clear
End If
和你的不一样,这是满足0和8005条件,什么都不做,其它全要走err.clear2:
If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理
err.Clear
End If
你的,打比如,8005,它满足了: err.Number <> 0条件,也进去clear了3: 你的or 改成 and 就达到效果了 If err.Number <> 0 and err.Number <> 8005 Then
err.Clear
End If
err.Clear
End If实际上,就是满足表达式条件就什么都不执行;否则 err.Clear。而你的
If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理
err.Clear
End If
在逻辑上与之并不等效。因为 Not((err.Number = 0) Or (err.Number = 8005)) 的等价表达式是
((err.Number <> 0) And (err.Number <> 8005))换言之,err.Number = 0 或 err.Number = 8005 的非,是既不等于 0 也不等于 8005。明白了吗?