什么意思如果*然后*和条件

Lub*_*Suk 2 excel vba excel-vba

我可能有一个简单的问题,但它让我大吃一惊.我有一些代码可以对它进行一些重构,但是无法弄清楚作者在这句话中的想法

If (j > 0) Then greatThanPrec = greatThanPrec And (signalAmplArray(i) > signalAmplArray(j))
Run Code Online (Sandbox Code Playgroud)

我想我知道基本的If Then else工作原理,但是不能意识到为什么会像A = A之后那样,然后AND可能是像C/C++这样的短暂状态?

GSe*_*erg 9

那个特别And与之无关If Then.

Then简单更新后的代码greatThanPrec取决于是否signalAmplArray(i) > signalAmplArray(j).greatThanPrec会留True如果两个greatThanPrecsignalAmplArray(i) > signalAmplArray(j)True的,否则就会变成False.

为了更好地看到它,请替换signalAmplArray(i) > signalAmplArray(j)为其可能的值.您将获得两个选项:

greatThanPrec = greatThanPrec And True  'greatThanPrec does not change its value
Run Code Online (Sandbox Code Playgroud)
greatThanPrec = greatThanPrec And False 'greatThanPrec becomes false
Run Code Online (Sandbox Code Playgroud)

如果你想重构它,那就是

If (j > 0) Then
  If Not (signalAmplArray(i) > signalAmplArray(j)) Then
    greatThanPrec = False
  End If
End If
Run Code Online (Sandbox Code Playgroud)

  • `而且'从不连接两条线.在VBA中使用`:`将多个语句放在一行上.也就是说,您可以编写具有副作用的布尔函数的代码,并且您可以在一行上调用它们,例如`= CauseEffects()和CauseMoreEffects()`,但这不是这里发生的事情并且是错误的代码,特别是那些没有意识到VBA [没有短路]的人(http://stackoverflow.com/q/3242560/11683). (2认同)