【问题标题】:What means If * Then * And conditionIf * Then * And 条件是什么意思
【发布时间】:2016-04-27 07:17:38
【问题描述】:

我可能有一个简单的问题,但它让我大吃一惊。我有一些代码可以对其进行一些重构,但无法弄清楚作者对此语句的想法

If (j > 0) Then greatThanPrec = greatThanPrec And (signalAmplArray(i) > signalAmplArray(j))

我想我知道基本的If Then else 是如何工作的,但不明白为什么之后是A = A,然后是AND 可能是像C/C++ 中的一些短条件?

【问题讨论】:

  • 不,这是一个逻辑(按位)AND。那么就表示“如果条件满足,将A的值改为A And B”。
  • And, Or 是布尔(真/假)运算符。 greatThanPrec 在这里是布尔类型。
  • @PatricK 在 VBA 中,AndOr 是按位的。它们在逻辑上下文中工作得一样好,但它们本质上是按位计算的(与 VB.NET 中的 AndAlsoOrElse 不同)。
  • @GSerg 谢谢,之前没有注意到。我可以用?1 Or 2 (=3) 和?2 And 3 (=2) 在即时窗口中确认。这为我打开了一些计算的调整。

标签: vba excel


【解决方案1】:

那个特定的AndIf Then 无关。

Then 之后的代码只是根据是否signalAmplArray(i) > signalAmplArray(j) 更新greatThanPrec。如果greatThanPrecsignalAmplArray(i) > signalAmplArray(j) 都是TruegreatThanPrec 将保持True,否则它将变为False

为了更好地查看它,请将signalAmplArray(i) > signalAmplArray(j) 替换为其可能的值。您将获得两种选择:

greatThanPrec = greatThanPrec And True  'greatThanPrec does not change its value
greatThanPrec = greatThanPrec And False 'greatThanPrec becomes false

如果你想重构它,那就是

If (j > 0) Then
  If Not (signalAmplArray(i) > signalAmplArray(j)) Then
    greatThanPrec = False
  End If
End If

【讨论】:

  • 这里的 AND 是一个逻辑连接器还是只是在 Then 之后连接两行?
  • And 从不连接两条线。您在 VBA 中使用 : 将多个语句放在一行上。也就是说,您可以编写具有具有副作用的布尔函数的代码,并且可以像= CauseEffects() And CauseMoreEffects() 这样在一行上调用它们,但这既不是这里发生的事情,也是糟糕的代码,尤其是对于那些不这样做的人t实现VBAdoes not have short circuit.
  • @Moosli the And here is a Logical conction yes.
  • @Gserg:感谢您的解释和链接。我学到了一些新东西
  • @GSerg 感谢您的出色回答;)没想到这么简单
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多