287 Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (335 Punkte)
Hallo, liebe Excelianer,

ich habe 2 Probleme mit meinem VBA, der es mir ermöglichen soll, einen Button in der Menüleiste zu haben. Es ware toll, wenn Ihr mir helfen könntet.

1. Ich habe xls 2013 und wenn ich den VBA Code schreibe, erscheint der Knopf leider unter AddIns aber nicht in der Menüleiste. Wie kann ich es unterbinden, dass der Knopf unter AddIns aufgeführt wird.

2. Bevor xls geschlossen wird, möchte ich den Button natürlich löschen. Hier kommt aber immer folgende Fehlermeldung:

Compile error: Procedure declaration does not match description of event or procedure having the same name

Hier ist der Code:

Option Explicit

Private Sub Workbook_Open()

Dim myMenuBar As Variant
Dim ctrl1 As Variant

Set myMenuBar = Application.CommandBars("Worksheet Menu Bar")
Set ctrl1 = myMenuBar.Controls.Add(Type:=msoControlButton, ID:=459)
ctrl1.Caption = "Refresh Machinery List"
ctrl1.Style = msoButtonCaption
ctrl1.TooltipText = "Update Machinery List"
ctrl1.OnAction = "Sheet_Names"

End Sub


Private Sub Workbook_BeforeClose()

Application.CommandBars("Worksheet Menu Bar").Controls("mymenubar").Delete

End Sub

Vielen lieben Dank im Vorraus.

Gruss

Peter

2 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Peter,

soviel ich weiß werden in den neuen Excel-Versionen die benutzerdefinierten Buttons und Menüs automatisch unter der AddIns abgelegt.
Willst du das ändern, so musst du auf XML-Programmierung zurück greifen. Siehe hierzu die folgenden Links:
Kurzanleitung
ausführlicher Workshop

Zu deinem zweiten Problem.
Beim Erstellen nennst du den Commandbar myMenuBar, beim Schließen willst du aber mymenubar (mit kleinem m und b!) löschen, den es so aber nicht gibt. Passe den Namen an und das Makro sollte beim Schließen wie gewünscht funktionieren.

Gruß

M.O.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

nochmal ich ;-).

Außerdem sehe ich gerade, dass der Aufruf von Workbook_BeforeClose falsch ist. Richtig muss es so aussehen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Außerdem musst du den Control wie folgt löschen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.CommandBars("Worksheet Menu Bar").Controls("Refresh Machinery List").Delete

End Sub


Gruß

M.O.
...