2012-03-26 4 views
1

В конечном итоге я пытаюсь записать диапазон в текстовый файл. Когда я получаю значение диапазона, он возвращает 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 и почему он дает мне эту ошибку рассогласования.

+0

wksMyWorkSheet.Range ("rngMyRange"). Значение возвращает массив 3D (вариант, содержащий объекты вариант). Какой тип Range вы используете? Ряд? Столбец? площадь? –

+0

Диапазон - это строка. Это 3D-массив? Когда я просматриваю код, местные жители показывают, что это Variant/Variant (от 1 до 1, от 1 до 7). Извините, я использую VBA только месяц, поэтому я не слишком хорошо знаком с ним. – rcell

+0

Ну, метод Range всегда будет возвращать 3D-массив. Если вы попытаетесь использовать метод Transpose с 3D-массивом, он перенесет вашу матрицу элементов (это не то, что вам нужно). Но для отдельных строк или столбцов он сдвигает тип данных из Variant/Variant (от 1 до 1, от 1 до 7) в Variant/String. –

ответ

2

Метод Range() возвращает вариант варианта. В случае, если вы хотите использовать 2D-массив (вариант строк), используйте метод Transpose.

ArrayToDelimitedString(wApplication.WorksheetFunction.Transpose(wksMyWorkSheet.Range("rngMyRange").Value))