Wstążka / menu kontekstowe
Co to menu kontekstowe?
Się zachodzisz pewnie w głowę.
Kliknij sobie prawym myszy,
Można dodać co zażyczy
Sobie Szef lub jego żona.
Niżej sekcja poświęcona
Wstążce, makrom i obrazkom,
I kolorkom, zawijaczkom.
Nie masz XML edytora?
Lub ribbonów kreotara?
Nic nie szkodzi, tu pokażę,
Przy okazji się wykażę,
Jak programistycznie sprawić,
By coś mogło się pojawić -
Nowy guzik na wstążeczce,
Jak cukierek w choineczce.
Sub RemoveGMIFTSBar()
' ta procedura usuwa, dla pewności, bar ze wstązki, żeby nie pojawiały sie kilkukrotnie
' jeżeli nie ma jeszcze tego bara, to nic się nie dzieje
On Error Resume Next
Application.CommandBars("name ").Delete
End Sub
Sub> CreateBar()
Dim oBar As CommandBar
Dim oControl As CommandBarControl
Application.ScreenUpdating = False
RemoveGMIFTSBar 'tu dla bezpieczeństwa usuwany jest bar, żeby ich nie duplikować
'tworzymy nowy tab, na samym końcu, o nazwie ‘addins’
Set oBar = Application.CommandBars.Add(Position:=msoBarTop, Temporary:=True)
With oBar
.NameLocal = "name"
.Name = " name "
.Visible = True
End With
‘’’dodajemy kontrolki
Set oControl = oBar.Controls.Add(ID:=1, Before:=1)
With oControl
.OnAction = "extractExcel" ' jakie macro ma zostać wywołana po wciśnięciu
.FaceId = 5 '’obrazek
.Caption = "Guzik"
.Style = msoButtonIconAndCaption
.TooltipText = "tooltip"
End With
End Sub
Przy okazji, żeby w menu kontekstowe,
Dać ikonki impastowe,
Można użyć tego kodu,
Bez zachodu nie ma miodu.
Sub DodajDOmenuKomorki()
Dim ContextMenu As CommandBar
Dim MySubMenu As CommandBarControl
'w tym miesjcu wstawiłbym zabezpieczenie przed duplikowaniem kontrolek, opisane niżej
'po wklikaniu się prawym w komórkę pojawi się nowe menu
Set ContextMenu = Application.CommandBars("Cell")
'Dodaję menu kontekstowe z 2 guzikami w liście rozwijanej
Set MySubMenu = ContextMenu.Controls.Add(Type:=msoControlPopup, Before:=1)
With MySubMenu
.Caption = "ListaRozwijana"
.Tag = "Tak,którego będziemy używać np do pozbycia się dodanych przycisków"
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Makro1"
.FaceId = 612
.Caption = "Makro1"
.TooltipText = "opis makro1"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Makro2"
.FaceId = 366
.Caption = "Makro2"
.TooltipText = "opis makro2"
End With
End With
ContextMenu.Controls(4).BeginGroup = True
Set MySubMenu = Nothing
Set ContextMenu = Nothing
End Sub
Jak się pozbyć później tego?
Ja polecam coś takiego:
Sub UsunzMenukontekstowego()
Dim ContextMenu As CommandBar
Dim ctrl As CommandBarControl
'menu komórki
Set ContextMenu = Application.CommandBars("Cell")
'w tym przypadku usuwam kontrolki po tagu: "Tak,którego będziemy używać np do pozbycia się dodanych przycisków"
For Each ctrl In ContextMenu.Controls
If ctrl.Tag = "Tak,którego będziemy używać np do pozbycia się dodanych przycisków" Then
ctrl.Delete
End If
Next ctrl
'czasami na samej górze pojawia się klawisz „Save”, dla pewności usuwam
On Error Resume Next
ContextMenu.FindControl(ID:=3).Delete
On Error GoTo 0>
Set ContextMenu = Nothing
End Sub
Ważne jest, by mieć sprawdzenie,
By ominąć gromadzenie,
Się przycisków identycznych,
Komentarzy też, cynicznych,
Przecież brzydko to wygląda
I kolegów śmiech przyciąga :)
'dwa sposoby:
'1: sprawdzam czy istnieje guzik o takim tagu
Dim spr As Boolean
For Each ctrl In ContextMenu.Controls
If ctrl.Tag = "Tak,którego będziemy używać np do pozbycia się dodanych przycisków" Then
Spr = True
End If
Next ctrl
If Not spr = True Then
'procedura dodawania :)
End If
'2: profilaktycznie w macro do dodania przycisków dodaję procedurkę do usunięcia na samym początku
Sub DOdajDoMenuKomorki()
Dim ContextMenu As CommandBar
Dim MySubMenu As CommandBarControl
Call UsunzMenukontekstowego