Копировать данные из одной рабочей книги в другую, используя заголовок столбца

Есть ли у кого-нибудь кусок кода для копирования из одного Excel WB в другой на основе заголовков столбцов?

Обновление: Извините всех, я новичок в этом сайте, и я надеюсь, что вы можете простить мое невежество.

Вот код, который я пробовал, основываясь на постах других (спасибо, Саймон!).

Sub copy_cols()

    Set SourceWS = Workbooks("Source.xlsx").Worksheets(1)
    Set TargetWS = Workbooks("Business Loader V7.1.xlsx").Worksheets(2)

For Each rgCell In SourceWS.Range("A1:AX1")

TargetWS.Columns(GetColumn(TargetWS, rgCell.Value)) = _
 SourceWS.Columns(GetColumn(SourceWS, rgCell.Value))
' I Have also tried this with no success:
' TargetWS.Columns(GetColumn(TargetWS, rgCell.Value)) = _
 SourceWS.Columns(GetColumn(SourceWS, rgCell.Column))

End Sub

Function GetColumn(GCSheet As Worksheet, ColumnName As String) As Integer
    Dim intCol As Integer

    On Error Resume Next
    intCol = Application.WorksheetFunction.Match(ColumnName, GCSheet.Rows(1), 0)
    If Err.Number <> 0 Then
        GetColumn = 0
    Else
        GetColumn = intCol
    End If
End Function

Я получаю сообщение об ошибке «Несоответствие типов аргументов ByRef» в первой и пятой строке (исключая пробелы при подсчете) в TargetWS.Cells ....

У меня также есть это ..., которое работает, но я должен добавить в кучу .End (xlDown), чтобы учесть недостающую информацию, чтобы скопировать весь столбец (а не только в следующую ячейку со значением). У вас есть лучшая система для учета этого?

Sub CopyHeaders()
    Dim header As Range, headers As Range

    Set SourceWS = Workbooks("Source.xlsx").Worksheets(1)
    Set TargetWS = Workbooks("Business Loader V7.1.xlsx").Worksheets(2)

    Set headers = SourceWS.Range("A1:AX1")

    For Each header In headers
        If GetHeaderColumn(header.Value) > 0 Then
           Range(header.Offset(1, 0), header.End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown).End(xlDown)).Copy Destination:=TargetWS.Cells(2, GetHeaderColumn(header.Value)) '.End(xlDown).Offset(1, 0)
        End If
    Next

Как видите, я должен добавить .End (xlDown) для каждой пустой ячейки. Заранее благодарим за любую помощь, которую вы можете предложить.

Ответы на вопрос(0)

Ваш ответ на вопрос