【问题标题】:Msgbox With If statement带有 If 语句的 Msgbox
【发布时间】:2015-06-17 12:24:46
【问题描述】:

我正在尝试弹出一个框,其中列出了一些可能为空白的值。

MsgBox (res1 & vbNewLine & _
res2 & vbNewLine & _
res3 & vbNewLine & _
res4 & vbNewLine & _
res5 & vbNewLine & _
res6 & vbNewLine & _
res7 & vbNewLine & _
res8 & vbNewLine & _
res9 & vbNewLine & _
res10 & vbNewLine & _
res11 & vbNewLine & _
res12 & vbNewLine)

我想要做的是这样的:

if res1 <> "" then
    res1 & vbNewLine 
else
    ""
end if

因为此刻显示的是空行的负载:

【问题讨论】:

    标签: vba excel excel-2003


    【解决方案1】:

    真遗憾,每个人都让这件事变得比原来更难......

    将所有字符串变量存储在一个数组中,然后创建一个 BuildMessage 函数来接收该数组,然后循环遍历它,返回最终消息。

    Public Sub Test()
    
        Const res1 As String = vbNullString
        Const res2 As String = "Hello"
        Const res3 As String = vbNullString
        Const res4 As String = "GoodBye"
        Const res5 As String = vbNullString
    
        Dim resArr As Variant
        resArr = Array(res1, res2, res3, res4, res5)
    
        Dim msg As String
        msg = BuildMessage(resArr)
    
        MsgBox msg
    
    End Sub
    
    Private Function BuildMessage(ByVal arr As Variant) As String
    
        Dim msg As String
    
        Dim i As Long
        For i = LBound(arr) To UBound(arr)
            Dim str As String
            str = arr(i)
    
            If str <> vbNullString Then
                msg = msg & str & vbNewLine
            End If
        Next
    
        BuildMessage = msg
    
    End Function
    

    【讨论】:

      【解决方案2】:

      如果您不想在 msgbox 函数调用之外创建字符串,您可以使用内联 if:

      MsgBox (res1 & Iif(res1<>"", vbNewLine, "") & _
      res2 & Iif(res2<>"", vbNewLine, "") & _
      res3 & Iif(res3<>"", vbNewLine, "") & _
      res4 & Iif(res4<>"", vbNewLine, "") & _
      res5 & Iif(res5<>"", vbNewLine, "") & _
      res6 & Iif(res6<>"", vbNewLine, "") & _
      res7 & Iif(res7<>"", vbNewLine, "") & _
      res8 & Iif(res8<>"", vbNewLine, "") & _
      res9 & Iif(res9<>"", vbNewLine, "") & _
      res10 & Iif(res10<>"", vbNewLine, "") & _
      res11 & Iif(res11<>"", vbNewLine, "") & _
      res12 & Iif(res12<>"", vbNewLine, "") )
      

      【讨论】:

        【解决方案3】:

        您可以声明一个字符串,并构造字符串来显示字符。类似的,

        Dim tmpRes As String
        
        If Len(res1) > 0 Then _
            tmpRes = tmpRes & res1 & vbCrLf 
        
        If Len(res2) > 0 Then _
            tmpRes = tmpRes & res2 & vbCrLf
        
        If Len(res3) > 0 Then _
            tmpRes = tmpRes & res3 & vbCrLf
        
        If Len(res4) > 0 Then _
            tmpRes = tmpRes & res4 & vbCrLf
        
        If Len(res5) > 0 Then _
            tmpRes = tmpRes & res5 & vbCrLf
        
        If Len(res6) > 0 Then _
            tmpRes = tmpRes & res6 & vbCrLf
        
        If Len(res7) > 0 Then _
            tmpRes = tmpRes & res7 & vbCrLf
        
        If Len(res8) > 0 Then _
            tmpRes = tmpRes & res8 & vbCrLf
        
        If Len(res9) > 0 Then _
            tmpRes = tmpRes & res9 & vbCrLf
        
        If Len(res10) > 0 Then _
            tmpRes = tmpRes & res10 & vbCrLf
        
        MsgBox tmpRes
        

        【讨论】:

        • 天哪,这太可怕了
        猜你喜欢
        • 2020-07-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 2016-08-15
        • 2014-10-26
        • 2018-02-20
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多