Compre
en línea y aproveche las espectaculares ofertas COMPAQ.
Eres el visitante
Nº
|
Libro Excel con Menú Personalizado
Los
ejemplos mostrados en esta sección se encuentran comprimidos en formato *.zip.
Presione
aquí para descargar este ejemplo. customworkbookmenu.zip
.
Este
archivo contiene un ejemplo de como crear un elemento de menú personalizado, que es visible
solamente cuando el libro está activo.
El nuevo menú se incorpora al final del
menú existente en Excel, es decir, después del elemento de menú
"?".
El
siguiente código en VBA se encuentra en el Modulo1 del Editor de Visual Basic y
es el que crea el menú personalizado.
Para
ver el código desde el editor de Visual Basic, presione simultaneamente las
teclas ALT+F11, desde Excel.
Option Explicit
'Esta sentencia obliga al programador a que declare todas
las variables utilizadas en el código
Sub CreateMenu() 'Comienza el
procedimiento para crear el menú personalizado
Dim cbMenu As CommandBarControl, cbSubMenu As CommandBarControl
'La
sentencia Dim le dice a Excel el tipo de varibles que se utilizarán, en este
caso ambas variables son del tipo CommandBarControl
RemoveMenu 'Esta sentencia llama al procedimiento
RemoveMenu
Set cbMenu = Application.CommandBars(1).Controls.Add(msoControlPopup, , , ,
True)
'Esta sentencia le dice a Excel que agregue un elemento de
menú al menú existente de Excel.
With cbMenu
.Caption = "&Mi menu" 'Esta sentencia le dice
a Excel que el nuevo menú se llama "Mi Menú"
.Tag = "MyTag"
.BeginGroup = False
End With
If cbMenu Is Nothing Then Exit Sub
With cbMenu.Controls.Add(msoControlButton, 1, , ,
True)
'Esta sentencia, agrega un elemento al menú "Mi
Menú"
.Caption = "&Menu Item1" 'Esta sentencia le
dice a Excel que el elemento se llama "Menu Item1"
.OnAction = ThisWorkbook.Name & "!Macroname"
End With
With cbMenu.Controls.Add(msoControlButton, 1, , ,
True)
'Esta sentencia, agrega un elemento al menú "Mi
Menú"
.Caption = "&Menu Item2" 'Esta sentencia le
dice a Excel que el elemento se llama "Menu Item2"
.OnAction = ThisWorkbook.Name & "!Macroname"
End With
Set cbSubMenu =
cbMenu.Controls.Add(msoControlPopup, 1, , , True)
'Esta sentencia le dice a Excel que agregue un
subelemento de menú a
"Mi Menú"
With cbSubMenu
.Caption = "&Submenu1" 'Esta sentencia le dice
a Excel que el nuevo submenú se llama "Submenu1"
.Tag = "SubMenu1"
.BeginGroup = True
End With
With cbSubMenu.Controls.Add(msoControlButton, 1, , ,
True)
'Esta sentencia, agrega un subelemento de menú al
submenú "Submenu1"
.Caption = "&Submenu Item1" 'Esta sentencia le
dice a Excel que el subelemento se llama "Submenu Item1"
.OnAction = ThisWorkbook.Name & "!Macroname"
.Style = msoButtonIconAndCaption
.FaceId = 71
.State = msoButtonDown
End With
With cbSubMenu.Controls.Add(msoControlButton, 1, , ,
True)
'Esta sentencia, agrega un subelemento de menú al
submenú "Submenu1"
.Caption = "&Submenu Item2" 'Esta sentencia le
dice a Excel que el subelemento se llama "Submenu Item2"
.OnAction = ThisWorkbook.Name & "!Macroname"
.Style = msoButtonIconAndCaption
.FaceId = 72
.Enabled = False
End With
Set cbSubMenu =
cbSubMenu.Controls.Add(msoControlPopup, 1, , , True)
With cbSubMenu
.Caption = "&Submenu2"
.Tag = "SubMenu2"
.BeginGroup = True
End With
With cbSubMenu.Controls.Add(msoControlButton, 1, , ,
True)
.Caption = "&Submenu Item1"
.OnAction = ThisWorkbook.Name & "!Macroname"
.Style = msoButtonIconAndCaption
.FaceId = 71
.State = msoButtonDown
End With
With cbSubMenu.Controls.Add(msoControlButton, 1, , ,
True)
.Caption = "&Submenu Item2"
.OnAction = ThisWorkbook.Name & "!Macroname"
.Style = msoButtonIconAndCaption
.FaceId = 72
.Enabled = False
End With
With cbMenu.Controls.Add(msoControlButton, 1, , ,
True)
.Caption = "&Remove this menu"
.OnAction = ThisWorkbook.Name & "!RemoveMenu"
.Style = msoButtonIconAndCaption
.FaceId = 463
.BeginGroup = True
End With
Set cbSubMenu = Nothing
Set cbMenu = Nothing
End Sub 'Esta sentencia
termina el procedimiento CreateMenu
Sub RemoveMenu()
DeleteCustomCommandBarControl "MyTag"
End Sub
Private Sub DeleteCustomCommandBarControl(CustomControlTag As
String)
On Error Resume Next
Do
Application.CommandBars.FindControl(, , CustomControlTag, False).Delete
Loop Until Application.CommandBars.FindControl(, ,
CustomControlTag, False) Is Nothing
On Error GoTo 0
End Sub
Sub ShowHideMenu(MenuVisible As Boolean)
ChangeControlVisibility "MyTag", MenuVisible
End Sub
Private Sub
ChangeControlVisibility(CustomControlTag As String, MenuVisible
As Boolean)
On Error Resume Next
Application.CommandBars.FindControl(, , CustomControlTag, False).Visible = MenuVisible
On Error GoTo 0
End Sub
Sub Macroname()
MsgBox "Aqui debe incluir su macro o función personalizada!",
vbInformation, ThisWorkbook.Name
End Sub
El
siguiente código se encuentra en la sección ThisWorkBook del Editor de Visual
Basic.
En
esta sección (ThisWorkBook), se encuentra el código que se ejecutará cuando
ocurran los eventos respectivos en el libro activo.
Para
ver el código en el editor de Visual Basic, presione simultaneamente las teclas
ALT+F11 desde Excel y luego haga doble clic en la sección ThisWorkBook ubicada
a la izquierda de la pantalla.
Option Explicit
Private Sub Workbook_Activate() 'Este
código se ejecuta cuando el libro se activa (evento Activate)
ShowHideMenu True
End Sub
Private Sub Workbook_BeforeClose(Cancel As
Boolean)
'Este código se ejecuta antes de que se cierre el libro
(evento BeforeClose)
RemoveMenu
End Sub
Private Sub Workbook_Deactivate() 'Este
código se ejecuta cuando cuando el libro deja de estar activo (evento
Deactivate)
ShowHideMenu False
End Sub
Private Sub Workbook_Open() 'Este
código se ejecuta cuando se abre el libro (evento Open)
CreateMenu
End Sub
<---volver
|