Menús personalizados

Saludos...
Resulta que tengo dos archivos de excel, los cuales poseen dos menús diferentes, uno para cada uno.
Necesito que cuando se habrá uno de los archivos, se active o se muestre solo el menú correspondiente al archivo abierto, manteniéndose el otro desactivado u oculto. Ya que actualmente estos menús los muestra siempre independiente del archivo abierto.
De antemano, gracias por la atención prestada.
Hernán Trujillo
Pd: Soy supremamente novato en Visual Basic, por lo que te agradecería enormemente que fueras lo más claro posible en tu valiosa explicación
1

1 respuesta

Respuesta
1
Como que no entiendo el nivel "supremamente novato", pero tratare de explicarte los más claro posible, si no llego a lograrlo, puedes solicitar los archivos donde hice las pruebas a mi correo ([email protected]), definitivamente tienes que usar EVENTOS, esto es para que tus menús se oculten cuando quieras...
Las pruebas las hice con dos archivos Libro1 y Libro2, a estos les agregue un menú a cada uno llamados Mi menu 1 y Mi menu 2, respectivamente, estos menús los agrego con CÓDIGO y los quito con código, esto es para evitar que si el usuario borra el menu, al abrir el archivo este lo agrega de nuevo, recuerda de cambiar solo los nombres que uso por los tuyos...
El código para cada uno de los libros, es prácticamente el mismo, así que te muestro como va el primero y tu haces el segundo...
Abrimos el Libro1
Entramos al Editor de Visual Basic (Alt+F11)
Agregamos un Modulo de código
Tecleamos el código siguiente (mejor cópialo)
Option Explicit
Public Sub PonerMenus()
Dim NuevoMenu As Object
Dim SubMenu As Object
Dim BarraMenusActiva As Object
'Busca el menu, si lo hay no hace nada
'se busca cada vez que se ejecuta la macro, por si el usuario lo elimino
Set NuevoMenu = CommandBars.FindControl(Type:=msoControlPopup, Tag:="MiMenu1")
If NuevoMenu Is Nothing Then
Set BarraMenusActiva = CommandBars.ActiveMenuBar
Set NuevoMenu = BarraMenusActiva.Controls.Add(Type:=msoControlPopup, Temporary:=True)
NuevoMenu.Caption = "Mi menu &1"
NuevoMenu.Tag = "MiMenu1"
Set SubMenu = NuevoMenu.Controls.Add(Type:=msoControlButton, ID:=1)
With SubMenu
.Caption = "Mi macro 1" 'Le asigna nombre
.OnAction = "MiMacro1" 'Le asigna la macro
End With
'Liberamos la memoria
Set BarraMenusActiva = Nothing
Set NuevoMenu = Nothing
Set SubMenu = Nothing
End If
End Sub
Public Sub QuitarMenus()
Dim MenuPresupuesto As Object
'Busca el menu, si lo encuentra lo borra, si no, no hace nada
Set MenuPresupuesto = CommandBars.FindControl(Type:=msoControlPopup, Tag:="MiMenu1")
If Not (MenuPresupuesto Is Nothing) Then MenuPresupuesto.Delete
End Sub
Public Sub BuscarMenu(ByVal Nombre As String, ByVal Mostrar As Boolean)
Dim MenuPresupuesto As Object
'Busca el menu, si lo encuentra lo borra, si no, no hace nada
Set MenuPresupuesto = CommandBars.FindControl(Type:=msoControlPopup, Tag:=Nombre)
If Not (MenuPresupuesto Is Nothing) Then
If Mostrar Then
MenuPresupuesto.Visible = True
Else
MenuPresupuesto.Visible = False
End If
End If
End Sub
Private Sub MiMacro1()
MsgBox "Hola, estas en el Libro 1"
End Sub
Das un doble click donde dice ThisWorkbook y escribes
Option Explicit
Private Sub Workbook_Activate()
BuscarMenu "MiMenu1", True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
QuitarMenus
End Sub
Private Sub Workbook_Deactivate()
BuscarMenu "MiMenu1", False
End Sub
Private Sub Workbook_Open()
PonerMenus
End Sub
Y eso es todo, guarda, cierra y vuelve a abrir, veras que el menu se agrega solo y que al cambiar de libro, sólito se oculta el menu que acabas de crear, ahora solo crea el Libro2 y cambia los nombres necesarios...
Te agradecería enormemente que finalizaras esta pregunta, gracias...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas