Makro Menue einfügen
Hallo,
ich habe aus dem Internet ein Add in. Teilweise tut es das was ich möchte, teilweise werde ich es in nächster Zeit (mit eurer Hilfe) weiter entwickeln.
Dazu meine 1. Frage:
Das folgende steht unter DieseArbeitsmappe:
Option Explicit
Private Sub workbook_open()
SNeuesMenueEinfügen
End Sub
---------------------------------------
Private Sub Workbook_beforeclose(cancel As Boolean)
SMenüLöschen
End Sub
------------------------------------
Das folgende steht im Modul "Menue"
Option Explicit
Sub SNeuesMenueEinfügen()
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 = "Makros"
'-------------------------------------
Set MB = MenüNeu.Controls.Add _
(Type:=msoControlButton)
With MB
.Caption = "Daten in Zahlen umwandlen"
.Style = msoButtonCaption
.OnAction = "WandelinEXCEL"
Set MB = MenüNeu.Controls.Add _
(Type:=msoControlButton)
With MB
.Caption = "Blattschutz_ein"
.Style = msoButtonCaption
.OnAction = "Blattschutz_ein"
Set MB = MenüNeu.Controls.Add _
(Type:=msoControlButton)
With MB
.Caption = "Blattschutz_aus"
.Style = msoButtonCaption
.OnAction = "Blattschutz_aus"
End With
End With
End With
End Sub
Sub SMenüLöschen()
On Error Resume Next
With Application.CommandBars(1)
.Controls("Makros").Delete
End With
End Sub
Sind die beiden Mini-Makro unter DieseArbeitsmappe überflüssig (wenn man die beiden anderen entsprechend ergänzt)?
3 mal steht in dem einen Makro"i_Hilfe.....". Was will der Autor damit sagen??
Ist der Programmcode ansonsten in Ordnung oder hat jemand Tipps was ich verbessern / ergänzen kann / sollte?
Dieses Menue soll nach und nach weitere Makroaufrufe aufnehmen.
vielen Dank im voraus
mfg
Wolfgang H.
Antwort schreiben
Antwort 1 von Hajo_Zi vom 20.05.2022, 17:23 Options
HaloWolfgang,
die Makros unter dieseArbeitsmapppe veranlasen das die Makro beim Öffnen und beim schliessen ausgeführt werden. Ich vermute die sind nicht überflüssig.
Gruß Hajo
Antwort 2 von woher2010 vom 20.05.2022, 17:32 Options
Hallo Hajo,
das ist mir schon klar.
kann ich den Code der im Makro:"SNeuesMenueEinfügen()" steht in das Makro "Private Sub workbook_open()" reinkopieren? Und dann macht ein Makro das was vorher 2 gemacht haben?
mfg
Wolfgang H.
Antwort 3 von Hajo_Zi vom 20.05.2022, 17:40 Options
Hallo Wolfgang,
Theoretisch ja, ich sehe aber nicht ob das Makro von einem anderem aufgerufen wird.
Gruß Hajo
Antwort 4 von woher2010 vom 20.05.2022, 17:54 Options
Hallo Hajo,
wie oben gesagt, dies sind Teile eines Add in. Jeder der das Add in braucht, bindet es in sein Excel ein.
mfg
Wolfgang H.
Antwort 5 von fedjo vom 20.05.2022, 18:23 Options
Hallo Wolfgang,
ein Vorschlag für dein Eigenes Menue, ist bestimmt einfach zu verändern oder erweitern.
Gruß
fedjo
In ein Modul einfügen:
Option Explicit
Sub Eigenes_Menu()
' mit Unter-Untermenü
On Error Resume Next
Application.CommandBars.ActiveMenuBar _
.Controls("Wolfgang").Delete
With Application.CommandBars.ActiveMenuBar.Controls.Add(Type:=msoControlPopup)
.BeginGroup = True 'Trennlinie
On Error GoTo 0
.Caption = "Wolfgang"
' 1 Menüpunkt
With .Controls.Add
.FaceId = 3895
.Caption = "&M1" 'Menü Button Name
.OnAction = "Makro1" 'Dein Makro
End With
' 2 Menüpunkt
With .Controls.Add
.FaceId = 718
.Caption = "&M2" 'Menü Button Name
.OnAction = "Makro2" 'Dein Makro
'3 Menüpunkt
End With
With .Controls.Add
.FaceId = 2105
.Caption = "&M3" 'Menü Button Name
.OnAction = "Makro3" 'Dein Makro
End With
End With
End Sub
Sub Eigenes_Menu_loeschen()
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("Wolfgang").Delete
End Sub
In DieseArbeitsmappe einfügen:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Eigenes_Menu_loeschen
End Sub
Private Sub Workbook_Open()
Eigenes_Menu
End Sub
Antwort 6 von woher2010 vom 21.05.2022, 08:59 Options
Hallo und Danke,
schönes Wochenende,
Wolfgang H.
Antwort 7 von woher vom 24.05.2022, 17:41 Options
Hallo,
Danke noch mal, das Makro funktioniert. Aber verstehen würde ich es auch gerne.
Warum steht diese Anweisung ziemlich am Anfang des Makros:
Application.CommandBars.ActiveMenuBar _
.Controls("Wolfgang").Delete
Wenn ich sie lösche habe ich beim 2ten öffnen der Datei das Menue 2mal.
Aber eigentlich wird es doch beim schließen der Datei wieder gelöscht??
FaceId: ist das die Kennziffer für die Symbole vor dem Makronamen?
mfg
woher2010
Antwort 8 von Hajo_Zi vom 24.05.2022, 19:28 Options
Hallo Wolfgang,
das löschen ist nur zur Sicherheit, damit es nicht auf einen Laufzeitfehler läuft, falls schon vorhanden. Das es eine Sicherheitsmaßnahme ist siehst Du auch daran das davor On Error Resume Next steht. Das mit der FaceId hast Du korrekt erkannt.
Das Menü wird niemals 2x erstellt würde ich mal so vom lesen vermuten.
Gruß Hajo
Antwort 9 von woher2010 vom 24.05.2022, 20:08 Options
Hallo Hajo,
du hast recht. Ich weis nicht was ich vorhin gemacht habe. Da hatte ich, wie gesagt die beiden Zeilen zum testen gelöscht und beim nächsten Start der Datei das Menue doppelt, diesmal nicht.
Kannst du mir sagen was die Anweisung
dim i_Hilfe as integer
und die anderen Anweisungen die I_Hilfe enthalten bedeuten?
Hatte da jemand mal vor eine Hilfe-(Datei) zu erstellen, es dann aber
bleiben lassen ohne das Makro zu korrigieren?
Lässt sich grundsätzlich eine (z.B. Editor-) Datei als Hilfedatei dem AddIn hinzufügen?
mfg
Wolfgang H.
Antwort 10 von Hajo_Zi vom 24.05.2022, 20:15 Options
Hallo Wolfgang,
das it ein Überbleibsel aus dem ersten Code, Die Variable wurde benutzt für Anzahl der Einträge
i_Hilfe = Application.CommandBars(1).Controls(i).Index
zu ermitteln.
Das wurde aber im letzten Code verändert.
Eine Hilfe zu einer Funktion usw. ist ein kompliziertes Thema, da stehen schon einige Ansätze in den Foren. Ich habe mich damit noch nicht befast.
Gruß Hajo
Antwort 11 von woher2010 vom 24.05.2022, 20:20 Options
Hallo Hajo,
danke und schönen Abend noch.
mfg
Wolfgang