lunes, 28 de noviembre de 2022

67 - Uso de INPUTBOX para seleccionar un rango

 En la mayoría de las macros, trabajamos con un rango ya previamente seleccionado o  armamos la referencia al rango como una combinación de fila y columna. 

Por ejemplo: dire = Range(Cells(1,1), Cells(20,colx))

A continuación veremos el uso de la función INPUTBOX que nos permitirá seleccionar un rango para continuar con un proceso ya iniciado.

Para este ejemplo tendremos:

1 hoja principal y 1 hoja que se agrega para recibir la copia del rango seleccionado:

Se filtra la columna 2 (Fecha) de la tabla principal, por el año que se obtiene de la celda E9.


En la macro del ejemplo, que colocamos en el Editor de Macros, insertando un módulo, tenemos:

Sub procesoContinuo()

'hoja activa.

    Set hojaTabla = ActiveSheet

'crear una hoja nueva

    Set nvaHoja = Sheets.Add

'volver a la hoja principal

    hojaTabla.Activate

'en este ejemplo se filtra la tabla x algún criterio

    crit = "12/27/" & Year(Range("E9"))

    ActiveSheet.ListObjects("PaymentSchedule3").Range.AutoFilter Field:=2, _

        Operator:=xlFilterValues, Criteria2:=Array(0, crit)

'se selecciona un rango de la tabla filtrada

On Error Resume Next

Set rgox = Application.InputBox("Seleccione una celda o rango", Type:=8)

'si el rango no está vacío lo copiamos en la nueva hoja

If Not IsEmpty(rgox) Then

    rgox.Copy

    nvaHoja.Activate

'se pegan solo valores y formatos de número

    Range("B3").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _

        xlNone, SkipBlanks:=False, Transpose:=False

    Application.CutCopyMode = False

    MsgBox "El rango ya fue copiado. El proceso continúa....", , "Información"

End If

'otras instrucciones. Por ej:

'1- volver a hoja principal y quitar los filtros,

    hojaTabla.Activate

    ActiveSheet.ListObjects("PaymentSchedule3").Range.AutoFilter Field:=2

'2- renombrar la hoja creada,

 '----------

'3- dar formato al rango copiado, etc

 '--------

End Sub

 

NOTA: observar que se pueden seleccionar tanto rangos continuos como discontinuos, desde la ventana del InputBox. 


Descargar libro de ejemplo desde aquí.

Ver Video N° 67 con el desarrollo de 2 ejemplos: macro con selección de rango previo y macro con selección de rango durante un proceso.

No hay comentarios.:

Publicar un comentario