Microsoft Excel

Herbers Excel/VBA-Archiv

Symbolleisten durchloopen und ausblenden

Betrifft: Symbolleisten durchloopen und ausblenden von: Andreas Hanisch
Geschrieben am: 11.06.2008 18:45:09

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

  

Betrifft: http://support.microsoft.com/kb/291068/de von: Johannes D.
Geschrieben am: 11.06.2008 18:58:38


Gruesse,
Johannes


  

Betrifft: Symbolleisten durchloopen und ausblenden von: Andreas Hanisch
Geschrieben am: 12.06.2008 13:59:07

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


  

Betrifft: AW: Symbolleisten durchloopen und ausblenden von: Rudi Maintaire
Geschrieben am: 12.06.2008 14:43:52

Hallo,

Wenn ich mit Enable arbeite, ...


Warum tust du es dann nicht?
Zu einfach?

Gruß
Rudi


  

Betrifft: AW: Symbolleisten durchloopen und ausblenden von: Andreas Hanisch
Geschrieben am: 12.06.2008 15:00:35

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


  

Betrifft: AW: Symbolleisten durchloopen und ausblenden von: Rudi Maintaire
Geschrieben am: 12.06.2008 15:43:01

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


  

Betrifft: AW: Symbolleisten durchloopen und ausblenden von: Andreas Hanisch
Geschrieben am: 23.06.2008 19:03:12

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.


 

Beiträge aus den Excel-Beispielen zum Thema "Symbolleisten durchloopen und ausblenden"