Cómo identificar mi hoja dentro de un grupo y luego ejecute un macro

Espero que todos estén bien. Actualmente tengo un problemilla. Tenía un libro de Excel con muchas pestañas, cada pestaña tiene el nombre de una urbanización, cada urbanización tiene varias filas (cada fila puede tener una residencia o un comercio). Tengo una macro que a cada sector le separa las residencias y los comercios en dos hojas respectivamente, dicha información la utilizo para imprimir como correspondencia en Word, sin embargo, como no se identificar automáticamente una hoja que tenga activa y se ejecute el código solo para esa pestaña, me vi en la obligación de separar todas las urbanizaciones.

Y ahora me quedaría así: por ejemplo, mi primera hoja antes se llamaba Urb. La Alborada, luego la renombré a "General", y aparte dos mas llamadas "Residenciales" y otras "Comerciales" donde van a parar los domicilios según su condición. Creo que está mas que claro decir que me decidí a separar para no tener n macros para n sectores.

1 respuesta

Respuesta
1

Disculpa, pero me perdí en la explicación.

Entendí lo siguiente:

Tienes una hoja llamada así: "Urb. La Alborada", esta hoja la vas a renombrar a "general", esto lo vas a hacer manualmente o quiere que lo haga la macro.

Cuál es el problema, ¿encontrar la hoja "Urb. La Alborada" para poder renombrarla?

O dime paso por paso qué necesitas

Me disculpo, de verdad es un poco confuso. Vamos por partes, tenía un archivo general com muchas urbanizaciones, cada urbanización puede tener residencias o comercios. Sin embargo, supongamos que tengo 20 urbanizaciones, como es incómodo tener 20 macros distintas (porque tendría que usar, por ejemplo: Sheets("Alborada").Activate ó Sheets("Villas de Oro").Activate), decidí dividir todo en archivos separados, con la finalidad de usar un solo macro, que por ejemplo en lugar de cualquier nombre de una urbanización, usaría Sheets("General").Activate. Ahora, como son tantas urbanizaciones quisiera tenerlas de nuevo en un solo archivo, pero no se como decirle al macro que haga su trabajo en una hoja que tenga activa. Respecto al trabajo del macro anda muy bien, ahí no es el problema, que por cierto me ayudaste mas o menos un mes con algo que no me andaba bien.

Quieres ejecutar la macro con la hoja activa.

Puedes poner la macro para revisarla y enviarte los ajustes.

En un principio.

Si tienes la macro en un módulo, y tienes esto:

Sheets("Villas de Oro"). Activate

Y luego viene tu macro.

Entonces quita esa línea y solamente ejecuta la macro con la hoja activa, esto lo puedes hacer si le asignas una tecla a la macro, por ejemplo:

En el menú programador, Macros, te aparece la siguiente ventana

Selecciona tu macro, yo le puse que la macro se llama "general"

Ahora presiona el botón "Opciones" y te aparece:

En el campo después de CTRL+ escribe una letra, yo puse la letra "k" y en descripción pon un texto. Presiona Aceptar. Presiona Cancelar

Ahora selecciona la hoja que quieras procesar y presiona Ctrl + K

La macro se ejecuta en la hoja que tienes activa.


Prueba y me comentas

Saludos. Dante Amor

Si es lo que necesitas.

Entiendo tu razonamiento y de verdad tienes razón, pero pasa algo, adjuntaré el código (éste funciona sólo para trabajar con los residenciales).

Sub ListaResBD()
Application.ScreenUpdating = False
Sheets("Residenciales").Activate
Cells.Select
Selection.Delete Shift:=xlUp
Range("A1").Activate
Range("A1").Value = "CODIGO"
Range("A1").Font.Bold = True
Range("B1").Value = "MANZANA"
Range("B1").Font.Bold = True
Range("C1").Value = "PRINT"
Range("C1").Font.Bold = True
Sheets("General").Activate
Fila_Final = Range("A" & Cells.Rows.Count).End(xlUp).Row
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
    If Cells(i, "H") = "RESIDENCIAL" And Cells(i, "J") <> "X" And Cells(i, "L") = "" Then
        Cells(i, "O") = Cells(i, "A") & ", " & Cells(i, "B") & ", " & Cells(i, "C") & " " & Cells(i, "D")
    End If
Next
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
ActiveSheet.Range("A1").AutoFilter Field:=15, Criteria1:="<>"
Worksheets("General").Range("M2:O" & Fila_Final).Copy Destination:=Worksheets("Residenciales").Range("A2")
Sheets("Residenciales").Activate
Columns("B:B").Select
With Selection
    .HorizontalAlignment = xlCenter
End With
Columns("A:C").EntireColumn.AutoFit
Range("A1").Activate
Sheets("General").Activate
Range("O2:O" & Fila_Final).Select
Selection.ClearContents
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
Range("A1").Activate
End Sub

Como verás debo intercambiar entre una y otra hoja para hacer pequeñas cosas.

Por eso he decidido llamar a una hoja General (en lugar de Villas de Oro, Alborada, etc.) lás únicas constantes son en las que vacío datos, las cuales son Residenciales y Comerciales.

Si yo hago tu sugerencia, al momento de salir crear el encabezado en la hoja Residenciales, el código debe apuntar a una urbanización en específico, en todo caso sería mi hoja activa.

P.D. Disculpa la tardanza

Otra vez desde el principio.

¿Vas a tener todas las hojas en un mismo libro?

Dime paso a paso qué quieres hacer a partir de ahora.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas