Menu

Como le puedo hacer para que un menu personalizado solo me aparezca en el libro que realmente voy a ocupar y no cada vez que abro excel
Respuesta
1
Public Sub PonerMenu()
Dim NuevoMenu As Object
Dim OpcionMenu As Object
Dim MenuHerr As Object
' Busca si el menú ya esta existe
Set NuevoMenu = CommandBars.FindControl(Type:=msoControlPopup, Tag:="Utilidades")
' Si no lo encuentra la variable es Nothing
If NuevoMenu Is Nothing Then
' Busca el menú Herramientas y devuelve una referencia a el
Set MenuHerr = CommandBars.FindControl(ID:=30007)
' La posibilidad de que sea Nothing es remota pero hay que considerarla
If Not MenuHerr Is Nothing Then
' Agrega un sunmenú al menú Herramientas
Set NuevoMenu = MenuHerr.Controls.Add(Type:=msoControlPopup, Temporary:=True)
With NuevoMenu
' Le ponemos Titulo
.Caption = "&Utilidades"
' Usamos esta propiedad como utilidad para la busqueda
.Tag = "Utilidades"
'Garantizamos que este visible
.Visible = True
End With
Set OpcionMenu = NuevoMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
With OpcionMenu
.Caption = "Mayusculas"
'Le asignamos la macro que queramos ejecutar
.OnAction = "Mayusculas"
End With
Set OpcionMenu = NuevoMenu.Controls.Add(Type:=msoControlButton, _
Temporary:=True)
With OpcionMenu
.Caption = "Minusculas"
.OnAction = "Minusculas"
End With
End If
End If
'Liberamos la memoria
Set MenuHerr = Nothing
Set NuevoMenu = Nothing
Set OpcionMenu = Nothing
End Sub
Public Sub QuitarMenu()
Dim Menu As Object
'Busca el menu, si lo encuentra lo borra, si no, no hace nada
Set Menu = CommandBars.FindControl(Type:=msoControlPopup, Tag:="Utilidades")
If Not (Menu Is Nothing) Then
Menu.Delete
End If
End Sub
Ahora, para que la macro PonerMenu se ejecute de forma automática al abrir el Complemento y la macro QuitarMenu se ejecute automáticamente al cerrar el Complemento, las "llamamos" desde los eventos Open y BeforeClose del libro, respectivamente...
Desde el Editor VBA selecciona el objeto ThisWorkbook
Ve al menú Ver | Código o presiona la tecla F7
Copia o escribe el siguiente código.
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
QuitarMenu
End Sub
Private Sub Workbook_Open()
PonerMenu
End Sub
Espero que te sirva. Te advierto que si tienes perfiles de usuario, la operación en ocasiones es complicada
Que le tengo que borrar para que no me muestre 2 opciones en el menu
Public Sub QuitarMenu()
Dim Menu As Object
'Busca el menu, si lo encuentra lo borra, si no, no hace nada
Set Menu = CommandBars.FindControl(Type:=msoControlPopup, Caption:="Nombre del Menú")
If Not (Menu Is Nothing) Then
Menu.Delete
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas