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