在第一个IF满足条件时跳转到IF语句的末尾

时间:2019-01-19 06:25:17

标签: vba if-statement ms-word goto

下面的宏获取输入(股票代号)并将其转换为国家名称。获得输入后,它将经历所有If个条件。当条件Ifs最初满足时,如何阻止宏遍历所有If

例如:现在,宏在第一个If变量UT变为“保加利亚”之后获取输入“ BU”,现在我需要在此处停止并跳到最后一个{ {1}}。怎么做?还有其他方法可以解决这种情况吗?

If

5 个答案:

答案 0 :(得分:3)

使用精选案例

Select Case ut
    Case "DU","UH"
        ut = "UNITED ARAB EMIRATES"
    Case "BU"
        ut = "BULGARIA"
    Case "AR"
        ut = "ARGENTINA"
        '...
End Select

您也可以考虑使用字典,例如BU是关键,替换是价值。

带有字典的示例:

Dim dict As Object, ut As String
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "BU", "Bulagaria"
dict.Add "AR", "Argentina"
'etc

'Example
ut = "AR"
If dict.Exists(ut) Then ut = dict(ut)

答案 1 :(得分:1)

在第一个If之后,所有其他字符都应为ElseIf。如果先前的If测试为真,则其中的“ Else”部分将被跳过。

答案 2 :(得分:1)

这个问题让我考虑了哪种解决方案在Select CaseElseIfI previously did a comparison of Long vs Integer)之间的执行速度更快。我对一堆Select Case代码进行了一些测试,并与类似的ElseIf代码进行了比较。

可以预见,两者之间并没有太大区别,但是Select语句总是比ElseIf 运行。我做了大约60亿个案例检查的几次迭代,两者之间的差异似乎是一致的。

我怀疑这么大的体积上的几秒钟变化是否值得偏离您最习惯的任何方法。但是,这是我的结果以及如果有人好奇的话使用的代码:

enter image description here

'Module variables
Dim beginTIme As Double, i As Long, r As Long
Const MaxValue As Long = 999999999

Sub goSelect()
    beginTIme = Now

    For i = 0 To MaxValue
        r = r Mod 12

        Select Case r
            Case 0
            Case 1
            Case 2
            Case 3
            Case 4
            Case 5
            Case 6
            Case 7
            Case 8
            Case 9
            Case 0
            Case 11
        End Select

    Next i

    With Cells(Rows.Count, 1).End(xlUp)
        .Offset(1, 0).Value = Round((Now - beginTIme) * 3600 * 24, 0) & " seconds using select."
        .Offset(1, 1).Value = MaxValue
    End With

End Sub


Sub go4If()
    beginTIme = Now

    For i = 0 To MaxValue
        r = r Mod 12

        If r = 0 Then
            ElseIf r = 1 Then
            ElseIf r = 2 Then
            ElseIf r = 3 Then
            ElseIf r = 4 Then
            ElseIf r = 5 Then
            ElseIf r = 6 Then
            ElseIf r = 7 Then
            ElseIf r = 8 Then
            ElseIf r = 9 Then
            ElseIf r = 10 Then
            ElseIf r = 11 Then
        End If

    Next i

    With Cells(Rows.Count, 3).End(xlUp)
        .Offset(1, 0).Value = Round((Now - beginTIme) * 3600 * 24, 0) & " seconds using elseif."
        .Offset(1, 1).Value = MaxValue
    End With

End Sub
'Yeah this is what I'm doing on Saturday night....

答案 3 :(得分:0)

您可以使用Case语句:

Select Case ut
Case "BU"
    ut = "BULGARIA"
Case "AR"
    ut = "ARGENTINA"
...
End Select

如果还可以,也可以使用

If ut = "BU" Then
    ut = "BULGARIA"
ElseIf ut = "AR" Then
    ut = "ARGENTINA"
ElseIf
    ...
End If

答案 4 :(得分:0)

您可以使用:

If ut = "BU" Then
   ut = "Bulgaria"
Elseif ut ="ZL" Then
   ut = "Zambia"
...
End If

但是由于条件如此之多,我还是建议使用Select语句。这样,您只需编写一次变量,并且在不满足任何条件的情况下便拥有一个Case Else

Select Case ut
   Case "ZL"
       ut = "Zambia"
   Case "BU"
        ...
   ....
   Case Else
       Msgbox "Country not found"
End Select