Copiar rango de celdas a otro excel VBA

¿Me pueden ayudar que es lo que tengo mal en este código?

Estoy tratando de recorrer un rango y cuando este en una fila que la columna 19 sea diferente de Ok la copie en otro libro

El archivo destino esta abierto cargo el de origen compruebo los errores hasta ahí funciona porque lo abre y lo corrige, luego vuelvo a recorrer para que me traiga los error al libro que no esta activo mientras hace este proceso de copiar, dejo mi código

Dim filaDondeCopiar As Integer: filaDondeCopiar = 13
For f = 7 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Cells(f, 23).Value <> "Ok" Then
LibroDestino.Range(Cells(filaDondeCopiar, 2), Cells(filaDondeCopiar, 19)).Value = ActiveSheet.Range(Cells(f, 2), Cells(f, 19)).Value
End If
Next f
LibroOrigen.Close SaveChanges:=False

Respuesta

Prueba con algo parecido a:

Sub prueba()
    Dim filaDondeCopiar As Integer: filaDondeCopiar = 13
    Dim f As Integer
    Dim LibroDestino As Workbook, LibroOrigen As Workbook, HojaDestino As Worksheet, HojaOrigen As Worksheet
    Set LibroDestino = Workbooks("Libro2.xlsx") 'Libro donde se hará la copia
    Set HojaDestino = LibroDestino.Worksheets("Hoja1") 'Hoja donde se hará la copia
    Set LibroOrigen = ThisWorkbook
    Set HojaOrigen = LibroOrigen.Worksheets("Hoja1") 'Hoja desde la que se hará la copia
    With HojaOrigen
        For f = 7 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
            If .Cells(f, 23).Value <> "Ok" Then
                Range(.Cells(f, 2), .Cells(f, 19)).Copy Destination:=HojaDestino. Cells(filaDondeCopiar, 2)
                filaDondeCopiar = filaDondeCopiar + 1
            End If
        Next f
    End With
    LibroOrigen.Close SaveChanges:=False
    Set LibroDestino = Nothing
    Set LibroOrigen = Nothing
    Set HojaDestino = Nothing
    Set HojaOrigen = Nothing
End Sub

Saludos_

1 respuesta más de otro experto

Respuesta
1

Te falta hacer referencia a la hoja donde vas a pegar:

  Dim filaDondeCopiar As Integer: filaDondeCopiar = 13
  For f = 7 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    If Cells(f, 23).Value <> "Ok" Then
      With LibroDestino.Sheets("Hoja1")
        .Range(.Cells(filaDondeCopiar, 2), .Cells(filaDondeCopiar, 19)).Value = _
          ActiveSheet.Range(ActiveSheet.Cells(f, 2), ActiveSheet.Cells(f, 19)).Value
          filaDondeCopiar = filaDondeCopiar + 1
      End With
    End If
  Next f

Siempre debes hacer referencia a la hoja de copiar y la hoja de pegar:

ActiveSheet. Range(ActiveSheet. Cells(f, 2), ActiveSheet. Cells(f, 19)).Value

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas