Desarrollo de soluciones 

con Microsoft Excel 97 / 2000

Handhelds Compaq

Compre en línea y aproveche las espectaculares ofertas COMPAQ.

Espectacular promoción Compaq Chile

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

  Convierte tus planos en papel en archivos CAD - Pincha Aquí

Microsoft Excel 97 / 2000 y el lenguaje de programación Visual Basic para Aplicaciones, son marcas registradas de Microsoft Corporation

Desarrollo de Soluciones con Microsoft Excel 97 / 2000 - Sergio Carrasco Ríos - Santiago de Chile - Desde Octubre del 2000.

Sus consultas envíelas al e-mail : gorita@ctcinternet.cl