如果MsgBox里面有语句

时间:2016-09-01 14:57:59

标签: excel excel-vba excel-formula vba

有没有人有办法在VBA中的msgbox中包含if语句?我似乎无法通过搜索来找到合适的解决方案......

为了解释,假设我有三个单元格a1和a2,如果其中任何一个为空,我想要一个单词包含在msgbox中。

所以我想要像

这样的东西
Sub xx
  Msgbox if a1 = "" include "word one" end if &  if a2="" include "word two" end if
End sub 

我知道我可以使用msgbox之外的if语句来完成它,但我的问题有点大,需要超过1000种组合。

3 个答案:

答案 0 :(得分:4)

MsgBox将字符串作为第一个参数。因此,您不能在其中包含If等语句。但是,您可以使用If构建字符串并将该字符串传递给MsgBox,如下所示:

Sub xx()
    Dim message As String
    If a1 = "" Then
        message = "word one"
    End If
    If a2 = "" then
        message = message & "word two"
    End if
    MsgBox message
 End Sub

或者,如果你真的想要它在一行中,你可以使用内联的IIF(如果有重要的区别,但它们在你的具体用途中无关紧要)情况下)

Sub xx()
    MsgBox IIF(a1 = "", "word one","") & IIF(a2="", "word two", "")
End Sub

答案 1 :(得分:0)

MsgBox "I include " & IIf(Range("a1") = "", "word one", "") & IIf(Range("a2") = "", "word two", "")

但请注意IIF()函数“计算truepart和falsepart,即使它只返回其中一个。”以便如果任何计算范围返回错误则整个语句返回错误

答案 2 :(得分:0)

您可以使用一个数组来检查范围内具有数组IF的所有单元格,然后生成一个自定义消息(可以返回匹配的单词范围,或者在下面的示例中,单元格为空白的行号) )

Sub SloaneDog()
Dim strIn As String
strIn = Join(Filter(Application.Transpose(Application.Evaluate("=IF(A1:A20= """",""Word "" & ROW(A1:A20),""X"")")), "X", False), vbNewLine)
MsgBox strIn, vbYesNo, "words"
End Sub

enter image description here