Dateibezogene VBA-Makros

Hallo,

Ich habe in der Menüleiste mir 3 Schaltflächen generiert hinter denen eigene Makros stehen. Im Dialogfenster „Makro zuweisen“ steht richtig z.B. Beispiel1!Move2. Move2 ist ein Verschiebemakro, welches im Modul2 steht. Jedes weitere Makro steht nur wegen der besseren Übersicht in einem eigenem Modul.
Nun sind die Schaltflächen in jeder Exceldatei zu sehen, was mich stört. Sie sollen nur in der Datei Beispiel1 zu sehen sein. Dort sollen auch alle Makros zusammengefasst werden.
Was muß ich tun ?

Gruß Manne

hmm, galub das geht nur wenn du das menu mit VBA erstellst.

mmal als ansatz

Private Sub Workbook_open()
Dim symb As CommandBar
Dim AA As Object
On Error Resume Next
Set symb = Application.CommandBars.Add(„Arbeitszeit“, Position:=msoBarTop, Temporary:=True)
With symb
.Left = 0
.Visible = True
End With
Set AA = Application.CommandBars(„Arbeitszeit“).Controls.Add(Type:=msoControlButton)
With AA
.Style = msoButtonCaption
.Caption = „Jan“
.BeginGroup = True
.OnAction = „JanEin“
End With
Set AA = Application.CommandBars(„Arbeitszeit“).Controls.Add(Type:=msoControlButton)
With AA
.Style = msoButtonCaption
.Caption = „Feb“
.OnAction = „FebEin“
End With
Set AA = Application.CommandBars(„Arbeitszeit“).Controls.Add(Type:=msoControlButton)
With AA
.Style = msoButtonIcon
.FaceId = 966
.TooltipText = „Zeilen- und Spaltenköpfe ein- bzw. ausblenden“
.BeginGroup = True
.OnAction = „DisplayHeadings“
.Enabled = True
End With
Set AA = Application.CommandBars(„Arbeitszeit“).Controls.Add(Type:=msoControlButton)
With AA
.Style = msoButtonIcon
.FaceId = 461
.TooltipText = „Registerlaschen ein- bzw. ausblenden“
.OnAction = „TabsOn“
.Enabled = True
End With
End Sub

Private Sub Workbook_BeforeClose(Cancel as Boolean)
On Error Resume Next
With Application.CommandBars(1)
.Controls(„ArbeitsZeit“).Delete
End With
Application.CommandBars(„Arbeitszeit“).Delete
End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Ich habe in der Menüleiste mir 3 Schaltflächen generiert
hinter denen eigene Makros stehen. Im Dialogfenster „Makro
zuweisen“ steht richtig z.B.

http://www.pctipp.ch/praxishilfe/kummerkasten/office…

Hallo RadonDark,

http://www.pctipp.ch/praxishilfe/kummerkasten/office…

Der Link sieht gut aus ! Kann ihn aber erst Morgen testen
Ich werde berichten.

Danke Manne

Hallo RadonDark,

richtige Frage, falsche Antwort.
Thema verfehlt. Im Falschen Threat gelandet ?
Kann ja mal pssieren. Bei Frauen wäre es besser ! :smile:)

Gute Nacht
Manne

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo RadonDark,

nene

richtige Frage,

ja

falsche Antwort.

nein, denn es geht nur mit VBA erstellten MenuLeisten.

Thema verfehlt. Im Falschen Threat gelandet ?

wohl eher du nicht richtig gelesen .

Kann ja mal pssieren. Bei Frauen wäre es besser ! :smile:)

Du frau ?? oder warum begreifst du nicht den beispiel code, beim anderen link ist genau das gleiche eben nur ohne Bespiel …

Also erst denken dan lenken.

Gute Nacht
Manne

kann ja mal passieren das du dich vertust, ich jedenfalls hab richtig geanwortet

Hi Manne,

Ich habe in der Menüleiste mir 3 Schaltflächen generiert
hinter denen eigene Makros stehen. Im Dialogfenster „Makro
zuweisen“ steht richtig z.B.
Beispiel1!Move2.

naja, ob das richtig ist, meinst du vielleicht so:

Beispiel1.xls!Modul2.Move2
Beispiel1.xls!Move2"

Move2

ist ein Verschiebemakro, welches im Modul2
steht. Jedes weitere Makro steht nur wegen der besseren
Übersicht in einem eigenem Modul.
Nun sind die Schaltflächen in jeder Exceldatei zu sehen, was
mich stört. Sie sollen nur in der Datei
Beispiel1 zu sehen sein. Dort sollen auch
alle Makros zusammengefasst werden.

In „DieseArbeitsmappe“ von Beispiel.xls

Option Explicit

Private Sub Workbook_Activate()
Call Ein
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Aus
End Sub

Private Sub Workbook_Deactivate()
Call Aus
End Sub

Private Sub Workbook_Open()
Call Ein
End Sub

in „Modul1“ von Beispiel.xls

Option Explicit
'
Sub Ein()
With Application.CommandBars("Worksheet Menu Bar")
 .Controls("Move1").Visible = True
 .Controls("Move2").Visible = True
 .Controls("Move3").Visible = True
End With
End Sub
'
Sub Aus()
With Application.CommandBars("Worksheet Menu Bar")
 .Controls("Move1").Visible = False
 .Controls("Move2").Visible = False
 .Controls("Move3").Visible = False
End With
End Sub

Gruß
Reinhard

Hallo Reinhard,

erst heute hatte ich Zeit die Test durchzuführen.

Beispiel1.xls!Move2"

Du hattest recht. Ein Schreibfehler von mir. Manchmal sind die Finger schneller als der Kopf!

Dein Code funktioniert (nach vielen Veruchen). Der Fehler war :

.Controls(" Move1").Visible = True
.Controls(" Move2").Visible = True
.Controls(" Move3").Visible = True

Die Makros haben reell den Namen MOVE1…3(), aber mit Anpassen habe ich den Schaltflächennamen in aussagekräftigere Namen ( DRUCK , Vorschau und Auswertung ) umgeändert. Ein Mißverständnis. Wieder 'was duzugelernt :„Makroname = Schaltflächenname“.

Danke und Gruß von Manne

Hallo RadonDark,

http://www.pctipp.ch/praxishilfe/kummerkasten/office…
Der Link sieht gut aus !
Ich werde berichten.

Heute Bericht:

Der Code funktioniert leider nicht so.
bei

Application.CommandBars("Beispiel1").Visible = True

kommt der Fehlerausdruck: Laufzeitfehler ‚5‘: Ungültige Procedur oder ungültiges Argument
Sonst habe ich alles so übernommen wie beschrieben.

Mit Deinem weiteren Beispiel kam ich nicht zurecht, da ich völliger Anfänger bin und überhaubt nicht verstanden haben, was Du mir da verständlich machen wolltest.

Gruß Manne

Hallo Manne,

Du hattest recht. Ein Schreibfehler von mir. Manchmal sind die
Finger schneller als der Kopf!

Ist völlig normal *find*, passiert mir laufend :smile:

Dein Code funktioniert (nach vielen Veruchen). Der Fehler war

.Controls(" Move3").Visible = True

Die Makros haben reell den Namen
MOVE1…3(),

Excel ist da unkonsequent, mal ist Groß/Kleinschreibung völlig egal, mal muß man völlig exakt sein.

In Vba kann man so auf die „sichere“ Seite gelangen:

Anstatt abzufragen

if activeworkbook.name „MeineDatei.xls“ then

besser so fragen:

if ucase(activeworkbook.name) ucase(„MeineDatei.xls“) then
oder so
if ucase(activeworkbook.name) „MEINEDATEI.XLS“) then

Wie du siehst, habe ich alle Vba-Befehle klein geschrieben, gehe ich in die nächsteCodezeile so wandelt der Debugger Anfangsbuchstaben und manch andere im Befehl in GROß um.

Geschieht dies nicht, weiß ich, ich habe einen Tippfehler drin.
Nachteil ist leider, dadurch habe ich mir teilweise die Kleinschreibung so angewöhnt, daß wenn ich normalen Text schreibe wie hier in einem Beitrag schlichtweg vergesse den Anfangsbuchstaben groß zu schreiben.

aber mit Anpassen habe ich den
Schaltflächennamen in aussagekräftigere Namen
( DRUCK , Vorschau und
Auswertung ) umgeändert.

Das empfiehlt sich immer, ein Fremder kann doch mit Move1, Move2 erstmal nix anfangen, mit Druck,Vorschau sehr wohl was.
Und was gehen uns Fremde an :smile:, das viel schlimmere Problem ist, wenn du viele Dateien bearbeitest und diese datei nach einem Monat wieder mal öffnest, bist du selbst ein Fremde geworden und fluchst über dich daß du da so bescheuerte namen wie Move1, Move2 gewählt hast und nun wieder sinnlos Zeit verplempern mußt um wieder raustzufinden was sich dahinter verbirgt

Ein Mißverständnis.
Wieder 'was duzugelernt :„Makroname =
Schaltflächenname“.

Nein, siehst du falsch. Der Schaltflächentext muß absolut nicht dem makronamen entsprechen.

Und z.B. ein CommandButton hat einen Namen, den du mit .Name ansprechen kannst, der CB hat auch eine Aufschrift oder wie man das nennen mag, die sprichst du mit .Caption an.

Ansprechen gleich ändern usw.

Füge mal über Ansicht–Symbolleisten–Steuerelement–Toolbox eine Befehlsschaltfläche (=CommandBbutton) ein.
Dann Rechtsklick auf den CB, wähle „Eigenschaften“ aus und du siehst was ich meine. Ändern kannst du dann einfach z.B. die caption in dem du rechts in der Liste die Eintragung abänderst.
Ist dir links eine Eigenschaft unklar was damit gemeint ist, so gehe links in das Feld und drücke F1.
Meist, nicht immer, kommt dann die Hilfe dazu.

Wenn du dich da noch nicht so auskennst, so füge mal aus der Symbolleiste noch andere Steuerelement in dein Blatt ein.

Wichtig ist das Symbol „Entwurfsmodus“ in der Symbolleiste, damit schaltest du den Entwurfsmodus aus oder ein.
Wenn der Entwurfsmodus eingeschaltet ist (ist er automatisch wenn du ein Steuerelement frisch eingefügt hast), kannst du daneben auf das Symbol Eigenschaften klicken, dann ercheint auch das o.g. Eigenschaftsfenster. Nun kannst du reihum auf die anderen eingefügten Steuerelemente klicken und siehst deren teilweise unterschiedlichen Eigenschaften.

Ich weiß schon, das alles hat mit deiner Ausgangsanfrage nix zu tun, vielleicht war es trotzdem interessant für dich oder Andere dies zu lesen.

Gruß
Reinhard

Hi Manne,

bei

Application.CommandBars(„Beispiel1“).Visible =
True

kommt der Fehlerausdruck: Laufzeitfehler ‚5‘:
Ungültige Procedur oder ungültiges Argument

vielleicht hilft dir das weiter, ggfs. den Blattnamen abändern:

Sub test()
Dim CB, Zei, Mldg
Const Bez As String = "Beispiel1"
Mldg = Bez & " wurde nicht gefunden"
With Worksheets("Tabelle1")
For Each CB In Application.CommandBars
 Zei = Zei + 1
 .Cells(Zei, 1) = CB.Name
 .Cells(Zei, 2) = CB.Visible
 If CB.Name = Bez Then Mldg = Bez & " ist vorhanden"
Next CB
End With
MsgBox Mldg
End Sub

Mit Deinem weiteren Beispiel kam ich nicht zurecht, da ich
völliger Anfänger bin und überhaubt nicht verstanden haben,
was Du mir da verständlich machen wolltest.

„überhaupt nicht“ ist natürlich e bissi viel um alles zu erläutern, wenn es nur einige wenige Knackpunkte sind, dann frage doch genauer zu diesen Punkten nach.

Gruß
Reinhard

Hallo Reinhard,

„Man kann alt werden wie ein Esel oder eine Kuh, man lernt immer noch dazu!“ Und ich bin der alte Esel :wink:)

Ich danke für Deine ausfühliche Ausführungen. Du hast recht, ich bin noch nicht ganz soweit. Mit USERFORM-Fragen werde ich Dich als nächstes belästigen.

Auf jedenfall klappt das Verschwindenlassen von den CB’s.

Gruß Manne