vba VBA中的if-then语句

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13055281/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-11 18:12:44  来源:igfitidea点击:

If-then statement in VBA

excelvba

提问by methuselah

I'm currently writing two sets of if-else statements which are very similar. They basically compare three drop down menus and ensure that the user has not put down two matching preferences. For example:

我目前正在编写两组非常相似的 if-else 语句。他们基本上比较三个下拉菜单,并确保用户没有放下两个匹配的偏好。例如:

cbo_fac1 - Kitchen    
cbo_fac2 - Kitchen   
cbo_fac3 - Lounge

This would return an error message because cbo_fac1and cbo_fac2match up. But there is a special case scenario I'm struggling to implement. One of the drop down cases is No preference.

这将返回一条错误消息,因为cbo_fac1cbo_fac2匹配。但是有一种特殊情况我正在努力实施。下拉情况之一是No preferred

cbo_fac1 - Kitchen    
cbo_fac2 - No preference
cbo_fac3 - No preference

cbo_fac1 - No preference    
cbo_fac2 - No preference
cbo_fac3 - No preference

With any scenario No preferenceselection is allowed to match. How do I go about implementing this? Here is the code I'm using so far:

对于任何场景,不允许匹配任何偏好选择。我该如何实施?这是我目前使用的代码:

If cbo_fac1.Value = cbo_fac2.Value Then
    MsgBox ("Facilities preference 1 and facilities preference 2 cannot be the same. Please select another option for facilities preference 2, if you have none then select 'No preference'")
    Exit Sub
End If

If cbo_fac1.Value = cbo_fac3.Value Then
    MsgBox ("Facilities preference 1 and facilities preference 3 cannot be the same. Please select another option for facilities preference 3, if you have none then select 'No preference'")
    Exit Sub
End If

If cbo_fac2.Value = cbo_fac3.Value Then
    MsgBox ("Facilities preference 2 and facilities preference 3 cannot be the same. Please select another option for facilities preference 3, if you have none then select 'No preference'")
    Exit Sub
End If

回答by Daniel

If you want to write it as one giant if statement, this should do:

如果你想把它写成一个巨大的 if 语句,应该这样做:

If (cbo_fac1.Value <> cbo_fac2.Value Or cbo_fac1.Value = "No Preference") And _
   (cbo_fac2.Value <> cbo_fac3.Value Or cbo_fac2.Value = "No Preference") And _
   (cbo_fac1.Value <> cbo_fac3.Value Or cbo_fac3.Value = "No Preference") Then
     'Input is fine
else
     exit sub

End If

Edit:

编辑:

Just because here's the reverse way, with a possible msgbox:

只是因为这是相反的方式,可能有一个 msgbox:

If (cbo_fac1.value = cbo_fac2.value AND cbo_fac1.value <> "No Preference") OR _
   (cbo_fac2.value = cbo_fac3.value AND cbo_fac2.value <> "No Preference") OR _
   (cbo_fac1.value = cbo_fac3.value AND cbo_fac3.value <> "No Preference") then

   Msgbox "No two facilities can be the same. Please select another option " & _
          "for facilities preference, if you have none then select 'No preference'"
   exit sub
else
   'input is fine
end if

回答by Siva Charan

Check something like

检查类似

If cbo_fac1.Value = cbo_fac2.Value and cbo_fac1.Value <> "No Preference" and cbo_fac2.Value <> "No Preference" Then
    MsgBox ("Facilities preference 1 and facilities preference 2 cannot be the same. Please select another option for facilities preference 2, if you have none then select 'No preference'")
    Exit Sub
End If

Do the same check for other 2 IF conditions.

对其他 2 个 IF 条件进行同样的检查。

UPDATE:

更新:

There is another way, by writing a function

还有一种方法,通过写一个函数

Below is the sample function.

下面是示例函数。

Sub PreferenceCheck(var1 As String, var2 As String)
    If var1 = "No Preference" Or var2 = "No Preference" Then
        tempVar = true
    End If
    If Not tempVar Then
        If var1=var2 Then
            MsgBox ("Facilities "&var1&" and facilities "&var2&" cannot be the same. Please select another option for facilities preference, if you have none then select 'No preference'")
        End If
    End If
End Sub

Calling this function for 3 combinations

为 3 种组合调用此函数

PreferenceCheck(cbo_fac1.Value, cbo_fac2.Value)
PreferenceCheck(cbo_fac2.Value, cbo_fac3.Value)
PreferenceCheck(cbo_fac1.Value, cbo_fac3.Value)