es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VBA: range.copy no copia todo el rango.

Mi hoja de datos tiene en la columna A información (números entre 10 y 13) que uso para filtrarla. Para ilustrar:

Número Elemento
10 Manzana
11 Azul
10 Naranja
12 Carbono
13 Steve
10 Plátano

Y así sucesivamente. Miles de filas.

Quiero filtrar la tabla en base a la información de la columna A, luego copiar y pegar en una nueva hoja, en el mismo libro. El código:

ActiveWorkbook.Worksheets("Datos").Range("A1").AutoFilter Field:=1, Criteria1:="10"
ActiveWorkbook.Worksheets("Datos").Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Copy _
    ActiveWorkbook.Worksheets("Frutas").Range("A2")

He estado usando este código para varios proyectos y todos funcionaron bien, pero estoy teniendo problemas en mi último proyecto. Solo la primera y segunda fila se están copiando (solo las filas de Manzana y Naranja en mi ejemplo). A veces solo está copiando el encabezado y la primera fila de datos. Esto ocurre tanto cuando ejecuto el código (F5) como cuando lo depuro (F8). Incluso implementé una pausa de tiempo en medio del filtro y la copia-pegado. No funcionó.

Curiosamente, cuando seleccioné una celda aleatoria en medio de la depuración, funcionó. Copiaba las filas enteras que necesitaba. Así que cambié el código a:

ActiveWorkbook.Worksheets("Datos").Range("A1").AutoFilter Field:=1, Criteria1:="10"
Range("D2").Select
ActiveWorkbook.Worksheets("Datos").Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Copy _
    ActiveWorkbook.Worksheets("Frutas").Range("A2")

Eso tampoco funcionó. Estoy confundido y perdido. Cualquier ayuda sería apreciada.

EDIT: El código actual:

With Workbooks("Conferência OPS (R5).xlsx").Worksheets("OPS (Ábaco)")
    .Range("A1").AutoFilter Field:=1, Criteria1:="10"
Workbooks("Conferência OPS (R5).xlsx").Worksheets("OPS (Ábaco)").Range("A2:H" & Range("A" & Rows.Count).End(xlUp).Row).Copy _
    Workbooks("Conferência OPS (R5).xlsx").Worksheets("R10 (Ábaco x SOF)").Range("A2")
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece haber algunas posibles causas para el problema que estás experimentando, pero aquí tienes algunas sugerencias que pueden ayudar:

    • Asegúrate de que los datos en la columna A estén realmente formateados como números y no como texto. En algunos casos, Excel puede tratar los números ingresados como texto de manera diferente y el filtro podría no funcionar como se espera.
    • Verifica si hay celdas fusionadas en el rango de datos en la hoja de trabajo “Data”. Si hay celdas fusionadas, esto podría causar problemas con el filtro y las operaciones de copiar y pegar.
    • Intenta usar el método SpecialCells para seleccionar solo las celdas visibles después de aplicar el filtro. Reemplaza la segunda línea de tu código con lo siguiente:
    ActiveWorkbook.Worksheets("Data").Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Copy _
        ActiveWorkbook.Worksheets("Fruits").Range("A2")
    

    Esto asegurará que solo se copien las celdas visibles (después de aplicar el filtro) en la hoja de trabajo “Fruits”.

    • Otro posible problema podría estar relacionado con el tamaño del rango de datos. Si el rango es muy grande, la operación de copiar y pegar puede llevar mucho tiempo y es posible que no se complete antes de que el código continúe con la siguiente línea. En este caso, puedes intentar agregar la declaración DoEvents después de la operación de copiar y pegar para permitir que la computadora tenga algo de tiempo para ponerse al día antes de continuar con la siguiente línea de código. Por ejemplo:
    ActiveWorkbook.Worksheets("Data").Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Copy _
        ActiveWorkbook.Worksheets("Fruits").Range("A2")
    DoEvents
    

    Espero que estas sugerencias ayuden a resolver el problema que estás enfrentando.

Comments are closed.