为什么“或”不起作用,为什么“与”在这里起作用?

时间:2019-05-09 19:46:37

标签: excel vba

在我的情况下,使用OR无效,我必须使用AND,而且不确定为什么。

buttonPressed = (text) => {
    console.log(text)
}

4 个答案:

答案 0 :(得分:7)

您的示例很难理解,但是您可能只是对运算符的性质感到困惑。

考虑真相表;如果至少一个操作数为Or,则True操作的结果为True

True Or True   => True
True Or False  => True
False Or True  => True
False Or False => False

类似地,如果两个操作数均为And,则True操作的结果为True

True And True   => True
True And False  => False
False And True  => False
False And False => False

如果有帮助,您可以将Or可视化为+(加法),将And可视化为*(乘法),其中False 0True为“非零”:

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

答案 1 :(得分:0)

VBA Or不起作用,因为当Environ("username")时,它不是其他用户,反之亦然。

您要确保这两种可能性都不存在,因此您需要And

答案 2 :(得分:0)

让我们分解一下。我必须假设"me"是您自己的用户名。该测试的结果是: False, True, True

Debug.Print LCase(Environ("username")) <> "me"
Debug.Print LCase(Environ("username")) <> "some other user"
Debug.Print LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user"

这是我的预期行为。

答案 3 :(得分:0)

这可以用DeMorgan's laws来解释。如果我们采取:

If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then

然后我们可以通过将<>替换为=,然后用Not取反每个术语来重写它:

If Not(LCase(Environ("username")) = "me") Or Not(LCase(Environ("username")) = "some other user") Then

使用德摩根定律,只要将Or运算符更改为And运算符,就可以对整个表达式应用单个否定项:

If Not(LCase(Environ("username")) = "me" And LCase(Environ("username")) = "some other user") Then

LCase(Environ("username")不可能同时等于两个不同的值,因此And条件将为False。应用Not运算符意味着,无论“用户名”的值如何,整个表达式将始终为True。


对于使用And而非Or的更正版本,步骤如下:

If LCase(Environ("username")) <> "me" And LCase(Environ("username")) <> "some other user" Then

<>更改为=并应用Not运算符:

If Not(LCase(Environ("username")) = "me") And Not(LCase(Environ("username")) = "some other user") Then

应用德摩根定律:

If Not(LCase(Environ("username")) = "me" Or LCase(Environ("username")) = "some other user") Then

现在,如果用户名是“ me”或用户名是“其他用户”,则Or条件的结果将为True,而Not运算符将根据需要将其更改为False。 / p>

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