Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA中的和/或组合_Vba_Or Operator_And Operator - Fatal编程技术网

VBA中的和/或组合

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”,则

我对“和”“或”语句如何一起工作感到困惑。 我试图使(某物或某物)语句作为“and”语句的一部分工作,但无法理解其逻辑 以下两个代码块说明了该问题。 第一个运行良好。第二个失败,运行时错误438:“对象不支持此属性或方法”。该错误指的是“如果启用j…”行。 在我看来,两者都应该运行。有人能详细说明为什么不是这样吗

代码块1(运行)

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