Estoy usando este código para extraer 2 columnas en un libro cerrado existente, ¿cómo puedo mezclarlas?

   Sub CopyColumnToWorkbookA()
Dim sourceColumn As Range, targetColumn As Range
Set sourceColumn = Workbooks.Open(ThisWorkbook.Path & "\res\res.xlsx", False, True).Worksheets(1).Columns("A")
Set targetColumn = Workbooks("Caltoday.xlsm").Worksheets(2).Columns("A")
sourceColumn.Copy Destination:=targetColumn
End Sub
   Sub CopyColumnToWorkbookB()
Dim sourceColumnb As Range, targetColumnb As Range
Set sourceColumnb = Workbooks.Open(ThisWorkbook.Path & "\res\res.xlsx", False, True).Worksheets(1).Columns("B")
Set targetColumnb = Workbooks("Caltoday.xlsm").Worksheets(2).Columns("B")
sourceColumnb.Copy Destination:=targetColumnb
ActiveWorkbook.Close
End Sub

No quiero abrir el libro dos veces, pero he tratado de mezclarlos sin éxito, ¿alguna idea?

0
Juan Hernandez 6 mar. 2018 a las 21:04

3 respuestas

La mejor respuesta

No es necesario cerrar dos veces, solo combine en un sub. El siguiente es un poco más "prolijo" de lo necesario, pero lo mantuve así para que pueda aprender y ver una manera de hacerlo.

Sub copyColumn()
Dim sourceWB As Workbook
Dim sourceWS As Worksheet

Set sourceWB = Workbooks.Open(ThisWorkbook.Path & "\res\res.xlsx", False, True)
Set sourceWS = sourceWB.Worksheets(1)

Dim i As Long
For i = 1 To 2
    sourceWS.Columns(i).Copy Workbooks("Caltoday.xlsm").Worksheets(2).Columns(i)
Next i

sourceWB.Close False
Application.CutCopyMode = False
End Sub

O simplemente hazlo

SourceWS.Columns("A:B").Copy Workbooks("Caltoday.xlsm").Worksheets(2).Columns("A:B")
1
BruceWayne 6 mar. 2018 a las 18:19

Mis 0.02 centavos

Sub copyColumn()
    With Workbooks.Open(ThisWorkbook.Path & "\res\res.xlsx", False, True) ‘ open and reference source workbook
        .Worksheets(1).Columns("A:B").Copy Destination:=Workbooks("Caltoday.xlsm").Worksheets(2).Columns("A:B") ‘ copy referenced workbook sheet 1 columns A: B and paste into Caltoday workbook sheet 2 same columns
        .Close False ‘close referenced workbook discarding changes
    End With
End Sub
0
DisplayName 6 mar. 2018 a las 21:09

Obtenga ambas columnas al mismo tiempo. Luego use su copia para pegarlos al mismo tiempo.

Set sourceColumn = Workbooks.Open(ThisWorkbook.Path & "\res\res.xlsx", False, True).Worksheets(1).Columns("A:B")

Set targetColumn = Workbooks("Caltoday.xlsm").Worksheets(2).Columns("A:B")
1
BruceWayne 6 mar. 2018 a las 18:13