Лентата на Excel може да бъде модифицирана, за да отговаря на определена работа. Това упражнение създава нови менюта, които насочват потребителите към конкретни листове, свързани с тяхната задача.
В тази статия ще ви представим как да създадете персонализирани менюта във вашия работен лист на Excel, като това:
Тази статия предполага, че на читателя е показана лентата за програмисти и е запознат с редактора на VBA. Ако не, моля Google „Раздел за програмисти на Excel“ или „Прозорец на кода на Excel“.
Workbook
Работната книга, която ще се използва, има няколко листа. Предлагаме ви да използвате примерния такъв, намерен тук. Изглежда така.
Първите четири листа са нефункционални и се използват в това упражнение само за навигационни цели.
Петият лист ще съдържа персонализираната структура на менюто, специфична за тази работна книга. Понастоящем трябва да е празно, с изключение на бутон Тест.
Добавете структурата на менюто
Копирайте следния блок текст в клетка А1 на листа „MenuSheet“.
Ниво, надпис, позиция / макро, разделител
1, & Потребителски инструменти, 10
2, Показване на таблото за управление, Избор на табло
2, Добавяне на ново,, ИСТИНА
3, Клиент, SelectClient
3, Местоположение, Изберете Местоположение
3, Manager, SelectManager
2, Close, CloseFile
Форматирайте структурата на менюто
Тези CSV данни завършват в колона А. За да ги форматирате в отделни клетки на Excel, изберете колона A и използвайте „Текст към колони“ в Раздел с данни. Разделителят ще бъде „запетая“.
Горното, след като добавим съответния код, ще ни даде структурата на менюто, базирана на ниво, вляво.
Първото ниво в това упражнение е арбитражrarпоставен като десети елемент в лентата с менюта, както ще видите, когато се покаже цялата ширина на работната книга.
Създаване и унищожаване на менюта
Тъй като искаме само новите менюта за тази конкретна работна книга, ще ги създадем и унищожим при отваряне и затваряне на работната книга.
Кодът по-долу е катоtarт. То ще се задейства при отваряне или затваряне на работната книга. Копирайте го в модул във вашата работна книга
Задайте бутона Test в MenuSheet на Auto_Open.
Option Explicit Sub auto_Open() Call DeleteMenu Call CreateMenu End Sub Sub auto_Close() Call DeleteMenu End Sub
По-долу разглеждаме по-отблизо структурата на менюто си.
Нито един макрос не се задейства от Добавяне на нов защото няма друга функция освен като родител на подменюта.
Този вид структура на менюто е лесна за поддръжка. Просто добавете нови елементи с техните макроси, като сте наясно с нивото на менюто.
Кодексът
Добавете следния VBA код към модула. Това ще разгледа “MenuSheet” и ще създаде персонализирано меню.
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
Тествайте кода с бутона Тест. Новосъздаденото потребителско меню ще бъде намерено на позиция 10 в менюто, Добавки.
Възстановяване на Excel
Excel понякога е нестабилен и се срива, докато е отворен, увреждайки изходния файл. Когато не успее да възстанови файла, е полезно да разполагате с инструмент за поправка Щети в Excel в противен случай цялата без резервна работа ще бъде lost.
Въведение на автора:
Феликс Хукър е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително ремонт rar и sql софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com



