And/Or 组合 VBA
And/Or combination in VBA
我对 'and' 'or' 语句如何协同工作感到困惑。
我正在尝试使(某物或某物)语句作为 'and' 语句的一部分工作,但无法弄清楚逻辑
以下两个代码块说明了该问题。
第一个工作正常..第二个失败,出现 运行 时间错误 438:"Object doesn't support this property or method"。错误指的是 "If j.Enabled..." 行。
在我看来,两者都应该 运行..任何人都可以详细说明为什么不是这样吗?
代码块 1(运行s)
Private Sub Fini_cbn_Click()
Dim j As Control
For Each j In Controls
If j.Enabled = True And j.Tag = "4" Then
If j.Value = "<NA>" Or j.Value = "" Then
j.BackColor = &HFFFF&
Else
j.BackColor = &H80000005
End If
End If
Next j
End Sub
代码块 2(失败)
Private Sub Fini_cbn_Click()
Dim j As Control
For Each j In Controls
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then
j.BackColor = &HFFFF&
Else
j.BackColor = &H80000005
End If
Next j
End Sub
在第二个版本中,为每个控件执行完整的 if 语句。因此,如果有任何控件没有值 属性,则会评估 if 语句的 "j.value" 部分,但控件没有 属性.
在第一个版本中,我猜您只设置了标签并启用了具有 "value" 属性 的控件。因此 "j.value" 属性 从未尝试被发现。
VBA 没有 short circuit。这意味着每次 .
都会计算整个表达式
所以这里
If j.Enabled = True And j.Tag = "4" Then
If j.Value = "<NA>" Or j.Value = "" Then
j.Value
只得到评估 IF j.Enabled And j.Tag = "4"
一切都很好。
但是这里
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then
整个语句得到评估 "at once"。因此,您的集合中必须有一个控件没有 Value
属性。由于 属性 不存在,因此无法计算该语句。
我对 'and' 'or' 语句如何协同工作感到困惑。 我正在尝试使(某物或某物)语句作为 'and' 语句的一部分工作,但无法弄清楚逻辑 以下两个代码块说明了该问题。 第一个工作正常..第二个失败,出现 运行 时间错误 438:"Object doesn't support this property or method"。错误指的是 "If j.Enabled..." 行。 在我看来,两者都应该 运行..任何人都可以详细说明为什么不是这样吗?
代码块 1(运行s)
Private Sub Fini_cbn_Click()
Dim j As Control
For Each j In Controls
If j.Enabled = True And j.Tag = "4" Then
If j.Value = "<NA>" Or j.Value = "" Then
j.BackColor = &HFFFF&
Else
j.BackColor = &H80000005
End If
End If
Next j
End Sub
代码块 2(失败)
Private Sub Fini_cbn_Click()
Dim j As Control
For Each j In Controls
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then
j.BackColor = &HFFFF&
Else
j.BackColor = &H80000005
End If
Next j
End Sub
在第二个版本中,为每个控件执行完整的 if 语句。因此,如果有任何控件没有值 属性,则会评估 if 语句的 "j.value" 部分,但控件没有 属性.
在第一个版本中,我猜您只设置了标签并启用了具有 "value" 属性 的控件。因此 "j.value" 属性 从未尝试被发现。
VBA 没有 short circuit。这意味着每次 .
都会计算整个表达式所以这里
If j.Enabled = True And j.Tag = "4" Then If j.Value = "<NA>" Or j.Value = "" Then
j.Value
只得到评估 IF j.Enabled And j.Tag = "4"
一切都很好。
但是这里
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then
整个语句得到评估 "at once"。因此,您的集合中必须有一个控件没有 Value
属性。由于 属性 不存在,因此无法计算该语句。