VBA中的和/或组合
我对“和”“或”语句如何一起工作感到困惑。 我试图使(某物或某物)语句作为“and”语句的一部分工作,但无法理解其逻辑 以下两个代码块说明了该问题。 第一个运行良好。第二个失败,运行时错误438:“对象不支持此属性或方法”。该错误指的是“如果启用j…”行。 在我看来,两者都应该运行。有人能详细说明为什么不是这样吗 代码块1(运行)VBA中的和/或组合,vba,or-operator,and-operator,Vba,Or Operator,And Operator,我对“和”“或”语句如何一起工作感到困惑。 我试图使(某物或某物)语句作为“and”语句的一部分工作,但无法理解其逻辑 以下两个代码块说明了该问题。 第一个运行良好。第二个失败,运行时错误438:“对象不支持此属性或方法”。该错误指的是“如果启用j…”行。 在我看来,两者都应该运行。有人能详细说明为什么不是这样吗 代码块1(运行) Private Sub Fini\u cbn\u Click() Dim j As控件 对于控件中的每个j 如果j.Enabled=True且j.Tag=“4”,则
Private Sub Fini\u cbn\u Click()
Dim j As控件
对于控件中的每个j
如果j.Enabled=True且j.Tag=“4”,则
如果j.Value=“”或j.Value=“”,则
j、 背景色=&HFFFF&
其他的
j、 背景色=&H8000005
如果结束
如果结束
下一个j
端接头
代码块2(失败)
Private Sub Fini\u cbn\u Click()
Dim j As控件
对于控件中的每个j
如果j.Enabled=True且j.Tag=“4”和(j.Value=”“或j.Value=”“)则
j、 背景色=&HFFFF&
其他的
j、 背景色=&H8000005
如果结束
下一个j
端接头
在第二个版本中,为每个控件执行完整的if语句。因此,如果有任何控件没有value属性,则会计算if语句的“j.value”部分,但该控件没有该属性
在第一个版本中,我猜您只设置了标记并启用了具有“value”属性的控件。因此,永远不会尝试找到“j.value”属性。VBA不会。这意味着每次对整个表达式求值
所以这里
“一次”计算整个语句。因此,集合中必须有一个控件没有
值
属性。由于属性不存在,因此无法计算语句。这是用于什么应用程序的?访问权限?我的第一个猜测是,每个控件都没有“value”属性,因此您正在循环的一个控件缺少该属性。尝试msgbox j.value,然后查看它是否出错,以及它在哪个控件上出错。要添加到@OpiesDad:在第二个示例中,j.value
总是被计算,并且在.value
不可用时会出错,例如,j.Enabled=False
。在您的第一个示例中,这个问题是可以避免的,因此这是正确的方法。
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
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 j.Enabled = True And j.Tag = "4" Then
If j.Value = "<NA>" Or j.Value = "" Then
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then