Als Kind hatte ich kein Smartphone oder Tablett. Ich habe die Cornflakes-Packung beim Frühstück gelesen.
Hallo Herr Martin
Ich hoffe Sie sind gut ins neue Jahr gekommen.
Wir hatten schon einmal kontakt aufgenommen.
Folgende Meldungen bekomme:
Nach dem Debuggen bekomme ich diese Meldung:
####
Hallo Herr P.,
welchen Wert hat denn „MenueName“? Wenn Sie mit der Maus über diesen Variablennamen beim Debuggen fahren – was wird denn angezeigt? Und was bei „SubMenueName“?
Umgekehrt: Arbeiten Sie noch mit Menüs? Die sind doch seit Excel 2007 verschwunden? Ich verwende seit vielen Jahres das Ribbon und füge dort Symbole ein.
Liebe Grüße Rene Martin
####
Herr Martin,
erstmal Danke für Ihre Rückmeldung,
was Sie schreiben sind für mich Böhmische Dörfer.
Sorry, dass sind zu hohe Ansprüche für mich.
Ich habe Ihnen die VBA kopiert.
‚~~Begin~~#################################################################################
Sub Menue_Erstellen_ZV()
Dim MB As Object, MWMMenue As Object, Befehl As Object
Set MB = CommandBars.ActiveMenuBar
If (Menüpunkt_vorhanden(MenueName)) Then
If (Menüeintrag_vorhanden(MenueName, SubMenueName)) Then
Menueeintrag_loeschen_ZV
End If
Set MWMMenue = MB.Controls(MenueName)
Set Befehl = MWMMenue.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = SubMenueName
.OnAction = „ZV_ZellenVerbinden“
End With
Else
Set MWMMenue = MB.Controls.Add(Type:=msoControlPopup, Temporary:=True)
MWMMenue.Caption = MenueName
Set Befehl = MWMMenue.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = SubMenueName
.OnAction = „ZV_ZellenVerbinden“
End With
End If
End Sub
‚~~~END~~~#################################################################################
‚~~Begin~~#################################################################################
Sub Menue_Loeschen_ZV()
On Error Resume Next
CommandBars.ActiveMenuBar.Controls(MenueName).Delete
End Sub
‚~~~END~~~#################################################################################
‚~~Begin~~#################################################################################
Function Menüpunkt_vorhanden(Bezeichnung) As Boolean
Menüpunkt_vorhanden = False
Dim MNU As CommandBarControl
For Each MNU In Application.CommandBars _
(„Worksheet Menu Bar“).Controls
If UCase(MNU.Caption) = UCase(Bezeichnung) Then
Menüpunkt_vorhanden = True
Exit Function
End If
Next MNU
End Function
‚~~~END~~~#################################################################################
‚~~Begin~~#################################################################################
Function Menüeintrag_vorhanden(SubMenü, Bezeichnung) As Boolean
Menüeintrag_vorhanden = False
Dim MNU As CommandBarControl
For Each MNU In Application.CommandBars _
(„Worksheet Menu Bar“).Controls(SubMenü).Controls
If UCase(MNU.Caption) = UCase(Bezeichnung) Then
Menüeintrag_vorhanden = True
Exit Function
End If
Next MNU
End Function
‚~~~END~~~#################################################################################
‚~~Begin~~#################################################################################
‚Löscht den Eintrag SubMenueName im Menü „MWM“
Sub Menueeintrag_loeschen_ZV()
CommandBars(„Worksheet Menu Bar“). _
Controls(MenueName).Controls(SubMenueName).Delete
End Sub
‚~~~END~~~#################################################################################
Schon jetzt herzlichen Dank für Ihre Rückmeldung.
####
Hallo Herr P.,
danke für den Code. Mir fehlt allerdings immer noch ein Befehl: ein anderes Makro ruft dieses Makros auf und löscht das Symbol in der Symbolleiste. Ich weiß nicht welches, weil ich diese Variable nicht „sehe“.
Im Makro
Sub Menue_Loeschen_ZV()
lautet die erste Zeile
On Error Resume Next
also auf Deutsch: sollte ich – das Makro – das Symbol nicht löschen können (Controls(MenueName).Delete) – beispielsweise weil es schon gelöscht wurde … na: dann mach halt gar nichts! Auch keine Fehlermeldung! Ist völlig okay so!
Jedoch im Makro
Sub Menueeintrag_loeschen_ZV()
fehlt diese Zeile.
Tipp: Fügen sie nach der Sub-Zeile einfach die On-Error-Zeile ein (wurde wahrscheinlich vergessen), also so:
Sub Menueeintrag_loeschen_ZV()
On Error Resume Next
CommandBars(„Worksheet Menu Bar“). _
Controls(MenueName).Controls(SubMenueName).Delete
Probieren Sie es mal.
Klappt das?
Liebe Grüße
Rene Martin