Cómo crear menús personalizados en su hoja de cálculo de Excel a través de VBA

Comparte ahora:

La cinta de Excel se puede modificar para adaptarse a un trabajo en particular. Este ejercicio crea nuevos menús que dirigen a los usuarios a hojas específicas relevantes para su tarea.

En este artículo, presentaremos cómo crear menús personalizados en su hoja de cálculo de Excel, así:Cree menús personalizados en su hoja de cálculo de Excel

Este artículo asume que el lector muestra la cinta de desarrollador y está familiarizado con el editor de VBA. De lo contrario, busque en Google "Pestaña de desarrollador de Excel" o "Ventana de código de Excel".

Libro de trabajo

El libro de trabajo que se utilizará tiene varias hojas. Le sugerimos que utilice el ejemplo que se encuentra aquí. Se parece a esto.El libro de trabajo de muestra

Las primeras cuatro hojas son disfuncionales y se utilizan en este ejercicio únicamente con fines de navegación.

La quinta hoja contendrá la estructura del menú personalizado particular de este libro de trabajo. En este momento debería estar en blanco excepto por un botón de prueba.

Agregar la estructura del menú

Copie el siguiente bloque de texto en la celda A1 de la hoja "Hoja de menú".

Nivel, título, posición / macro, divisor

1 y Herramientas de usuario, 10

2, Mostrar tablero, Seleccionar tablero

2, Agregar nuevo, VERDADERO

3, cliente, seleccionar cliente

3, ubicación, seleccione ubicación

3, Gerente, SelectManager

2, cerrar, cerrar archivo

Dar formato a la estructura del menú

Estos datos CSV terminan en la columna A. Para formatearlos en celdas individuales de Excel, seleccione la columna A y use 'Texto a columnas' en el Pestaña de datos. El delimitador sería "coma".Formatee en celdas individuales de Excel

Lo anterior, una vez que hayamos agregado el código apropiado, nos dará la estructura de menú basada en niveles de la izquierda.La estructura del menú basada en niveles

El primer nivel, en este ejercicio, es arbitrariorarSe coloca como el décimo elemento en la barra de menú, como verá cuando se muestre el ancho completo del libro.

Crear y destruir menús

Dado que solo queremos los nuevos menús para este libro de trabajo específico, los crearemos y destruiremos al abrir y cerrar el libro de trabajo.

El siguiente código es comotart. Se activará cuando se abra o se cierre el libro. Cópielo en un módulo de su libro de trabajo

Asigne el botón Prueba en MenuSheet a Auto_Open.

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

A continuación, examinamos la estructura de nuestro menú más de cerca.Examine la estructura de nuestro menú más de cerca

No se activa ninguna macro por Añadir nuevo porque no tiene otra función que la de padre de submenús.

Este tipo de estructura de menú es fácil de mantener. Simplemente agregue nuevos elementos con sus macros, teniendo en cuenta el nivel del menú.

El código

Agregue el siguiente código VBA al módulo. Esto examinará la "Hoja de menú" y creará el menú personalizado.

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    Dim MenuSheet As Worksheet
    Dim MenuObject As CommandBarPopup

    Dim MenuItem As Object
    Dim SubMenuItem As CommandBarButton
    Dim sRow As Integer
    Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider

    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    Do While ActiveCell > "" '****************
        With MenuSheet
            MenuLevel = .Cells(sRow, 1)
            Caption = .Cells(sRow, 2)
            PositionOrMacro = .Cells(sRow, 3)
            Divider = .Cells(sRow, 4)
            NextLevel = .Cells(sRow + 1, 1)
        End With
        
        Select Case MenuLevel
            Case 1 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
                Else
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
                    MenuItem.OnAction = PositionOrMacro
                End If
                MenuItem.Caption = Caption
                If Divider Then MenuItem.BeginGroup = True
            Case 3 ' A SubMenu Item
                Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
                SubMenuItem.Caption = Caption
                SubMenuItem.OnAction = PositionOrMacro
                
                If Divider Then SubMenuItem.BeginGroup = True
        End Select
        sRow = sRow + 1
        Range("A" & sRow).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
End Sub
Sub SelectClient()
    Sheets("Client").Activate
End Sub

Sub SelectLocation()
    Sheets("Location").Activate
End Sub

Sub SelectManager()
    Sheets("Manager").Activate
End Sub

Sub CloseFile()
    MsgBox "Close! (write your own code in the module)"
End Sub

Pruebe el código con el botón Probar. El menú de usuario recién creado se encontrará en la posición 10 del menú, en Complementos.

Recuperación de Excel

Excel es inestable a veces y se bloquea mientras está abierto, dañando el archivo fuente. Cuando no puede recuperar el archivo, es útil tener una herramienta para reparar Daño de Excel de lo contrario, todo el trabajo sin respaldo será lost.

Introducción del autor:

Felix Hooker es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo reparación rar y productos de software de recuperación de sql. Para más información visite www.datanumen.com

Comparte ahora:

Los comentarios están cerrados.