В конечном итоге я пытаюсь записать диапазон в текстовый файл. Когда я получаю значение диапазона, он возвращает 2d-вариант массива. Однако, если я попытаюсь передать его функции преобразования, это даст мне ошибку несоответствия типа.Попытка конвертировать вариант массива в строку с разделителями и всегда получать несоответствие типов
Код:
Dim Data As String
Set ts = fso.CreateTextFile("testfile.txt", True)
Data = ArrayToDelimitedString(wksMyWorkSheet.Range("rngMyRange").Value)
ts.Write (Data)
ts.Close
Public Function ArrayToDelimitedString(variantArray() As Variant) As String
Dim delimitedString As String, index As Integer
For index = 1 To UBound(variantArray(1))
delimitedString = delimitedString & CStr(variantArray(1, index)) & ","
Next
ArrayToDelimitedString = Left(delimitedString, Len(delimitedString) - 1)
End Function
Я задаюсь вопросом, почему .Value возвращает массив 2d и почему он дает мне эту ошибку рассогласования.
wksMyWorkSheet.Range ("rngMyRange"). Значение возвращает массив 3D (вариант, содержащий объекты вариант). Какой тип Range вы используете? Ряд? Столбец? площадь? –
Диапазон - это строка. Это 3D-массив? Когда я просматриваю код, местные жители показывают, что это Variant/Variant (от 1 до 1, от 1 до 7). Извините, я использую VBA только месяц, поэтому я не слишком хорошо знаком с ним. – rcell
Ну, метод Range всегда будет возвращать 3D-массив. Если вы попытаетесь использовать метод Transpose с 3D-массивом, он перенесет вашу матрицу элементов (это не то, что вам нужно). Но для отдельных строк или столбцов он сдвигает тип данных из Variant/Variant (от 1 до 1, от 1 до 7) в Variant/String. –