¿Cómo realizar un rango dinámico o con nombre en otro libro de Excel?

publicado por: Anonymous

Estoy haciendo una macro que toma un rango de celdas de un libro en Excel y lo copia a un libro diferente.

Quisiera saber cómo realizar un rango de celdas de otra hoja en Excel para hacer una copia de aquel rango en una hoja nueva.

Lo intente poniéndole nombre al rango y no funcionó, ya que el archivo origen de donde se quiere realizar la copia no siempre tendrá el mismo rango.

Aquí esta el código:

Sub Obtener_Datos()

    Application.ScreenUpdating = False

    With Sheets("Hoja1")
        'verificamos si hay datos en la hoja
        'donde se almacenaran los resultados
        datos = Application.CountA(.Range("A2:A9"))

        'insertamos una linea para poder limpiar el rango
        .Range("A1:D1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

        'se define el rango de celdas y cuales columnas se desean copiar
        With .Range("TAMANO")'Es aquí en donde tengo la duda!! <-------------------
            'si hay datos en la hoja donde se almacenaran los resultados
            'los borramos para actualizarla
            If datos > 0 Then .ClearContents

            'definimos de que libro extraeremos los datos, aca va la ruta en donde se encuentra el archivo
            ruta_libro = "D:documentos laboralesDocumentos de costos"
            nombre_libro = "Consolidado final.xlsx"
            nombre_hoja = "Procesos validos"

            'insertamos las formulas
            .Formula = "='" & ruta_libro & "[" & _
            nombre_libro & "]" & nombre_hoja & "'!a1"

            'dejamos solo los valores
            .Value = .Value
            .HorizontalAlignment = xlCenter
        End With

        'recorremos el rango para eliminar ceros
        For b = 1 To 4
            With .Columns(b)
                .AutoFilter Field:=1, Criteria1:="=0", Operator:=xlOr, Criteria2:="=00"
                .SpecialCells(xlCellTypeVisible).ClearContents
                .AutoFit
            End With
        Next

        'eliminamos la linea que habiamos insertado
        .Range("A1:D1").Delete Shift:=xlUp
    End With

    Application.ScreenUpdating = True
End Sub

solución

En algun momento me paso algo parecido, lo solucione de 2 formas:
la primera realizando un contador que buscara hacia abajo hasta que hubieran dos espacios en blanco. con ese contador sabia el rango que debia tomar para copiar los datos.

la segunda forma, fue grabar a mano, como cuando seleccionas la primera celda de un rango y presionas ctrl + shift +down y te lo selecciona completo.

ojala te sirva.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *