Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Symbolleisten durchloopen und ausblenden

Symbolleisten durchloopen und ausblenden
11.06.2008 18:45:09
Andreas
Hallo Herber Fans,
mit folgendem Code:

Private Sub Workbook_Activate()
Dim cb As CommandBar
For Each cb In Application.CommandBars
If cb.Name  "Standard" And cb.Name  "Formatting" And cb.Name  "PivotTable" And cb. _
Name  "Worksheet Menu Bar" And cb.Name  "Cell" Then cb.Enabled = False
Next cb
End Sub



Private Sub Workbook_Deactivate()
Dim cb As CommandBar
For Each cb In Application.CommandBars
cb.Enabled = True
Next cb
End Sub


Kann ich alle Schaltflächenleisten die nicht den von mir definierten entsprechen deaktivieren. D.h. ich schränke die Möglichkeiten der Excel Applikation in der mein Workbook geöffnet ist, drastisch ein. Das möchte ich jedoch nicht unbedingt. Vielmehr geht es mir darum, Schaltflächenleisten, die von den meisten Usern (m.E. unnötigerweise) aus Gewohnheit aktiviert sind (z.B. „Zeichnen“) auszublenden, sobald meine Datei geöffnet wird.
Mein Ansatz war:
If cb.Name = "Chart" Or cb.Name = "Reviewing" Or cb.Name = "Drawing" or cb.Name = “Borders” Then cb.visible = False
Also nur die ausblenden, die ich auf meiner schwarzen Liste habe. Das hat nicht funktioniert. Der Debugger hat cb.visible = False beanstandet.
Ich präferiere den Weg über visible gegenüber enable auch aus dem Grund, daß viel Symbole grau werden, wenn man mit enable = false die Symbolleisten beeinflußt und das ein Gefühl der Einschränkung vermittelt. De facto geht es mir nur darum den Monitorplatz für die relevanten Daten zu maximieren.
Auch hatte ich versucht, die Begriffe meiner Liste durch zu loopen. D.h. nicht jeden Begriff durch „Or“ abdecken, sondern eine Liste im VBA Editor (nicht auf einem Blatt) zu definieren (Array?) durch das der Code mit For Each durchgeht. Bei einem Treffer soll der Status dann auf visible = false gehen. Sobald das Workbook deaktiviert ist, sollen alle Symbolleisten wieder erscheinen, die der User vorher auch schon hatte.
Liste der auszublendenden Symbolleisten:
Chart
Reviewing
PDFMaker 7.0
Drawing
Formula Auditing
Visual Basic
Borders
Picture
Ist das Euer Meinung nach möglich. Bei allen Recherchen hier im Forum habe ich meist nur Codes mit „enable“ gefunden und auch leider kein Array, welches ich anwenden konnte.
Vielen Dank und Gruß,
Andreas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
http://support.microsoft.com/kb/291068/de
11.06.2008 18:58:38
Johannes
Gruesse,
Johannes

Symbolleisten durchloopen und ausblenden
12.06.2008 13:59:07
Andreas
Hallo Johannes,
vielen Dank für deinen Hinweis auf die Microsoft Stellungnahme zu dem Problem. Ich habe nun ein „On Error Resume next“ eingebaut und der Code läuft jetzt durch.
Über:

Sub CommandbarsAusblenden()
Dim cb As CommandBar
On Error Resume Next
For Each cb In Application.CommandBars
If cb.Name  "Standard" And cb.Name  "Formatting" And cb.Name  "PivotTable" And cb. _
Name  "Worksheet Menu Bar" Then cb.Visible = False
Next cb
End Sub


Werden die CommandBars so gestaltet wie ich es vorgebe. Aber ich möchte, daß die alte CommandBar Struktur wiederhergestellt wird beim Schließen der Datei, die vorgenannten Code beinhaltet.
Über:


Sub test_close2()
Dim cb As CommandBar
On Error Resume Next
For Each cb In Application.CommandBars
'cb.Visible = False
If cb.Name  "Standard" And cb.Name  "Formatting" And cb.Name  "PivotTable" And cb.Name  _
 "Worksheet Menu Bar" Then cb.Visible = True
Next cb
End Sub


funktioniert das nicht. Es werden alle Commandbars eingeblendet. Wenn ich mit Enable arbeite, dann kann ich beim Schließen der Datei über „cb.Enabled = True“ die alte Struktur wiederherstellen. Aber mit visible funktioniert das nicht.
Denkbar ist u.U. bei Öffnung der Datei prüfen, welche CommandBars „visible“ sind, diese dann im VBA Editor speichern (als CustomListe oder Array?) und beim Schließen entsprechend dieser Liste die visible Attribute wiederherstellen.
Über:


Sub CommandBarAuflistung_2()
Dim oBar As CommandBar
Dim iRow As Integer
iRow = 1
For Each oBar In Application.CommandBars
iRow = iRow + 1
If oBar.Visible = True Then
Cells(iRow, 1) = oBar.Name
End If
Next oBar
End Sub


erreiche ich eine Listung. Es übersteigt aber meine bisherigen Fähigkeiten, diese Liste nicht auf ein Blatt sondern VBA intern zu speichern.
Was meinst Du/ Ihr? Ist das Vorhaben realisierbar?
Vielen Dank und Gruß für eine Rückmeldung.
Grüße, Andreas

Anzeige
AW: Symbolleisten durchloopen und ausblenden
12.06.2008 14:43:00
Rudi
Hallo,

Wenn ich mit Enable arbeite, ...


Warum tust du es dann nicht?
Zu einfach?
Gruß
Rudi

AW: Symbolleisten durchloopen und ausblenden
12.06.2008 15:00:35
Andreas
Hi Rudi,
Gute Frage! Nein, nicht weil es "zu einfach" ist. Wenn ich mit Enable arbeite ist es zu restriktiv. D.h. wenn du Symbolleisten mit Enable = false unterdrückst, dann kann der Anwender sie überhaupt nicht mehr (über Rechtsclick auf die Symbolleiste und Haken setzen) zurückholen. Das ist dann ein Moment in dem er zuweilen ungehalten auf mein Makro reagiert. Von wegen: "Es macht mir alles kaputt, was ist das für ein Mist..."
Was die meisten Anwender aber auch nicht sehen ist, daß wer den Fokus auf die Daten, den Inhalt richten will, der sollte sich nicht von Symbolleisten wie "Zeichnen" etc. den Blick versperren lassen. In der Tabellenkalkulation werden Symbole relativ selten benutzt. Trotzdem haben 90% der Anwender diese Leiste aktiv und scrollen sich dusselig, weil die Daten nicht auf den Monitor passen (weil alles mit Leisten zugepflastert ist...). Es hat Ihnen nie jemand anders gezeigt. Da ich das zeitlich nicht schaffe, löse ich es dezent im Hintergrund über ein Makro.
Wenn ein Anwender aber partout nicht auf seine "Zeichnen" Leiste verzichten möchte, weil er gern Pfeile an die Daten setzt, nun gut, dann soll er sie sich wieder einfach zurückholen können. Und genau dieses "einfache zurückholen" ist durch enable nicht gegeben.
Viele Grüße aus Berlin, Andreas

Anzeige
AW: Symbolleisten durchloopen und ausblenden
12.06.2008 15:43:00
Rudi
Hallo,
OK.
Natürlich könntest du den ZUstand der Symbolleisten in einem Public-Array speichern. Wenn aber das Makro durch irgendeinen Umstand abstürzt, ist der Inhalt des Array auch futsch. Deshalb würde ich alles in eine versteckte Tabelle schreiben. Den Inhalt würde ich nach Wiederherstellung löschen und die Tab nur dann füllen, wenn sie leer ist. Damit sollte sichergestellt sein, dass der Urzustand wiederhergestellt werden kann.
Alternative: Speichern in der Registry, siehe SaveSetting etc.
Gruß
Rudi

AW: Symbolleisten durchloopen und ausblenden
23.06.2008 19:03:00
Andreas
Hallo Herber Fans,
Ich habe eine Datei erstellt, die bei Öffnung zuerst ein neues Worksheet generiert, anschließend wird geprüft, welche Commandbars sichtbar sind. Diese werden dann in das angelegte temporäre Arbeitsblatt geschrieben. Commandbars, die ich nicht vorgesehen habe, werden über visible = false ausgeblendet. Beim Schließen der Datei werden die Commandbars, die im temporären Blatt niedergeschrieben wurden, wiederhergestellt. Anschließend wird das temporäre Blatt gelöscht.
Hier habe ich nun ein Problem. Es kommt die Dialogbox, ob ich das Blatt, in dem sich Daten befinden wirklich löschen möchte. Ich habe es bisher nicht geschafft, diese Fehlermeldung zu unterdrücken. Das Aufzeichnen mit dem Rekorder hat keine spezielle Option ergeben.
Wie kann ich diese Frage umgehen? Wie Rudi in dem bisherigen Thread ja schon geschrieben hat, wäre es auch möglich, denn Zustand der Symbolleisten in einem Public Array zu speichern. Das wäre mir fast lieber. Aber ich habe noch nie mit einem Public Array gearbeitet, um Werte zu speichern. Ist SaveSetting vielleicht auch besser?
https://www.herber.de/bbs/user/53292.xls
Primär würde ich mich freuen, wenn mir jemand helfen kann, die Fehlermeldung zu umgehen. Wenn das nicht geht, wird es wohl das komplexere Public Array oder Save Setting werden.
Dank und Gruß an Euch, Andreas.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige