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
If-then statement in VBA
提问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_fac1和cbo_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)