valores solo según rango pegar pegado macro formato especial copiar condición como celdas excel vba excel-vba copy-paste

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.