Функция 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
, чтобы превратить каждый "фрагмент" в строку с разделителями (укажите необходимый разделитель), и добавьте каждую строку с разделителями в окончательное представление строки .