Anzeige
Archiv - Navigation
1192to1196
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Doppelten Menü Eintrag verhindern

Doppelten Menü Eintrag verhindern
Dennis
Hallo zusammen,
ich lasse beim Starten meines Addins ein Menü in Excel erstellen. Wird die Arbeitsmappe geschlossen, bleibt der Menüeintrag auch wie gewünscht erhalten. Da das Addin aber von verschiedenen Personen genutzt wird, gibt es den ein oder anderen Spezi, der das Addin nicht wieder über das erstellte Menü startet, sondern über den Dateiexplorer neu startet. Dadurch passiert folgendes: Das Addin schreibt wieder den Menüeintrag. Beim nächsten Öffnen wieder.
Wenn ein User also 5 x das Addin startet, hat der User 5x den Eintrag in Excel. Wie kann ich das verhindern?
Dieser Code steht im Workbook Open()
Private Sub Workbook_Open()
'eigenes Menü
Dim i As Integer
Dim i_Hilfe As Integer
Dim MenüNeu As CommandBarControl
Dim Mb As CommandBarControl
i = Application.CommandBars(1).Controls.Count
i_Hilfe = Application.CommandBars(1).Controls(i).index
Set MenüNeu = Application.CommandBars(1). _
Controls.Add(Type:=msoControlPopup, _
before:=i_Hilfe, Temporary:=True)
MenüNeu.Caption = "xyz"
Set Mb = MenüNeu.Controls.Add _
(Type:=msoControlButton)
With Mb
.Caption = "Erfassung starten"
.Style = msoButtonIconAndCaption
.OnAction = "Monitor_starten"
.BeginGroup = True
.FaceId = 178
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Doppelten Menü Eintrag verhindern
29.12.2010 13:18:04
Reinhard
Hallo Dennis,
Option Explicit
Private Sub Workbook_Open()
'eigenes Menü
Dim i As Integer, Gef As Boolean
Dim i_Hilfe As Integer
Dim MenüNeu As CommandBarControl
Dim Mb As CommandBarControl
With Application.CommandBars(1)
For i = 1 To .Controls.Count
If .Controls(i).Caption = "xyz" Then
Gef = True
Exit For
End If
Next i
If Gef = False Then
i = .Controls.Count
i_Hilfe = .Controls(i).Index
Set MenüNeu = .Controls.Add(Type:=msoControlPopup, before:=i_Hilfe, Temporary:=True)
MenüNeu.Caption = "xyz"
Set Mb = MenüNeu.Controls.Add(Type:=msoControlButton)
With Mb
.Caption = "Erfassung starten"
.Style = msoButtonIconAndCaption
.OnAction = "Monitor_starten"
.BeginGroup = True
.FaceId = 178
End With
End If
End Sub

Gruß
Reinhard
Anzeige
@Reinhard : Besser geht das mit .FindControl _oT
29.12.2010 13:18:55
NoNet
_oT = "ohne Text"
AW: @Reinhard : Besser geht das mit .FindControl _oT
29.12.2010 14:03:45
Reinhard
Hallo NoNet,
sicher hast du Recht, irgendwie benutze ich es selten.
Gruß
Reinhard
Menü per TAG identifizieren
29.12.2010 13:18:07
NoNet
Hallo Dennis,
Du kannst im Code einfach überprüfen, ob der Menüpunkt bereits existiert.
Am besten ist dafür die .TAG-Eigenschaft geeignet, mit der Du ein Control (also z.B. den Menüpunkt "xyz") unsichtbar benennen kannst. Mit der Methode .FindControl(tag:="DeinTagName") kannst Du dann später prüfen, ob der Menüpunkt bereits existiert und darauf reagieren.
Hier Dein angepasstes Code-Beispiel :
Private Sub Workbook_Open()
'eigenes Menü
Dim i As Integer
Dim i_Hilfe As Integer
Dim MenüNeu As CommandBarControl
Dim Mb As CommandBarControl
'Hier wird geprüft, ob ein Control mit dem Tag "eigenesMenue" bereits existiert :
Set MenüNeu = Application.CommandBars(1).FindControl(Tag:="eigenesMenue")
If MenüNeu Is Nothing Then
'MsgBox "Menü existiert noch nicht"
i = Application.CommandBars(1).Controls.Count
i_Hilfe = Application.CommandBars(1).Controls(i).Index
Set MenüNeu = Application.CommandBars(1). _
Controls.Add(Type:=msoControlPopup, _
before:=i_Hilfe, Temporary:=True)
MenüNeu.Caption = "xyz"
MenüNeu.Tag = "eigenesMenue" 'Hier wird das TAG des Menüpunktes eindeutig festgelegt !
Set Mb = MenüNeu.Controls.Add _
(Type:=msoControlButton)
With Mb
.Caption = "Erfassung starten"
.Style = msoButtonIconAndCaption
.OnAction = "Monitor_starten"
.BeginGroup = True
.FaceId = 178
End With
Else
MsgBox "Menü existiert bereits"
End If
End Sub
Gruß, NoNet
Anzeige
AW: Doppelten Menü Eintrag verhindern
29.12.2010 13:18:35
Josef

Hallo Dennis,
man muss das Menü vor dem Erstellen erst mal löschen.
Ich löse das z.B. so.

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  deleteMenu
End Sub

Private Sub Workbook_Open()
  createMenu
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Const cstrMenuName As String = "xyz" 'Symbolleistenname - Anpassen!

Sub createMenu()
  'eigenes Menü
  Dim i As Integer
  Dim i_Hilfe As Integer
  Dim MenüNeu As CommandBarControl
  Dim Mb As CommandBarControl
  
  deleteMenu
  
  i = Application.CommandBars(1).Controls.Count
  i_Hilfe = Application.CommandBars(1).Controls(i).Index
  Set MenüNeu = Application.CommandBars(1). _
    Controls.Add(Type:=msoControlPopup, _
    before:=i_Hilfe, Temporary:=True)
  MenüNeu.Caption = cstrMenuName
  MenüNeu.Tag = cstrMenuName
  Set Mb = MenüNeu.Controls.Add _
    (Type:=msoControlButton)
  With Mb
    .Caption = "Erfassung starten"
    .Style = msoButtonIconAndCaption
    .OnAction = "Monitor_starten"
    .BeginGroup = True
    .FaceId = 178
  End With
  
  Set Mb = Nothing
  Set MenüNeu = Nothing
End Sub

Sub deleteMenu()
  On Error Resume Next
  Application.CommandBars.FindControl(Tag:=cstrMenuName).Delete
  On Error GoTo 0
End Sub
Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige