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。它是等于还是不等于?抱歉,刚刚检查过。这不等于