Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么“和”在这里起作用,而“或”不起作用?_Excel_Vba - Fatal编程技术网

Excel 为什么“和”在这里起作用,而“或”不起作用?

Excel 为什么“和”在这里起作用,而“或”不起作用?,excel,vba,Excel,Vba,在我的情况下,使用或不起作用,我必须使用和,我不知道为什么 Sub blah() If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then '''DOESN'T WORK Stop ElseIf LCase(Environ("username")) <> "me" And LCase(Environ(

在我的情况下,使用或不起作用,我必须使用和,我不知道为什么

Sub blah()
    If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then '''DOESN'T WORK
        Stop
    ElseIf LCase(Environ("username")) <> "me" And LCase(Environ("username")) <> "some other user" Then  '''WORKS
        Stop
    End If
End Sub
VBA或不起作用,因为当Environusername为我时,它不是其他用户,反之亦然

您需要确保它不是您所需要的任何一种可能性。

VBA或不起作用,因为当Environusername为我时,它不是其他用户,反之亦然


您希望确保它不是您需要的两种可能性之一。

您的示例很难理解,但您可能只是被运算符的性质弄糊涂了

想想真值表;如果至少有一个操作数为真,则Or运算的结果为真:

类似地,如果两个操作数都为真,则And运算的结果为真:

如果有帮助,您可以将Or视为+加法和*乘法运算,False为0,True不为零:

1 Or 1 => 1 + 1 => True
1 Or 0 => 1 + 0 => True
0 Or 1 => 0 + 1 => True
0 Or 0 => 0 + 0 => False

1 And 1 => 1 * 1 => True
1 And 0 => 1 * 0 => False
0 And 1 => 0 * 1 => False
0 And 0 => 0 * 0 => False

您的示例很难理解,但您可能只是被运算符的性质弄糊涂了

想想真值表;如果至少有一个操作数为真,则Or运算的结果为真:

类似地,如果两个操作数都为真,则And运算的结果为真:

如果有帮助,您可以将Or视为+加法和*乘法运算,False为0,True不为零:

1 Or 1 => 1 + 1 => True
1 Or 0 => 1 + 0 => True
0 Or 1 => 0 + 1 => True
0 Or 0 => 0 + 0 => False

1 And 1 => 1 * 1 => True
1 And 0 => 1 * 0 => False
0 And 1 => 0 * 1 => False
0 And 0 => 0 * 0 => False

让我们把它分解一下。我必须假设我是你自己的用户名。该测试的结果是: 假,真,真


这是我期望的行为。

让我们把它分解一下。我必须假设我是你自己的用户名。该测试的结果是: 假,真,真


这是我所期望的行为。

这可以用以下公式来解释。如果我们采取:

If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then
使用DeMorgan定律,只要我们将Or运算符更改为And运算符,就可以对整个表达式应用一个否定:

If Not(LCase(Environ("username")) = "me" And LCase(Environ("username")) = "some other user") Then
LCaseEnvironusername不可能同时等于两个不同的值,因此and条件将为False。应用Not运算符意味着无论username的值是多少,整个表达式的计算结果都将始终为True

对于使用和而不是或的更正版本,步骤如下:

If LCase(Environ("username")) <> "me" And LCase(Environ("username")) <> "some other user" Then
应用德摩根定律:

If Not(LCase(Environ("username")) = "me" Or LCase(Environ("username")) = "some other user") Then
现在,如果用户名是我或用户名是其他用户,则or条件将计算为True,Not操作符将根据需要将其更改为False


如果用户名是任何其他值,则Or条件将计算为False,Not运算符将根据需要将其更改为True

这可以通过使用来解释。如果我们采取:

If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then
使用DeMorgan定律,只要我们将Or运算符更改为And运算符,就可以对整个表达式应用一个否定:

If Not(LCase(Environ("username")) = "me" And LCase(Environ("username")) = "some other user") Then
LCaseEnvironusername不可能同时等于两个不同的值,因此and条件将为False。应用Not运算符意味着无论username的值是多少,整个表达式的计算结果都将始终为True

对于使用和而不是或的更正版本,步骤如下:

If LCase(Environ("username")) <> "me" And LCase(Environ("username")) <> "some other user" Then
应用德摩根定律:

If Not(LCase(Environ("username")) = "me" Or LCase(Environ("username")) = "some other user") Then
现在,如果用户名是我或用户名是其他用户,则or条件将计算为True,Not操作符将根据需要将其更改为False


如果用户名是任何其他值,则Or条件将计算为False,Not运算符将根据需要将其更改为True

在此上下文中,什么不起作用?它返回True,你期望False?或者返回False,我期望True,返回True,我期望False,这是不可能的。Environusername不能同时是我和其他用户:and条件只能为False。它是等于还是不等于?抱歉,刚刚检查过。这不等于在这种情况下什么不起作用?它返回True,你期望False?或者返回False,我期望True,返回True,我期望False,这是不可能的。Environusername不能同时是我和其他用户:and条件只能为False。它是等于还是不等于?抱歉,刚刚检查过。这不等于