Como poner dos macros o más en thisworkbook de excel sin que creen conflicto

¿En thisworkbook tengo una macro y al insertar otra abajo dejan de funcionar . Como hago para poner dos o más y que puedan trabajar sin crear conflicto?

2 Respuestas

Respuesta
1

Las macros en el objeto ThisWorkbook deben ser únicas por cada evento, es decir no podes tener 2 eventos Open ni 2 BeforePrint y cosas así.

No das ninguna idea de qué tipo de macros o tareas estás queriendo programar, pero dejo una idea de 2 tipos de tareas que van en el mismo evento Open:

Private Sub Workbook_Open()
'al abrir el libro oculta las pestañas
ActiveWindow.DisplayWorkbookTabs = False

'al abrir solicita clave de usuario
usua = InputBox("Ingresa tu nombre")
If usua = "a" Then
Sheets("Hoja1").Select
Else
Sheets("Hoja2").Select
End If
End Sub

Cuando tenés problemas con alguna macro debes dejarla escrita aquí ... no podemos imaginar la situación de cada usuario.

PD) desde la sección Macros de mi sitio podes leer más sobre cómo y dónde colocar las macros

Sdos!

Gracias Elsa Matilde esta es la macros que tengo la de la imagen y la que inserte seguida de esta es la que me diste que es así:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'x Elsamatilde
'se debe volver a ocultar las hojas por las dudas que se abra sin habilitar las macros
Call ocultaHojas
End Sub

Si el libro se abre sin habilitar las macros se puede mostrar un mensaje similar al de la imagen:

Y si se habilitan las macros, se ejecutará el código que dejarás en el evento Open:

Private Sub Workbook_Open()
'x Elsamatilde
'se impide el movimiento de hojas
Application.ScreenUpdating = False
'se hacen visible todas las hojas
For Each Hoja In Worksheets
If Hoja.Name <> "INICIO" Then Hoja.Visible = True
Next
'se oculta la del mensaje
Sheets("INICIO").Visible = xlSheetVeryHidden
End Sub

Y en un módulo tendrás la que te oculta nuevamente y se llama desde los 2 eventos que te mencioné:

Sub ocultaHojas()
'x Elsamatilde

'primero vuelvo visible la hoja INICIO
Application.ScreenUpdating = False
Sheets("INICIO").Visible = True
'oculto el resto
For Each Hoja In Worksheets
If Hoja.Name <> "INICIO" Then Hoja.Visible = xlVeryHidden
Next

End Sub

¿Me gustaría que funcionaran las dos ya que si te fijas esta es para caducidad y seria perfecto que funcionara a la par con la tuya o te puedo pasar el archivo completo para que lo analices?

Entonces que primero verifique la caducidad con tu macro:

Private Sub workbook_Open()

'tus instrucciones hasta el End If, es decir que si la fecha caducó se cerrará el libro

'sino sigue lo mío:

'x Elsamatilde
'se impide el movimiento de hojas
Application.ScreenUpdating = False
'se hacen visible todas las hojas
For Each Hoja In Worksheets
If Hoja.Name <> "INICIO" Then Hoja.Visible = True
Next
'se oculta la del mensaje
Sheets("INICIO").Visible = xlSheetVeryHidden
End Sub

Sdos!

Esta la pongo en conjunto con la de caducidad? o sola?

Reitero:

Private Sub Workbook_Open()

'tus instrucciones desde Const DateInicio..... hasta el End If

'a continuación sigue lo mío y luego recién la línea del End Sub

'x Elsamatilde
'se impide el movimiento de hojas
Application.ScreenUpdating = False
'se hacen visible todas las hojas
For Each Hoja In Worksheets
If Hoja.Name <> "INICIO" Then Hoja.Visible = True
Next
'se oculta la del mensaje
Sheets("INICIO").Visible = xlSheetVeryHidden
End Sub

Esta será la única macro Workbook_Open, con los 2 procesos.

Sdos!

Esta es la macros seguí tus instrucciones

Pero me oculto la hoja de inicio y ya no la hace visible al activar la macros y desactivarla te envío el código para ver si hice algo mal. Saludos

Private Sub Workbook_Open()
Const DateInicio As Date = "14/04/2015" 'Fecha de Instalación de la Hoja.
Const DateEnd As Date = "10/07/2015" 'Fecha en la que quiero ponerle fin.

If Date < DateInicio Or Date > DateEnd Then
MsgBox "Su licencia ha vencido"
ThisWorkbook.Close (False) 'Cierra el libro sin guardar los cambios.
Exit Sub
End If
'tus instrucciones desde Const DateInicio..... hasta el End If,

'a continuación sigue lo mío y luego recién la línea del End Sub

'x Elsamatilde
'se impide el movimiento de hojas
Application.ScreenUpdating = False
'se hacen visible todas las hojas
For Each Hoja In Worksheets
If Hoja.Name <> "INICIO" Then Hoja.Visible = True
Next
'se oculta la del mensaje
Sheets("INICIO").Visible = xlSheetVeryHidden


End Sub

y esta la puse en modulo

Sub ocultaHojas()
'x Elsamatilde

'primero vuelvo visible la hoja INICIO
Application.ScreenUpdating = False
Sheets("INICIO").Visible = True
'oculto el resto
For Each Hoja In Worksheets
If Hoja.Name <> "INICIO" Then Hoja.Visible = xlVeryHidden
Next

End Sub

¿O podría enviarte mi archivo completo?

Podes enviarmelo a alguno de los correos que aparecen en el encabezado de mi sitio.

De todos modos te aclaro: al final estoy ocultando la hoja INICIO porque solo es una hoja en blanco con el mensaje... y no te hace falta tenerla visible durante el uso del libro.

¡Gracias! elsa te hago envío de los archivos .

En los libros que me enviaste ya tenías otra macro en el evento OPEN, ¿la qué solicita clave para activar cierta hoja... es decir que ahora necesitarías las 3 macros?

- La de caducidad

- La de forzar a la habilitación de macros ocultando hojas

- La de solicitar usuario para activar cierta hoja (aclara cuál hoja para cada usuario)

Disculpa, esa macros que solicita clave creo me la diste tu para poder realizar la de forzar a la habilitación de macros. Pero si no la necesito no tengo problema Elsa. En solo serian las dos macros( la de forzar a la habilitación de macros y la de caducidad) .

En el libro esta yo utilizo la hoja rustico y datos habilitada, la de valores y valor siempre las tengo ocultas. Para evitar que se vea la información que tienen. Saludos

Si, esa fue la primer macro de ejemplo donde se solicitaba clave de usuario, pero ahora parece no necesitarla. Cualquier diferencia de opinión avisame para agregarlo.

Te acabo de enviar el libro.

Sdos!

Respuesta
1

¿Puedes compartir las macros? Para tener más claridad acerca de lo que esta pasando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas