将数组变量的所有元素放在消息框中的各自行上

Ric*_*man 0 arrays vba msgbox

下面的代码是我写的一个宏的片段,用于警告用户他们可能没有足够数量的兼容安装设备.n个缺陷(即,没有兼容安装设备的设备项目的每个实例都保存在元素1到n的yankees()数组中.我想要做的是提示用户输入一个消息框,说明"请检查您的订单以确保你有足够的兼容安装设备 - 我们检测到以下不足之处"

在那之下

在消息框中的单独行中包括yankees(1到n)的所有元素,下面有两个选项"这没关系,我现在将提交订单"和"让我回去,我想修改我的订单".

我该如何创建这样的消息框?

我有:

 MsgBox "Please review your order to ensure you have you sufficient compatible     installation equipment- we detected the following concerns" & yankee(1), vbOKCancel
Run Code Online (Sandbox Code Playgroud)

目前但这只包括第一次缺口.如何包含yankee()的所有元素并将它们放在自己的行上?

这个问题实际上归结为:"如何在消息框提示符中将数组变量的所有非空元素放在自己的行上"?

Do
If rip(qbert) < k(qbert) Then
yankee(jets) = "Your order for" & s(qbert) & " contains " & k(qbert) - rip(qbert) & " too     few " & g(qbert)
jets = jets + 1
qbert = qbert + 1
Else
qbert = qbert + 1
End If
Loop Until qbert > echo
Run Code Online (Sandbox Code Playgroud)

Dav*_*ens 5

你可以使用这个Join功能:

Sub Test()
    Dim var As Variant

    'Populate a dummy vector array from a comma-separated list:
    var = Split("Alpha,Beta,Gamma,Delta,Epsilon", ",")

    'Display the contents of the array as delimited list, use the Carriage Return to delimit:
    MsgBox Join(var, vbCR)

End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

以上并不忽视空白.要忽略空白,根据您的具体问题,您可以迭代数组并测试空值.我会这样做Function:

如何在消息框提示中将数组变量的所有非空元素放在各自的行上

在你的sub中,只需传递yankees给这个函数,如:

MsgBox = GetMessageText(yankees)
Run Code Online (Sandbox Code Playgroud)

这是功能:

Function GetMessageText(var As Variant) As String
    'Assumes a vector array
    On Error GoTo EarlyExit

    Dim sMsg As String
    Dim v As Variant

    For Each v In var
        If Not v = vbNullString Then
            sMsg = sMsg & v & vbCr
        End If
    Next

EarlyExit:
    If Err.Number = 0 Then
        GetMessageText = sMsg
    Else:
        GetMessageText = "invalid array"
    End If

End Function
Run Code Online (Sandbox Code Playgroud)