3.5k Aufrufe
Gefragt in Tabellenkalkulation von
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.

11 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
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
0 Punkte
Beantwortet von
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.
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Wolfgang,

Theoretisch ja, ich sehe aber nicht ob das Makro von einem anderem aufgerufen wird.

Gruß Hajo
0 Punkte
Beantwortet von
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.
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
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
0 Punkte
Beantwortet von
Hallo und Danke,
schönes Wochenende,
Wolfgang H.
0 Punkte
Beantwortet von Mitglied (926 Punkte)
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
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
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
0 Punkte
Beantwortet von
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.
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
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
...