【问题标题】:Excel VBA IF then IF statementExcel VBA IF 然后 IF 语句
【发布时间】:2018-03-28 00:41:51
【问题描述】:

我正在使用“If Then If msgbox vbYesno”语句,但我不确定如何正确摆脱它(我知道 Goto 不干净)。

谁能告诉我我的错误是什么?我没有发现有人使用类似的东西。

Sub IF_THEN_IF()

If Sheet1.Range("A1").Value > 500 Then
    If MsgBox("A1 > 500, Is this correct", vbYesNo, "Amount of Lines") = vbYes Then
        Range("H11").FormulaR1C1 = "My Formula"
    Else
        GoTo Jump
    End If
Else

Jump:    
    Range("H11").FormulaR1C1 = "I have Jumped"

End If

End Sub

【问题讨论】:

  • 如果您描述了您想要实现的目标,而不仅仅是您的代码,也许我们可以提出更好的解决方案

标签: vba excel if-statement msgbox


【解决方案1】:

如果你不打算“跳”,你可以离开你的程序,否则跳:

Sub IF_THEN_IF()
    If Sheet1.Range("A1").Value > 500 Then
        If MsgBox("A1 > 500, Is this correct", vbYesNo, "Amount of Lines") = vbYes Then
            Range("H11").FormulaR1C1 = "My Formula"
            Exit Sub
        End If
   End If
   'Jump
    Range("H11").FormulaR1C1 = "I have Jumped"
End Sub

另一种选择是使用布尔变量:

Sub IF_THEN_IF()
    Dim Jump as Boolean
    Jump = Sheet1.Range("A1").Value <= 500
    If Not Jump Then Jump = MsgBox("A1 > 500, Is this correct", vbYesNo, "Amount of Lines") <> vbYes
    If Jump Then
        Range("H11").FormulaR1C1 = "I have Jumped"
    Else
        Range("H11").FormulaR1C1 = "My Formula"
    End If
End Sub

【讨论】:

    【解决方案2】:

    此答案是对您对 Vityaya 答案的评论的回应。

    将Jump 中的代码转换为子例程,并根据需要调用它。

    Sub IF_THEN_IF()
    
    With Sheet1 
    
        If .Range("A1").Value > 500 Then
    
            Dim res as Variant
            res = MsgBox("A1 > 500, Is this correct", vbYesNo, "Amount of Lines")
    
            If res = vbYes Then
                .Range("H11").FormulaR1C1 = "My Formula"
            Else
                Jump
            End If
    
        Else   
    
            Jump
    
        End If
    
    End Sub
    
    Sub Jump()
       'code here
    End Sub
    

    【讨论】:

    • 现在我看到了 OP 想要什么。
    • 是的,这正是我所期待的解决方案(更清晰/干净),尽管我希望留在同一个 Sub
    【解决方案3】:

    您可以使用AND 运算符

    Sub IF_THEN_IF()    
    If Sheet1.Range("A1").Value > 500 And _
       MsgBox("A1 > 500, Is this correct", vbYesNo, "Amount of Lines") = vbYes Then
    
        Range("H11").FormulaR1C1 = "My Formula"
    
    Else
    
        Range("H11").FormulaR1C1 = "I have Jumped"
    
    End Sub
    

    【讨论】:

    • 但不是相同的代码,因为此代码将始终通过消息框询问,无论 >500 与否。 VB 没有短路的 And 运算符。
    • @ScottHoltzman 不要提它,它会吸引竞争。哎呀错过了End If 行,但是 nvm...:D
    • @LS_ᴅᴇᴠ,可能是 OP 想要确认一切。 :p
    • @Rosetta 也许,但这不是原始代码的作用。
    【解决方案4】:

    一个可能的选项是这样的:

    Sub IfThenElse()
    
        With Sheet1
            If .Range("A1").value > 500 Then
                If MsgBox("A1 > 500, Is this correct", vbYesNo, "Amount of Lines") = vbYes Then
                    .Range("H11") = "My Formula"
                Else
                    .Range("H11") = "I have Jumped"
                End If
            Else
                .Range("H11") = "I have Jumped"
            End If
        End With
    
    End Sub
    

    您有两个嵌入的 if。就这样。在Excel VBA IF then IF statement@Scott Holtzmann 的回答中,您可能会看到如何避免写两次“我已经跳了”,遵循DRY method。

    【讨论】:

    • 作为对 OP 的说明。外部的Else 和下面的行可以完全删除而不影响语法。
    • 我已经想出了这个,但我的问题是,如果 msgbox 是 vbNo 并且 Range("A1").value
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2018-12-30
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多