excel - solo - pegar valores y formato vba
Excel VBA Copiar solo pegar valores(xlPasteValues) (7)
Estoy tratando de copiar la columna completa de la hoja A a la hoja B. La columna de la hoja A tiene valores formados con fórmulas. Estoy copiando los valores de la columna de SheetA solo usando xlPasteValues . Pero no es pegar los valores a otra hojaB. La columna en sheetB 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
Iría sin copiar / 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 acortaría un poco si lo único que necesita 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 fragmento de código, no hay mucho punto en lastrow
o firstrowDB
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
Si solo desea copiar 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 bucle
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
También he tenido este problema antes y creo que encontré la respuesta.
Si está utilizando un botón para ejecutar la macro, es probable que esté vinculado a una macro diferente, tal vez como una versión guardada de lo que está trabajando actualmente y es posible que ni siquiera se dé cuenta. Intente ejecutar la macro directamente desde VBA (F5) en lugar de ejecutarla con el botón. Mi conjetura es que funcionará. Solo tiene que reasignar la macro en el botón a la que realmente desea ejecutar.
puedes usar esto
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
selection = selection.values
Esto hace las cosas de una manera muy rápida.