Excel VBA Copy Paste Values ​​only (xlPasteValues)

Intento copyr toda la columna en sheetA a Sheet B. sheetA column tiene valores formados con formuls. Estoy copyndo los valores de la columna SheetA solo usando xlPasteValues . Pero no es pegar los valores en otra hojaB. La columna en la hoja B está vacía. Mi código VBA

Public Sub CopyrangeA() Dim firstrowDB As Long, lastrow As Long Dim arr1, arr2, i As Integer firstrowDB = 1 arr1 = Array("BJ", "BK") arr2 = Array("A", "B") For i = LBound(arr1) To UBound(arr1) With Sheets("SheetA") lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row) .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Copy Sheets("SheetB").Range(arr2(i) & firstrowDB).PasteSpecial xlPasteValues End With Next Application.CutCopyMode = False End Sub 

Si solo quiere copyr toda la columna, puede simplificar mucho el código haciendo algo como esto:

 Sub CopyCol() Sheets("Sheet1").Columns(1).Copy Sheets("Sheet2").Columns(2).PasteSpecial xlPasteValues End Sub 

O

 Sub CopyCol() Sheets("Sheet1").Columns("A").Copy Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues End Sub 

O si quieres mantener el ciclo

 Public Sub CopyrangeA() Dim firstrowDB As Long, lastrow As Long Dim arr1, arr2, i As Integer firstrowDB = 1 arr1 = Array("BJ", "BK") arr2 = Array("A", "B") For i = LBound(arr1) To UBound(arr1) Sheets("Sheet1").Columns(arr1(i)).Copy Sheets("Sheet2").Columns(arr2(i)).PasteSpecial xlPasteValues Next Application.CutCopyMode = False End Sub 

Yo iría sin copyr / pegar

  Sheets("SheetB").Range(arr2(i) & firstrowDB).Resize(lastrow, 1).Value = .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Value 

Personalmente, también lo acorté un poco si todo lo que necesitas son las columnas:

 For i = LBound(arr1) To UBound(arr1) Sheets("SheetA").Columns(arr1(i)).Copy Sheets("SheetB").Columns(arr2(i)).PasteSpecial xlPasteValues Application.CutCopyMode = False Next 

a partir de este fragment de código, no hay mucho más en lastrow o firstrowDB

puedes usar esto:

 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 

Puedes usar esto también

 Sub CopyPaste() Sheet1.Range("A:A").Copy Sheet2.Activate col = 1 Do Until Sheet2.Cells(1, col) = "" col = col + 1 Loop Sheet2.Cells(1, col).PasteSpecial xlPasteValues End Sub