如果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