Problema con una macro para generar menús configurables.

02/03/2006 - 08:21 por Luis Cases \(defkon\) | Informe spam
He usado una macro de j-walk, concretamente esta:
http://www.j-walk.com/ss/excel/tips/tip53.htm para crear un menú adaptado a
mi trabajo.

Funciona perfectamente y me permite que las funciones/macros que antes tenía
en botones/campos de lección en otra pestaña, ahora estén al alcance en la
misma pestaña de datos.

Pero... ese menú (que aparece cuando abro el worksheet y se desaparece
cuando lo cierro) también está en todas los libros que se abren en la
sesión, y si alguien ejecuta desde otro libro algún comando de ese menú, da
error porque aplica las macros en el libro que estés.

Supongo que lo debería hacer es que todas las macros que hay grabadas hagan
referencia solo a la libro original en el que fueron grabadas, ¿Como puedo
hacer eso?

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
02/03/2006 - 09:13 | Informe spam
hola, Luis !

He usado una macro de j-walk, concretamente esta: http://www.j-walk.com/ss/excel/tips/tip53.htm
para crear un menu adaptado a mi trabajo. Funciona perfectamente [...]
Pero... ese menu... tambien esta en todas los libros que se abren en la sesion
y si alguien ejecuta desde otro libro algun comando de ese menu, da error porque aplica las macros en el libro que estes.
Supongo que lo deberia hacer es que todas las macros... hagan referencia solo a la libro original en el que fueron grabadas
Como puedo hacer eso?



dependiendo de que tantos 'cambios/adaptaciones/...' le hubieras hecho al ejemplo que estas utilizando... -?-
[probablemente] una primera alternativa es des/re/habilitar dicho 'menu' en los eventos del libro que lo 'maneja' [p.e.]
en el modulo de codigo del libro [ThisWorkbook] ==Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.CommandBars(.).Enabled = True
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CommandBars(.).Enabled = False
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Luis Cases \(defkon\)
02/03/2006 - 13:06 | Informe spam
Gracias Hector, por contestar. Casi es la solución.

He sustituido los .. por 1. y funciona, pero me oculta todos los
menús, no solo el que yo quiero, que es el que he creado, el que en el
ejemplo se llama MyMenu y en mi caso Configuración.

"Héctor Miguel" escribió en el mensaje
news:
hola, Luis !

He usado una macro de j-walk, concretamente esta:
http://www.j-walk.com/ss/excel/tips/tip53.htm
para crear un menu adaptado a mi trabajo. Funciona perfectamente [...]
Pero... ese menu... tambien esta en todas los libros que se abren en la
sesion
y si alguien ejecuta desde otro libro algun comando de ese menu, da error
porque aplica las macros en el libro que estes.
Supongo que lo deberia hacer es que todas las macros... hagan referencia
solo a la libro original en el que fueron grabadas
Como puedo hacer eso?



dependiendo de que tantos 'cambios/adaptaciones/...' le hubieras hecho al
ejemplo que estas utilizando... -?-
[probablemente] una primera alternativa es des/re/habilitar dicho 'menu'
en los eventos del libro que lo 'maneja' [p.e.]
en el modulo de codigo del libro [ThisWorkbook] ==> Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Application.CommandBars(.).Enabled = True
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CommandBars(.).Enabled = False
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#3 Héctor Miguel
02/03/2006 - 18:46 | Informe spam
hola, Luis !

He sustituido los .. por 1. y funciona, pero me oculta todos los menus, no solo el que yo quiero
que es el que he creado el que en el ejemplo se llama MyMenu y en mi caso Configuración.



sustituye las instrucciones [en cada evento]...
de -> Application.CommandBars(.).Enabled = True ' o False
a -> Application.CommandBars(1).Controls("Configuración").Enabled = True ' o False
o... Application.CommandBars("Worksheet Menu Bar").Controls("Configuración").Enabled = True ' o False

OJO: para 'el nombre' del control/comando/boton/... que hayas agregado a la barra de menus...
-> usa el mismo texto que le hayas asignado [al crearlo] en la propiedad -> .Caption

saludos,
hector.
Respuesta Responder a este mensaje
#4 Luis Cases \(defkon\)
02/03/2006 - 19:01 | Informe spam
Muchas gracias, Héctor.

La primera forma ya funciona.

Muy agradecido.

"Héctor Miguel" escribió en el mensaje
news:
hola, Luis !

He sustituido los .. por 1. y funciona, pero me oculta todos los
menus, no solo el que yo quiero
que es el que he creado el que en el ejemplo se llama MyMenu y en mi caso
Configuración.



sustituye las instrucciones [en cada evento]...
de -> Application.CommandBars(.).Enabled = True ' o False
a -> Application.CommandBars(1).Controls("Configuración").Enabled = True
' o False
o... Application.CommandBars("Worksheet Menu
Bar").Controls("Configuración").Enabled = True ' o False

OJO: para 'el nombre' del control/comando/boton/... que hayas agregado a
la barra de menus...
-> usa el mismo texto que le hayas asignado [al crearlo] en la
propiedad -> .Caption

saludos,
hector.

Respuesta Responder a este mensaje
#5 Luis Cases \(defkon\)
02/03/2006 - 19:16 | Informe spam
Ooops...

Cuando se cierra el libro se produce un error.

La rutina para mostrar el menú tiene una sub para eliminarlo, llamada Sub
DeleteMenu(), que se ejecuta al salir de la hoja mediante:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call DeleteMenu
End Sub

Entonces al ejecutar:

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Application.CommandBars(1).Controls("Configuración").Enabled = False
End Sub

Pero no existe ya ese control, por lo que se produce el error.

Eliminando Sub DeleteMenu(), se soluciona, aunque el menú "Configuración"
permanece (inactivo) mientras siga abierta la Excel


Saludos.


"Luis Cases (defkon)" escribió en el mensaje
news:
Muchas gracias, Héctor.

La primera forma ya funciona.

Muy agradecido.

"Héctor Miguel" escribió en el mensaje
news:
hola, Luis !

He sustituido los .. por 1. y funciona, pero me oculta todos los
menus, no solo el que yo quiero
que es el que he creado el que en el ejemplo se llama MyMenu y en mi
caso Configuración.



sustituye las instrucciones [en cada evento]...
de -> Application.CommandBars(.).Enabled = True ' o False
a -> Application.CommandBars(1).Controls("Configuración").Enabled = True
' o False
o... Application.CommandBars("Worksheet Menu
Bar").Controls("Configuración").Enabled = True ' o False

OJO: para 'el nombre' del control/comando/boton/... que hayas agregado a
la barra de menus...
-> usa el mismo texto que le hayas asignado [al crearlo] en la
propiedad -> .Caption

saludos,
hector.





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida