Copiar dados de uma pasta de trabalho para outra usando o cabeçalho da coluna
Alguém tem um pedaço de código para copiar de um excel WB para outro com base em cabeçalhos de coluna?
Atualização: Desculpe a todos, sou novo neste site e espero que você possa perdoar minha ignorância.
Aqui está o código que eu tentei, com base nas postagens de outras pessoas (obrigado, Simon!).
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
Estou recebendo um erro "Incompatibilidade de tipo de argumento ByRef" na primeira e na quinta linha (excluindo os espaços ao contar) no TargetWS.Cells ....
Eu também tenho isso ... o que funciona, mas eu tenho que adicionar um monte de. End (xlDown) para contabilizar as informações ausentes, para que toda a coluna seja copiada (não apenas para a próxima célula com um valor). Você tem um sistema melhor para explicar isso?
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
Como você pode ver, eu tenho que adicionar. End (xlDown) para cada célula em branco. Agradecemos antecipadamente por qualquer assistência que você possa oferecer.