Как отобразить все значения варианта с помощью окна сообщения в Visual Basic? - PullRequest
0 голосов
/ 25 апреля 2019

Я создал матрицу в Sub.Я хотел бы знать, есть ли какой-нибудь быстрый способ построить значения этой матрицы в окне сообщения?

Вот код:

Dim A() As Variant

ReDim A(5, 5)
   For i = 1 To 5
       For j = 1 To 5
        A(i, j) = 1
       Next j
 Next i

Попытка построить:

MsgBox A

Как я могу добиться этого легко и быстро?Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Функция MsgBox принимает аргумент String для своего параметра Prompt. A - это массив 2D Variant, содержащий 25 Variant/Integer значений и 11 Variant/Empty значений - неявная нижняя граница для массивов неявного размера равна 0, если не указано Option Base 1; Я бы рекомендовал использовать явные границы массива, например, ReDim A(1 To 5, 1 To 5) вместо этого, но эта ошибка не была вопросом.

VBA не знает, как вы хотите представить массив в виде строки. В .NET строковое представление по умолчанию массива int выглядит так: int[], потому что реализация ToString по умолчанию просто возвращает имя типа данных объекта: другие языки могут иметь другие строковые представления по умолчанию для массива, но суть в том, что вам нужно реализовать это самостоятельно.

Может быть, вы хотите, чтобы он был разделен табуляцией? Или через запятую?

Легко? Переберите массив и объедините вашу строку:

Dim s As String
For i = LBound(A, 1) To UBound(A, 1)
    For j = LBound(A, 2) To UBound(A, 2)
        s = s & vbTab & A(i, j)
    Next
    s = s & vbNewLine
Next
MsgBox s

Быстрая? Используйте StringBuilder :

With New StringBuilder
    For i = LBound(A, 1) To UBound(A, 1)
        For j = LBound(A, 2) To UBound(A, 2)
            .Append A(i, j) & vbTab
        Next
        .Append vbNewLine
    Next
    MsgBox .ToString
End With

Fancy? Возьмите Slice каждого элемента i, используйте функцию VBA.Strings.Join, чтобы превратить каждый "фрагмент" в строку с разделителями (укажите необходимый разделитель), и добавьте каждую строку с разделителями в окончательное представление строки .

1 голос
/ 25 апреля 2019

Создайте строку из вашего массива и постройте ее, попробуйте:

Sub tst()
Dim A() As Variant
Dim aa As String

ReDim A(5, 5)
   For i = LBound(A, 1) To UBound(A, 1)
       For j = LBound(A, 2) To UBound(A, 2)
        A(i, j) = 1
        aa = aa & A(i, j) & vbTab
       Next j
        aa = aa & vbCrLf
 Next i
MsgBox aa
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...