Dölja & Visa verktygsfält
När vi utvecklar egna tillämpningar kan det ibland vara önskvärt att dölja såväl de inbyggda verktygsfälten som de anpassade.
Här demonstreras två tekniker för att dölja verktygsfält. När ens egna tillämpning stängs kan det vara önskvärt att återställa de dolda verktygsfälten, vilket också demonstreras här.
Tekniken för att dölja / visa verktygsfält kan också tillämpas för menyer och s k pop-up menyer. Dock finns det ett undantag: Arbetsbladmenyn.
Objektet Verktygsfält ingår i CommandBars-samlingen. Det finns tre olika undergrupper, där var och en definierar vilken typ av objekt det är:
Undergrupp Benämning Typvärde Verktygsfält msoBarTypeNormal 0 Menyer msoBarTypeMenuBar 1 Pop-up menyer msoBarTypePopUp 2
Här deklareras publika variabler, som gäller för samtliga procedurer nedan:
Option Explicit
'Här skapar vi den matris som ska lagra namnen på de
'verktygsfält som döljs
Public stDoldaVerktygsfalt() As String
Public cbVFalt As CommandBar
Public i As Long
I det första exemplet visas hur vi kan dölja och spara de dolda verktygsfältens namn i en matris.
Sub Dölj_Verktygsfält_Matris()
Application.ScreenUpdating = False
i = 0
For Each cbVFalt In Application.CommandBars
'Då det bara är de fält som är synliga och som tillhör den
'önskade undergruppen som ska döljas måste vi gå igenom
'hela samlingen
If cbVFalt.Visible And cbVFalt.Type <> 1 Then'Matrisen dimensioneras utifrån antal fältnamn
'som ska lagras
ReDim Preserve stDoldaVerktygsfalt(i)
stDoldaVerktygsfalt(i) = cbVFalt.Name
cbVFalt.Visible = False
i = i + 1
End If
Next cbVFalt
Application.ScreenUpdating = True
End Sub
Fördelen med denna teknik är att proceduren körs litet snabbare än den nedan. Nackdelen är att informationen kan gå förlorad om XL måste startas om e d innan nedanstående procedur körs.
Sub Visa_Verktygsfält_Matris()
Dim cbVFalt As Variant
Application.ScreenUpdating = False
For Each cbVFalt In stDoldaVerktygsfalt
Application.CommandBars(cbVFalt).Visible = True
Next cbVFalt
Application.ScreenUpdating = True
End SubDen första proceduren ovan kan anropas t ex när arbetsboken öppnas, dvs i Workbook_Open. Återställandet av verktygsfälten kan ske t ex när arbetsboken stängs, dvs i Workbook_BeforeClose.
Ett annat angreppssätt är att dölja verktygsfälten och skriva in verktygsfältens namn i ett kalkylblad.
Sub Dölj_Verktygsfält_Kblad()
Dim rgNamn As Range
Set rgNamn = _ ThisWorkbook.Sheets("Namn").Range("A1:A15")
Application.ScreenUpdating = False
rgNamn.ClearContents
i = 0
For Each cbVfält In Application.CommandBars
If cbVfält.Visible And cbVfält.Type = 0 Then
i = i + 1
'Här tilldelas cellerna verktygsfältens namn
rgNamn.Cells(i, 1) = cbVfält.Name
cbVfält.Visible = False
End If
Next cbVfält
Application.ScreenUpdating = True
End SubFör att återställa verktygsfälten körs följande procedur:
Sub Visa_Verktygsfält_Kblad()
Dim stNamn As String
Application.ScreenUpdating = False
i = 1
stNamn = ThisWorkbook.Sheets("Namn").Cells(i, 1)
'Här sker en looping i de celler som innehåller namn
While stNamn <> ""
Application.CommandBars(stNamn).Visible = True
i = i + 1
stNamn = ThisWorkbook.Sheets("Namn").Cells(i, 1)
Wend
Application.ScreenUpdating = True
End Sub
Dölj/Visa Arbetsbladmenyn
Till skillnad mot andra objekt i CommandBar-samlingen så kan inte arbetsbladmenyn döljas genom att ange egenskapen "Visible" till falsk!
Följande kodsnutt döljer menyn:
Application.CommandBars("Worksheet Menu Bar").Enabled = False
För att visa menyn igen:
Application.CommandBars("Worksheet Menu Bar").Enabled = True
För att säkerhetsställa att användaren inte, genom tangentbordskommandot "Alt + -", kan nå bladmenyn kan följande kod läggas till:
Application.OnKey "%-", ""
För att återställa tangentbordskommandot kan följande kodsnutt användas:
Application.OnKey "%-"
Se också Skapa & Lägga till verktygsfält