VBA - 带有AND的IF语句不起作用

时间:2017-03-08 16:44:51

标签: excel vba excel-vba if-statement user-controls

任何帮助都会很棒。我似乎无法让ELSEIF与AND一起工作。

我正在使用用户表单。当他们按下按钮时,会出现带有复选框的用户表单。检查两个复选框时遇到问题。个别他们工作正常,

我不确定我做错了什么。任何帮助将不胜感激

If Intact.Value = True Then
    storDate = Sheets("escalation").Cells(Selection.Row, 2)
    storProject = Sheets("escalation").Cells(Selection.Row, 3)
    StorBill = Sheets("escalation").Cells(Selection.Row, 4)
    storIntact = "Intact"

    With objWord.ActiveDocument
    .formfields("text2").Result = storDate
    .formfields("Text3").Result = storProject
    .formfields("Text4").Result = StorBill
    .formfields("Text9").Result = storIntact
    End With

ElseIf Compugen.Value = True Then
    storDate = Sheets("escalation").Cells(Selection.Row, 2)
    storProject = Sheets("escalation").Cells(Selection.Row, 3)
    StorBill = Sheets("escalation").Cells(Selection.Row, 4)
    storCompugen = "Compugen"

    With objWord.ActiveDocument
    .formfields("text2").Result = storDate
    .formfields("Text3").Result = storProject
    .formfields("Text4").Result = StorBill
    .formfields("Text9").Result = storCompugen
    End With

ElseIf Intact.Value And Compugen.Value = True Then
    storDate = Sheets("escalation").Cells(Selection.Row, 2)
    storProject = Sheets("escalation").Cells(Selection.Row, 3)
    StorBill = Sheets("escalation").Cells(Selection.Row, 4)
    storIntact = "Intact"
    storDate1 = Sheets("escalation").Cells(Selection.Row, 2)
    storProject1 = Sheets("escalation").Cells(Selection.Row, 3)
    StorBill1 = Sheets("escalation").Cells(Selection.Row, 4)
    storCompugen = "Compugen"

    With objWord.ActiveDocument
    .formfields("text2").Result = storDate
    .formfields("Text3").Result = storProject
    .formfields("Text4").Result = StorBill
    .formfields("Text9").Result = storIntact
    .formfields("text5").Result = storDate1
    .formfields("Text6").Result = storProject1
    .formfields("Text7").Result = StorBill1
    .formfields("Text8").Result = storCompugen
    End With
End If

提前致谢

2 个答案:

答案 0 :(得分:2)

尝试更改订单。否则,只要满足一个条件,就退出If子句。

If Intact.Value And Compugen.Value Then
    'code
ElseIf Intact.Value Then
    'code
ElseIf Compugen.Value Then
    'code
End If

答案 1 :(得分:1)

如果Intact.Value = True为真,则第一个,而不是第三个块将运行。

同样,如果Intact.Value = True不为真且Compugen.Value = True为真,那么第二个块将会运行。

所以你可以看到第三个块无法访问。

解决方案是将Intact.Value = True And Compugen.Value = True个案放在小组中。

最后,Foo.Value = True是更简单的Foo.Value的重言式。您可以删除所有明确的= True比较。