我是想当串口错误号为0或是8005的时候就不清除错误,但是我在用OR的时候总是出问题,请问下面这样的错误是在什么地方?为什么不可以这样用呢?
    If err.Number <> 0 Or err.Number <> 8005 Then '无效端口错误内容清除处理
       err.Clear
    End If

解决方案 »

  1.   

    这个应该是错误处理中返回的Err.Number吧。
    正常情况下,跳转不到错误处理中啊!
      

  2.   

    If err.Number = 0 Or err.Number = 8005 Then 
    else
      err.Clear
    End If
      

  3.   

    因为你想错了, If err.Number <> 0 Or err.Number <> 8005 Then你觉得什么值会符合你所要的呢?
    你应该用and的,用or的只要有一个是真就符合你的要求,那么不管是0还是8005都符合你的要求
      

  4.   

    要用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
      

  5.   

    试试:
        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
      

  6.   

        Select Case err.Number
        Case 0, 8005 
        Case Else '无效端口错误内容清除处理
            err.Clear
        End If 
      

  7.   

    用 and   就可以了
       If err.Number <> 0 and err.Number <> 8005 Then '无效端口错误内容清除处理
           err.Clear
        End If 
      

  8.   

    逻辑运算问题。Not((A = i) Or (B = j)) <=> ((A <> i) And (B <> j))
      

  9.   

    楼主的表达式运算不及格啊。为清晰起见,先加上括号,不影响运算
    (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 始终被调用。
      

  10.   

    楼主还要加强逻辑训练了...
    and 和 or 是最基本的逻辑了
      

  11.   

    这个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 
      

  12.   

    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  
      

  13.   

    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  
      

  14.   

    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。明白了吗?