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í:
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.
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".
Lo anterior, una vez que hayamos agregado el código apropiado, nos dará la estructura de menú basada en niveles de la izquierda.
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.
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



