如果MsgBox内部的语句

有没有人有一种方法,包括VBA中的msgbox中的if语句? 我似乎无法通过searchfind合适的解决scheme…

为了解释,假设我有三个单元格,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个组合。

MsgBox一个string作为第一个参数。 所以你不能在其中包含像If这样的语句。 但是,您可以使用If来build立一个string,并将该string传递给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 
 MsgBox "I include " & IIf(Range("a1") = "", "word one", "") & IIf(Range("a2") = "", "word two", "") 

但请注意, IIF()函数“对truepart和falsepart进行求值,即使它只返回其中的一个”。 所以如果任何评估范围返回一个错误,那么整个语句返回一个错误

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

 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 

在这里输入图像说明