Visibility von Symbolleisten

Guten Tag,

habe eine Mappe, zu der eine (selbstdefinierte) Sympolleiste mit einigen Schaltflächen gehört. Diese wird in

Auto\_Open()

mit

Toolbars("Wettertyp").Visible = True

sichtbar gemacht. Jetzt der Knackpunkt:

  • Öffne ich die Mappe direkt, also z.B. Doppelklick im Explorer, so erscheint die Symbolleiste,

  • öffne ich die Mappe über eine Schaltfläche/Makro aus einer anderen Mappe heraus mit

    Workbooks.Open Filename:= „D:\Hausleit\Wetter.xls“

so erscheint sie nicht.
Was muss ich tun, dass sie immer erscheint? In beiden Fällen wird doch Auto_Open beim Start durchlaufen … oder etwa nicht?

Danke
Laika

Hallo Laika,

deine Anfragen weichen vom Üblichen ab und haben für mich einen gewissen Reiz, sie kurbeln mein Hirn an :smile:
Jetzt kommt Toolbars, nie von gehört (als Befehl im Code) in 10 Jahren geschweige denn benutzt. Die Vba-Hilfen in XL2000 und XL2007
helfen mir nicht groß weiter. Du hast XL2003.

Kann es sein daß dies [Toolbars(…)] ein Codebefehl ist den es in XL2000 noch nicht gab und in XL2007 nicht mehr?

Zu Auto_Open. Lernte ich kennen als etwas was „früher“ benutzt wurde.
Ich benutzte es noch nie. Ich nehme immer Workbook_Open.
Da ich an Excel-Vba interessiert bin habe ich schon recherchiert was da der Unterschied zwischen beiden ist.

Parat habe ich das Wissen grad nicht aber zurückbehalten habe ich daß es da einen gibt. Also Ihr Öffnungsverhalten je nachdem wie sie geöffnet werden bzw. ihre Mappe.

Bislang war jetzt für dich nix hilfreiches dabei :frowning:, jetzt ein bißchen.
Den Unterschied zwischen Öffnung durch Fremdcode oder Explorer
kannste ja selbst testen. Wenn es so ist wie du schreibst dann isses halt so. Damit wäre dein „oder etwa doch“ geklärt.

probiere dann mal, die Auto_Open Prozedur auszukommentieren und
ihren Code im Modul „DieseAbeitsmappe“ in die Prozedurhülle von Workbook_Open zu stellen. Dann testen und bitte hier berichten.

Was als workaround sofort funktieren müßte falls du ein zeitproblem hättest wäre
Shell(„Pfad\Excel.exe D:\Hausleit\Wetter.xls“)
Allerdings wird dann eine zweite Instanz von Excel erzeugt aber wie gesagt nur workaround und nur sponatn ausgedacht.

Btw: Du schreibst Doppelklick im Explorer, okay, übliche Wortwahl
und viele wissen was das bedeutet, soweit okay.

Machst du da echt einen Doppelklick? *staun* Mache ich seit Jahren nicht mehr, geht doch einfacher. (Hier für WinXP):
Start—Systemsteuerung—Ordneroptionen—Allgemein
[X] Öffnen durch einfachen Klick

Gruß
Reinhard

Grüezi Laika

habe eine Mappe, zu der eine (selbstdefinierte) Sympolleiste
mit einigen Schaltflächen gehört. Diese wird in Auto_Open()
mit Toolbars(„Wettertyp“).Visible = True sichtbar gemacht.
Jetzt der Knackpunkt:

  • Öffne ich die Mappe direkt, also z.B. Doppelklick im
    Explorer, so erscheint die Symbolleiste,
  • öffne ich die Mappe über eine Schaltfläche/Makro aus einer
    anderen Mappe heraus mit Workbooks.Open Filename:=
    „D:\Hausleit\Wetter.xls“ so erscheint sie nicht.

    Was muss ich tun, dass sie immer erscheint? In beiden Fällen
    wird doch Auto_Open beim Start durchlaufen … oder etwa
    nicht?

Letzeres, Laika, letzeres - das war aber schon immer so :wink:

a)
Verschiebe den Code in das seit xl97 übliche ‚Workbook_Open()‘ in ‚Ddiese Arbeitsmappe‘ - das Auto_Open() in einem Standard-Modul wird nur noch aus Gründen der Kompatibilität unterstützt.

b)
Ergänze ev. auch deinen Code zum öffnen der Datei wie folgt:

Workbooks.Open Filename:="D:\Hausleit\Wetter.xls"
ActiveWorkbook.RunAutoMacros xlAutoOpen

Das sollte aber nach der Umsetzung von a) eigentlich nicht mehr notwendig sein, wie dieses Zitat aus der Online-Hilfe zeigt:

_ Workbook.RunAutoMacros-Methode
Führt die der Arbeitsmappe zugeordneten Makros Auto_öffnen, Auto_schließen, Auto_aktivieren und Auto_deaktivieren aus. Diese Methode wurde aufgenommen, um abwärtskompatibel zu sein. Bei neuem Visual Basic Code sollten Sie an Stelle dieser Makros die Ereignisse Open, Close, Activate und Deactivate verwenden._

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Guten Tag Thomas,

a)
Verschiebe den Code in das seit xl97 übliche ‚Workbook_Open()‘
in ‚Ddiese Arbeitsmappe‘ - das Auto_Open() in einem
Standard-Modul wird nur noch aus Gründen der Kompatibilität
unterstützt.

Damit geht es nicht …

b)
Ergänze ev. auch deinen Code zum öffnen der Datei wie folgt:

Workbooks.Open Filename:=„D:\Hausleit\Wetter.xls“
ActiveWorkbook.RunAutoMacros xlAutoOpen

… das hinzugefügt bewirkt auch nichts.

Gruessle
Laika

Hallo Reinhard,

deine Anfragen weichen vom Üblichen ab …

Aha, ich dachte, ich mache nur ganz gewöhnliche Sachen. Viele Dinge in Excel kenne ich gar nicht, nutze ich nicht. Wenn ich in anderen Antworten von Dir mitlese, sehe ich, dass Du Dich erheblich besser auskennst.

… und haben für mich
einen gewissen Reiz, sie kurbeln mein Hirn an :smile:

Freut mich! Hirn ankurbeln soll ja jung erhalten - und wenn ich dazu beitragen kann :wink:)

Jetzt kommt Toolbars, nie von gehört (als Befehl im Code) in
10 Jahren geschweige denn benutzt.
Kann es sein daß dies [Toolbars(…)] ein Codebefehl ist den
es in XL2000 noch nicht gab und in XL2007 nicht mehr?

Nutze ich schon ewig, hat es schon unter Win 95 gegeben. Manchmal braucht man eben mappenspezifische Toolbars …

Ich benutzte es noch nie. Ich nehme immer Workbook_Open.

Ok, habe ich jetzt auf Thomas’ Anraten umgestellt, wusste ich noch nicht, dass das aus der Mode ist.

probiere dann mal, die Auto_Open Prozedur auszukommentieren
und ihren Code im Modul „DieseAbeitsmappe“ in die Prozedurhülle
von Workbook_Open zu stellen. Dann testen und bitte hier
berichten.

„DieseAbeitsmappe“ hat Thomas auch erwähnt. Zur Sicherheit die Nachfrage: Das ist die Mappe, die geöffnet wird, die, zu der die Workbook_Open-Prozedur gehört.

Btw: Du schreibst Doppelklick im Explorer, okay, übliche
Wortwahl
und viele wissen was das bedeutet, soweit okay.

Machst du da echt einen Doppelklick? *staun* Mache ich seit
Jahren nicht mehr, geht doch einfacher. (Hier für WinXP):
Start—Systemsteuerung—Ordneroptionen—Allgemein
[X] Öffnen durch einfachen Klick

Ja, schon klar. Aber manchmal, nein häufig, will ich nur markieren - z.B. Löschen, Verschieben, Umbenennen usw. Der Doppelklick stört mich nicht.

Gruessle
Laika

Grüezi Laika

a)
Verschiebe den Code in das seit xl97 übliche ‚Workbook_Open()‘
in ‚Ddiese Arbeitsmappe‘ - das Auto_Open() in einem
Standard-Modul wird nur noch aus Gründen der Kompatibilität
unterstützt.

Damit geht es nicht …

…das glaube ich dich einfach mal so nicht… :wink:

Wie genau hast Du denn den Code umgesetzt?

Wo hast Du das 'Workbook_Open()-Ereignis eingebaut?

Beginne in deinem xl2003 mit einem Rechtsklick auf das Excel-Symbol in der Menüleiste links neben ‚Datei‘.
Wähle hier dann ‚Code anzeigen‘ und Du ‚landest‘ im VBA-Editor im Klassenmodul ‚Diese Arbeitsmappe‘ der gerade aktiven Datei.

Wähle dann im linken DropDown oberhalb des vermutlich noch leeren Code-Fensters ‚Workbook‘ aus und anschliessend im rechten DropDown ‚Open‘ - das sollte aber IMO schon per Default geschehen und Du hast dann im Code-Fenster das folgend Code-Gerüst stehen:

Option Explicit

Private Sub Workbook\_Open()

End Sub

Hier dazwischen kopierst Du dann deinen Code zum anzeigen der Symbolleiste.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -
1 „Gefällt mir“

Grüezi Laika

„DieseAbeitsmappe“ hat Thomas auch erwähnt. Zur Sicherheit die
Nachfrage: Das ist die Mappe, die geöffnet wird, die, zu der
die Workbook_Open-Prozedur gehört.

Grundsätzlich ja - der Code muss ja in der Mappe stehen, deren Symbolleisten Du anzeigen lassen willst.

Aber noch wichtiger ist, dass der Code in der Mappe an der richtigen Stelle steht - das ist eben das Klassenmodul ‚Diese Arbeitsmappe‘ - zu finden im VBA-Editor im Projekt-Explorer in jeder Mappe die gerade geöffnet ist.

Ich habe das Verfahren ausführlich(er) in meinem anderen Beitrag beschrieben.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Man lernt nie aus …
… „DieseArbeitsmappe“ kannte ich noch gar nicht - huu, huu …

Nun habe ich es so gemacht, wie Du sagst und … „kaum macht man es richtig, schon funktioniert’s!“
Also, meine Symbolleiste erscheint ordnungsgemäß.

Muss mich bei der Gelegenheit mal etwas tiefer in Objekte, Methoden, Ereignisse einarbeiten. Objektorientierte Programmierung kam zu meiner Zeit (vor 20 Jahren) erst richtig auf - zumindest in unserem Bereich. Da fehlt bei mir die ganze Begrifflichkeit.

Gruss und schönes Pfingstfest noch,
Laika

PS: Du und Reinhard, Ihr beide seid so geduldig im Beantworten meiner Fragen. Höchste Zeit, Euch dafür ein Sternchen zu verpassen - leider geht nur eins.

Grüezi Laika

… „DieseArbeitsmappe“ kannte ich noch gar nicht - huu, huu

Die gibt es seit es die ‚neuen‘ Events gibt, also seit xl97.

Nun habe ich es so gemacht, wie Du sagst und … „kaum macht
man es richtig, schon funktioniert’s!“

Ja, das erstaunt mich auch selbst immer wieder … :wink:

Muss mich bei der Gelegenheit mal etwas tiefer in Objekte,
Methoden, Ereignisse einarbeiten. Objektorientierte
Programmierung kam zu meiner Zeit (vor 20 Jahren) erst richtig
auf - zumindest in unserem Bereich. Da fehlt bei mir die ganze
Begrifflichkeit.

Ja, in der Zeit ist da schon einiges hinzugekommen und hat sich verändert. Eine kleine Auffrischung könnte schon Sinn machen.

PS: Du und Reinhard, Ihr beide seid so geduldig im Beantworten
meiner Fragen. Höchste Zeit, Euch dafür ein Sternchen zu
verpassen - leider geht nur eins.

Kein Problem - wir nehmen alles was wir kriegen können… :wink:

Auch dir weiterhin schöne Pfingsten.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Laika,

deine Anfragen weichen vom Üblichen ab …

Aha, ich dachte, ich mache nur ganz gewöhnliche Sachen. Viele
Dinge in Excel kenne ich gar nicht, nutze ich nicht. Wenn ich
in anderen Antworten von Dir mitlese, sehe ich, dass Du Dich
erheblich besser auskennst.

vielleicht wirkt das punktuell so, aber ich nutze auch viele Excel-Features nicht, da weiß ich auch nix.

Deine Toolbars haben mich völlig verwirrt. Mir unbekannt.
Die Vba-Hilfe Hinweislos. Inzwischen weiß ich daß dies ein in höheren Versionen leider undokumentierter Befehl aus 8.0, XL97 ist.
For each T in .Toolbars
klappt in XL2000 und XL2007
Also Problem Tollbars für mich geklärt und ich weiß Bescheid wenn ich das wieder mal lesen sollte.

… und haben für mich
einen gewissen Reiz, sie kurbeln mein Hirn an :smile:

Freut mich! Hirn ankurbeln soll ja jung erhalten - und wenn
ich dazu beitragen kann :wink:)

Jepp, tust du :smile:

Nutze ich schon ewig, hat es schon unter Win 95 gegeben.
Manchmal braucht man eben mappenspezifische Toolbars …

Trenn dich bitte davon und wechsle zu Commandbars.
Nachfolgend ist Code der eine eigene CommandBar erstellt.
Ist au dem Internet gefischt, der Anfrager sagt daß seine Icons unscharf dargestellt werden, na und, spielt hier für uns keine Rolle.
Ich habe auch den Code nicht geprüft, wichtig ist für mich daß du siehst wie man mit CommandBars „umgeht“.

Ohne es jetzt ausprobiert zu haben, wenn du mal Fragen zu
Toolbar hast und im Internet recherchierst wirst du im Fall a)
weniger Treffer haben als wenn du nach Commandbar schaust.

Im Fall b) haste Pech :smile: Dann kriegste viel zu viel Treffer und die
allermeisten bringen dir Null.
Denn Toolbar klingt für mich wie Spreadsheet.
Ein Spreadsheet ist ein ActiveX-Steuerelement aus deiner Symbolleiste
Steuerelementetoolbox, dort unter zusätzliche Steuerelemente zu finden.

Spreadsheet ist ein Steuerelement was ein Tabellenblatt darstellt.
Vorteil: Die Spalten gehen nicht nur von A-IV sondern von A-ZZ,
also glaub 768 Spalten, naja müßtest du nachrechnen.
Nachteil: Es ist flüchtig, d.h. bei programmstart mußt du es mit
Daten befüllen per Vba. Willst du Daten die darin geändert wurden
behalten mußt du sie beim Schließen der mappe alle speichern.
In einem normalen Blatt z.B.

So, jetzt beschäftigst du dich mit Spreadsheet, hast nachfragen
und gibst das als Suchbegriff ein. Millionen Treffer aber selten mal
ein Treffer dabei, denn 99% der Treffer beziehen sich auf ein normales
dir vertrautes Tabellenblatt (das bedeutet Spreadsheet übersetzt).
Bei Toolbar vermute ich ähnliches.

Ich benutzte es noch nie. Ich nehme immer Workbook_Open.

Ok, habe ich jetzt auf Thomas’ Anraten umgestellt, wusste ich
noch nicht, dass das aus der Mode ist.

Les hier im Brett Alles mit, das hält fit :smile:
Dann kriegt man sowas „mit“.

probiere dann mal, die Auto_Open Prozedur auszukommentieren
und ihren Code im Modul „DieseAbeitsmappe“ in die Prozedurhülle
von Workbook_Open zu stellen. Dann testen und bitte hier
berichten.

„DieseAbeitsmappe“ hat Thomas auch erwähnt. Zur Sicherheit die
Nachfrage: Das ist die Mappe, die geöffnet wird, die, zu der
die Workbook_Open-Prozedur gehört.

Ja. Jede Mappe die du hast hat immer das Modul DieseArbeitsmappe.
Pro Blatt gibt es immer Module mit dem Blattnamen.
NUR da gehören Codes rein die im ersteren Fall automatisch
auf Ereignisse der Mappe wie z.B. Öffnen reagieren.
Im zweiteren Fall, bei den Blattmodulen gehört da der Code rein
der auf BlattEreignisse wie z.B. Zelländerung durch manuelle Eingabe reagiert.

Beide Modulvarianten sind gleich aufgebaut. Mittig obendrüber
hast du ein DropdownFeld. Dort wählst du je nach Modul Workbook
oder Worksheet aus.
Dann ist rechts obendrüber ein anderes Dropdownfeld. Dort siehst
du dann alle Ereignisse auf die dann automatisch reagiert wird wenn du sie einsetzt. Wählst du da eines aus so erzeugt das gleich die
Prozedurhülle wie
Private Sub Workshets_Change(…)
End Sub

Thomas hat dir ja schon einen Weg beschrieben wie du z.B. in das Modul DieseArbeitsmappe gelangst.
Es gibt auch einen Weg durch entsprechende Klicks z.B. in das Modul des entsprechenden Blattes zu gelangen.
Den Weg zeige ich analog auch oftmals auf, ist für manche User einfach
schnell umzusetzen.

Privat nehme ich nie diese Wege.
Ich nehme IMMER Alt+F11. Dann sehe ich im VB-Editor links den Projektexplorer. Projekt=Mappe. Im richtigen Projekt mache ich dann
einen Dopellklick auf den gewünschten Modulnamen, ferdisch :smile:
Gewöhn dir das bitte auch an, its easy to use wie die Latriner sagen :smile:

Und, ich denke ich spreche da auch für Thomas und alle die weltweit in Foren anderen helfen, Wenn ein Anfrager „mitspielt“ so ist man gerne bereit da zu helfen.
„Mitspielen“ bedeutet, auf Anregungen, nachfragen, sonstwas reagiert
der Anfrager und probiert sie aus. Dann berichtet er.
So kann man sich sehr schön vortasten…

Dann spielt das auch Null Rolle ob durch nachfragen o.ä. die Länge der Beitragsfolge wächst.
Wenn man aber vom Anfrager 2-3 Dinge wissen muß um ihm helfen zu können und man muß da wie bei Würmern aus der Nase ziehen zigmal
nachfragen um letztlich alle 3 Dinge zu wissen,
so als ob der die Nachfragen gar nicht gelesen hätte, dann sinkt
von Nachfrage zu Nachfrage die Bereitschaft rapide ab.
Bis hin zu 0, dann ist Schluß.
Gibt noch andere Gründe warum im Einzelfall die Antwortlust verschwindet.

All das ist aber absolut unabhängig vom Excel-Level des Anfragers.
Auch jmdm. der noch nie von Vba gehört hat und gerne hätte daß
beim Öffnen der Mappe irgendwas geschieht helfe ich gerne.

Schöpfing
Gruß
Reinhard

Set MeineSymbolleiste = Application.CommandBars.Add(„Name1“)
Set Button1 = MeineSymbolleiste.Controls.Add
With Button1
.Caption = „Test“
.OnAction = „Test“
.Style = msoButtonIconAndCaption
Worksheets(„Symbolleiste“).Shapes(„Picture 1“).Copy
.PasteFace
.TooltipText = „Test“
End With
MeineSymbolleiste.Visible = True