Compartir a través de

VBA Excel. Seleccionar rango celdas filtradas. Problema cuando el filtro es de una sola línea

Anónimas
2018-11-25T19:42:33+00:00

hola,

tengo una macro que debe seleccionar un rango después de hacer un filtro. Lo copia y lo pega en otra hoja.

El problema me viene cuando el resultado de ese filtro es una sola línea, ya que el Selection.End(xlDown) me lo lleva hasta el final de la hoja (más de un millón de líneas) y es lo que se lleva. A continuación detallo la parte de selección.

gracias por vuestra ayuda

    With ActiveCell

        With .Offset(1, 0).Resize(Rows.Count - .Row, 1)

            .SpecialCells(xlCellTypeVisible).Cells(1, 1).Select

        End With

        End With

      Range(Selection, ActiveCell.Offset(0, 9)).Select

      Range(Selection, Selection.End(xlDown)).Select

      Selection.Copy

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

Respuesta aceptada por el autor de la pregunta

  1. Anónimas
    2018-11-26T07:43:30+00:00

    es más prudente buscar la última fila desde el final, algo así: UltimaFila= cells(1000000,1).end(xlup).row

    3 personas han encontrado útil esta respuesta.
    0 comentarios No hay comentarios

Respuesta aceptada por el autor de la pregunta

  1. Anónimas
    2018-11-26T12:09:44+00:00

    No es necesario hacer Select. 

    Utilizar activecell o activesheet, tiene su riesgo y tampoco es buena idea.

    2 personas han encontrado útil esta respuesta.
    0 comentarios No hay comentarios

2 respuestas adicionales

Ordenar por: Muy útil
  1. Anónimas
    2018-11-26T10:07:37+00:00

    gracias. ha sido la solución

        Cells(100000, 1).Select

        ActiveCell.End(xlUp).Select

        Range(Selection, ActiveCell.Offset(0, 9)).Select

        Range(Selection, Selection.End(xlUp).Offset(1, 0)).Select

    lo envío lejos   -->    Cells(100000, 1).Select

    subo a la siguiente línea alimentada --> ActiveCell.End(xlUp).Select

    subo hasta el principio exceptuando la cabecera --> Range(Selection, Selection.End(xlUp).Offset(1, 0)).Select

    5 personas han encontrado útil esta respuesta.
    0 comentarios No hay comentarios
  2. Héctor Miguel 71,595 Puntos de reputación
    2018-11-25T20:23:27+00:00

    si utilizas objetos y propiedades del tipo ActiveCell, Selection y similares es porque estás seguro de lo que va quedando "visible" de las acciones de una macro, en caso de dudas...

    • comprueba con un CONTAR.SI(... si el autofiltro va a devolver resultados (si no, NO filtras)
    • aprovecha (de los autofiltros) la propiedad Autofilter.Range (si hubo resultados, los copias)

    transcribe la parte de tu macro con el autofiltro

    saludos,

    hector.

    0 comentarios No hay comentarios