Как предотвратить Application.WorksheetFunction.Transpose от простого вставки первого значения в массив

Так что я выполняю относительно простую задачу в vba, но почесываю голову над результатом. Я пишу массив заголовков coumn, а затем пытаюсь вставить их через функцию Application.WorksheetFunction.Transpose, но мне не повезло... он просто вставляет первое значение в массив длины диапазона.

Вот мой код:

<i>  sub test
     Dim myHeadings() As Variant
     Dim header_rng As Range

     myHeadings = Array("a", "b" , "C", "D")

     'Set header_rng = Range(Cells(10, 2), Cells(10, UBound(myHeadings)))

     Dim name As String
     Dim name_Array As String
     name = TixCollection(1).ADR

     Call PrintArray(10, 2, myHeadings, name)


     End sub


     Sub PrintArray(RowPrint, ColPrint, ArrayName, WorkSheetName)

    'Dim element As Variant
    'For Each element In ArrayName
    'Debug.Print element
    'Next element


    Sheets(WorkSheetName).Range(Cells(RowPrint, ColPrint), _
    Cells(RowPrint, UBound(ArrayName))) = _
    WorksheetFunction.Transpose(ArrayName)

    End Sub

Что не так с этим?

1 ответ

Как упоминалось в комментариях, массив не нужно транспонировать, если вы хотите, чтобы заголовки были размещены в одной строке для столбцов различий. Однако вам нужно добавить количество столбцов в начальный столбец (2 в вашем случае). Вот код, который я получил для работы ниже.

Sub PasteHeadersToSheet()

    Dim myHeadings() As Variant
    myHeadings = Array("a", "b", "C", "D")

    ' set sheet name
    sheetName = "sheet1"

    ' set starting row
    startRow = 10

    ' set starting row
    startColumn = 2

    Call PrintArray(startRow, startColumn, myHeadings, sheetName)


End Sub


Sub PrintArray(RowPrint, ColPrint, ArrayName, WorkSheetName)

    ' set worksheet
    Set ws = Sheets(WorkSheetName)

    ' set starting cell
    Set cellStart = Cells(RowPrint, ColPrint)

    ' set ending cell
    Set cellEnd = Cells(RowPrint, UBound(ArrayName) + ColPrint)

    ' paste array to selected worksheet and range of cells
    ws.Range(cellStart, cellEnd) = ArrayName

End Sub
Другие вопросы по тегам