Anzeige
Archiv - Navigation
652to656
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
652to656
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

alle controls in menü datei ausblenden

alle controls in menü datei ausblenden
19.08.2005 12:14:15
Sören
hallo leute,
wie kann ich alle controlls in menü "datei" ausblenden im sinne von:
Dim Ctrl
DIM I as integer
For Each Ctrl In CommandBars("Worksheet Menu Bar").Controls("Datei").Controls
I = I + 1
next
ich kann leider nicht das komplette menü datei ausblenden, da ich danach im sinne von:
Application.CommandBars("Worksheet Menu Bar"). _
Controls("Datei").Controls("Speichern &unter...").Enabled = True
bestimmte controls wieder einblenden möchte!
da sich jedoch bei den verschiedenen Excel-Versionen wohl die Zusammensetzung des Menüs "datei" sehr unterschiedlich verhält, kann ich die controls wohl nicht über caption ansprechen.
weiß jemand was?
gruß,
sören

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 12:28:31
Ramses
Hallo
warum stellst du die Einträge die du nicht haben willst auf "Enabled=False" ?
Ausserdem gebe ich zu folgendes zu bedenken:

VBA-Nein > Finger weg von so was

Was passiert wenn deine Datei nicht funktioniert oder abstürzt ?
Dann hast du EXCEL abgeschossen und es ist für den normalen Benutzer nicht mehr zu gebrauchen.
Was machst du, wenn der Benutzer eine zweite Datei offen hat, WENN deine Datei geöffnet wird ?
Individuelle Anpassungen des Users gehen verloren !
Es gibt genügend andere Wege den Benutzer daran zu hindern, falsche Massnahmen vorzunehmen, OHNE dass man die ganze EXCEL-Umgebung verbiegen muss.
Gruss Rainer
Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 12:38:46
Sören
hallo rainer,
du hast recht! hast du denn ne idee, wie man dieses problem professionel und praktikabel umsetzen kann?
hast du tipps auf lager?
gruß,
sören
AW: alle controls in menü datei ausblenden
19.08.2005 12:48:13
Ramses
Hallo
Ich bin kein Hellseher.
Es kommt darauf an was du erreichen willst.
Gruss Rainer
AW: alle controls in menü datei ausblenden
19.08.2005 12:55:57
Sören
hallo rainer,
es sieht folgendermaßen aus:
meine exceldatei soll ein tool für bestimmte anwender werden. die navigation in diesem tool läuft über eine selbsterstellte symbolleiste, so dass der user darin nicht rumfuschen kann, zudem sollen jedoch bestimmte controls aus der standard menübar zugänglich sein, wie beispielsweise "speichern unter..." oder "Druken", etc. pp...
aus diesem grunde habe ich halt eine individuelle anpassung vorgenommen.
aber du hast recht, wenn der user, einen dateiwechsel vornimmt, während meine anwendung offen ist, oder excel abstürzt, ist excel aufgrund meiner einstellungen abgeschossen.
wie kann ich denn ansonnsten meine individuelle navigation hinbekommen?
gruß,
sören

Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 12:54:27
Matthias
Hallo Sören,
ich finde, das kannst du schon machen. Du musst nur eine Routine schreiben, mit der du alle veränderten Einstellungen zurücksetzt und diese beim Ereignis Workbook_Deactivate() aufrufen.
Und wenn Excel mal abstürzen sollte, eine Extradatei bereithalten, mit der du die Einstellungen wieder zurücksetzt.
In "DieseArbeitsmappe":

Private Sub Workbook_Activate()
Sperren
End Sub
Private Sub Workbook_Deactivate()
Entsperren
End Sub

---------------------------------------------------------
In ein normales Modul:

Sub Sperren()
Dim ctrl As CommandBarControl
On Error Resume Next
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Datei").Controls
ctrl.Enabled = False
Debug.Print ctrl.Caption, ctrl.ID '->hier kriegst du die Control-ID für die Befehle!
Next ctrl
'Speichern unter... entsperren
For Each ctrl In CommandBars.FindControls(ID:=748)
ctrl.Enabled = True
Next ctrl
'Strg-S sperren
Application.OnKey "^s", ""
End Sub
Sub Entsperren()
Dim ctrl As CommandBarControl
On Error Resume Next
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Datei").Controls
ctrl.Enabled = True
Next
'Strg-S entsperren
Application.OnKey "^s"
End Sub

Gruß Matthias
Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 13:03:48
Sören
hallo matthias,
das ist es! so könnte es doch klappen!? es muss halt gewährleistet sein, dass die individuelle anpassung beim dateiwechsel rückgängig gemacht wird!
wie sehe denn so eine routine aus?
und wie sehe so eine exceldatei aus, welche beim excel-absturz, die individuelle anpassung zurücksetzt?
gruß,
sören
AW: alle controls in menü datei ausblenden
19.08.2005 13:15:59
Matthias
Hallo Sören,
also Deaktivierte Menüeinträge werden nicht dauerhaft deaktiviert, ebensowenig Tastaturumbiegungen mit OnKey. Hab das gerade mit dem Task-Manager (Prozess beenden) getestet.
Insofern ist das in diesem Fall nicht nötig.
Wenn aber doch, kopiere die Prozedur "Entsperren" in eine neue Mappe und scheibe in "DieseArbeitsmappe":

Private Sub Workbook_Open()
Entsperren
MsgBox "Einstellungen wiederhergestellt!"
ThisWorkbook.Close SaveChanges:=False
End Sub

Beim Öffen der Datei werden die Einstellungen wiederhergestellt und die Mappe gleich wieder geschlossen.
Ich will dich jetzt nicht zu leichtfertigem Handeln auffordern, was Rainer sagt, ist prinzipiell schon richtig.
Aber mit der Ereignisprozedur Workbook_Deactivate() kann man ja, sobald eine andere (fremde) Mappe aktiviert wird, alle wieder so setzen, wie es war. Du darfst nur nicht die Ereignisprozeduren abschalten (Application.EnableEvents = False), ohne sie - auch im Falle eines Laufzeitfehlers - wiederherzustellen.
Also, besonders in diesem Falle, immer einer Fehlerabfangroutine einbauen:
Sub Test()
On Error Goto ERRHANDLER
'dein Code
Exit Sub
ERRHANDLER:
'Code ab hier wird nur ausgeführt, wenn ein Laufzeitfehler aufgetreten ist.
End Sub

Gruß Matthias
Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 14:49:52
Sören
hallo matthias,
das ist echt cool. klappt FAST perfekt!
habe nur ein kleines problem.
habe eine fehlerbehebungmappe geschaffen:
in "DieseArbeitsmappe":

Private Sub Workbook_Open()
Call Fehler
MsgBox "Einstellungen wiederhergestellt!", , Fehlerbehebung
ThisWorkbook.Close SaveChanges:=False
End Sub

im "Modul1":
Sub Fehler()
Dim ctrl As CommandBarControl
Dim wb As Workbook 'Arbeitsmappe
Dim wsh As Worksheet 'Tabellenblätter
On Error Resume Next
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Datei").Controls
ctrl.Visible = True
Next
'Strg-S entsperren
Application.OnKey "^s"
Application.CommandBars("Worksheet Menu Bar").Controls("Fenster").Visible = True
Application.CommandBars("Worksheet Menu Bar").Controls("Format").Visible = True
Application.CommandBars("Worksheet Menu Bar").Controls("Daten").Visible = True
Application.CommandBars("Worksheet Menu Bar").Controls("Bearbeiten").Visible = True
Application.CommandBars("Worksheet Menu Bar").Controls("Einfügen").Visible = True
Application.CommandBars("Worksheet Menu Bar").Controls("?").Visible = True
'Zustand von Bearbeitungsleiste wiederherstellen
Application.DisplayFormulaBar = True

Application.CommandBars("Standard").Visible = True
Application.CommandBars("Visual Basic").Visible = True
Application.CommandBars("Zeichnen").Visible = True
Application.CommandBars("Steuerelement-Toolbox").Visible = True
Application.CommandBars("Format").Visible = True

'Eigene Menüleiste ausblenden
Application.CommandBars("Menue").Visible = False

'Zellen-Popups wieder aktivieren
Application.CommandBars("Cell").Enabled = True
'Bildlaufleisten ausblenden
With ActiveWindow
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
End With
'Registerkarten und Zeilen- und Spaltenüberschriften
'in der gesamten Arbeitsmappe einblenden sowie ScrollArea wieder herstellen
Set wb = ThisWorkbook
For Each wsh In wb.Worksheets
wsh.Select
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayWorkbookTabs = True
wsh.ScrollArea = "A1:IV65536"
Next wsh

End Sub
das problem ist jetzt, dass nicht alle von mir angegebenen symbolleisten sichtbar werden sondern nur "standard" und "visual basic"! aber warum nicht "steuerelement-toolbox" und "zeichnen"?
versteh ich nicht.
hast du ne ahnung?,
sören
Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 15:44:22
Matthias
Hallo Sören,
wieviele Befehle hast du denn übrig, also willst du nicht ausblenden?
Es ist irgendwann praktischer, alle Leisten auszublenden und eine eigene zu erstellen.
Und die Commandbars werden mit .Enabled = False ausgeblendet.
Und der Code ab "Bildlaufleisten ausblenden" in deiner obigen Prozedur ist überflüssig, da er auf die Mappe und nicht auf Excel bezieht.
Gruß Matthias
AW: alle controls in menü datei ausblenden
19.08.2005 16:19:39
Sören
Hi matthias,
es werden alle befehle ausgeblendet bis auf:
Datei
1. speichern unter...
2.Seite einrichten...
3.druckbereich
4.seitenansicht
5.drucken
6.beenden
ansicht:
1.Normal
2.seitenumbruchvorschau
alles andere geht weg!
gleichzeitig erscheint eine eigene menüleiste mit befehlen, mit denen man zwischen den arbeitsblättern wechselt.
wenn ich jetzt aber aus spass mal meine datei (im individuellen zustand) schließe, anschließend wieder irgendeine exceldatei öffne, ist ja excel weiterhin in meinem individuellen design.
durch öffnen der "fehlerbehebungsdatei" (siehe code) wird wieder alles "repariert"
jedoch kann ich machen, was ich will. die symbolleisten format, zeichnen und steuerelemente-toolbox erscheinen nicht automatisch. nur standard und visual basic.
komisch!
hast du nen plan?
gruß,
sören
Anzeige
AW: alle controls in menü datei ausblenden
19.08.2005 17:26:45
Matthias
Hallo Sören,
hier mein Codevorschlag (der Code in "DieseArbeitsmappe" bleibt unberührt):

Sub Sperren()
Dim cb As CommandBar, ctrl As CommandBarControl
Dim z As Variant
'Alle Leisten außen Menüleiste deaktivieren
For Each cb In CommandBars
If cb.Name <> "Worksheet Menu Bar" Then cb.Enabled = False
Next cb
'Alle Controls der Menüleiste außer "Datei" und "Ansicht" deaktivieren
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls
If ctrl.ID <> 30002 And ctrl.ID <> 30004 Then ctrl.Enabled = False: ctrl.Visible = False
Next ctrl
'Alle Controls in Datei und Ansicht deaktivieren
On Error Resume Next
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Datei").Controls
ctrl.Visible = False
Next ctrl
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Ansicht").Controls
ctrl.Visible = False
Next ctrl
On Error GoTo 0
'Einzelne Punkte wieder entsperren
For Each z In Array(748, 247, 30255, 109, 4, 752, 723, 724)
For Each ctrl In CommandBars.FindControls(ID:=z)
ctrl.Enabled = True: ctrl.Visible = True
Next ctrl
Next z
'Strg-S sperren
Application.OnKey "^s", ""
End Sub
Sub Entsperren()
Dim cb As CommandBar, ctrl As CommandBarControl
'Alle Leisten aktivieren
For Each cb In CommandBars
cb.Enabled = True
Next cb
'Alle Controls der Menüleiste aktivieren
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls
ctrl.Enabled = True: ctrl.Visible = True
Next ctrl
'Alle Controls in Datei und Ansicht aktivieren
On Error Resume Next
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Datei").Controls
ctrl.Enabled = True: ctrl.Visible = True
Next
For Each ctrl In CommandBars("Worksheet Menu Bar").Controls("Ansicht").Controls
ctrl.Enabled = True: ctrl.Visible = True
Next
On Error GoTo 0
'Strg-S entsperren
Application.OnKey "^s"
End Sub

Der nächste, wichtige Punkt wäre, alle Tastenkombinationen zu deaktivieren, die den Aufruf über die Menüleiste umgehen, Neben dem Strg-S also noch Strg-N, Strg-O und viele viele mehr... da kriegt man erstmal mit, was alles über Tastenkombis geht...
Gruß Matthias
Anzeige
AW: alle controls in menü datei ausblenden
20.08.2005 09:53:51
Sören
Hallo matthias,
ich danke dir für deine mühen. echt cool von dir.
ich versuche, das jetzt mal bei mir anzupassen.
wenn ich mich dann noch an die tastkombinationen machen will. wie geht das denn dann am besten? gibt es nicht die möglichkeit alle auszuschalten, so dass eine navigation nur über maus respektive touchpad möglich ist?
ansonsten wird das ja der absolute horror, alle zu vorhandenen zu sperren/entsperren...
gruß,
sören
AW: alle controls in menü datei ausblenden
20.08.2005 10:16:57
Matthias
Hallo Sören,
ansonsten wird das ja der absolute horror, alle zu vorhandenen zu sperren/entsperren...
Nicht, wenn sich schon jemand die Mühe gemacht hat ;-)
Ich hab selbst sowas am laufen:

Sub LockKeys()
With Application
.OnKey "^{PGUP}", "" 'Blattwechsel vor
.OnKey "^{PGDN}", "" 'Blattwechsel zurück
.OnKey "^a", ""
.OnKey "^b", ""
.OnKey "^c", ""
.OnKey "^d", ""
.OnKey "^e", ""
.OnKey "^f", ""
.OnKey "^g", ""
.OnKey "^h", ""
.OnKey "^i", ""
.OnKey "^j", ""
.OnKey "^k", ""
.OnKey "^l", ""
.OnKey "^m", ""
.OnKey "^n", ""
.OnKey "^o", ""
.OnKey "^p", ""
.OnKey "^q", ""
.OnKey "^r", ""
.OnKey "^s", ""
.OnKey "^t", ""
.OnKey "^u", ""
.OnKey "^v", ""
.OnKey "^w", ""
.OnKey "^x", ""
.OnKey "^y", ""
.OnKey "^z", ""
.OnKey "^,", ""
.OnKey "^.", ""
.OnKey "^-", ""
.OnKey "^#", ""
.OnKey "^{+}", ""
.OnKey "^ß", ""
.OnKey "^0", ""
.OnKey "^9", ""
.OnKey "^8", ""
.OnKey "^7", ""
.OnKey "^6", ""
.OnKey "^5", ""
.OnKey "^4", ""
.OnKey "^3", ""
.OnKey "^2", ""
.OnKey "^1", ""
.OnKey "{F1}", ""
.OnKey "{F2}", ""
.OnKey "^{F2}", ""
.OnKey "^%{F2}", ""
.OnKey "{F3}", ""
.OnKey "^{F3}", ""
.OnKey "{F4}", ""
.OnKey "{F5}", ""
.OnKey "{F6}", ""
.OnKey "{F7}", ""
.OnKey "{F8}", ""
.OnKey "{F9}", ""
.OnKey "{F10}", ""
.OnKey "{F11}", ""
.OnKey "{F12}", ""
.OnKey "^{F12}", ""
.OnKey "+{F1}", ""
.OnKey "+{F2}", ""
.OnKey "+{F3}", ""
.OnKey "+{F4}", ""
.OnKey "+{F5}", ""
.OnKey "+{F6}", ""
.OnKey "+{F7}", ""
.OnKey "+{F8}", ""
.OnKey "+{F9}", ""
.OnKey "+{F10}", ""
.OnKey "+{F11}", ""
.OnKey "+{F12}", ""
.OnKey "%{F2}", ""
.OnKey "^%{F9}", ""
'VB-Editor
.OnKey "%{F8}", ""
.OnKey "%{F11}", ""
.OnKey "+%{F11}", ""
'Ziffernblock:
.OnKey "^{111}", ""  'geteilt
.OnKey "^{106}", ""  'mal
.OnKey "^{109}", ""  'minus
.OnKey "^{107}", ""  'plus
End With
End Sub
Sub UnlockKeys()
With Application
.OnKey "^{PGUP}"
.OnKey "^{PGDN}"
.OnKey "^a"
.OnKey "^b"
.OnKey "^c"
.OnKey "^d"
.OnKey "^e"
.OnKey "^f"
.OnKey "^g"
.OnKey "^h"
.OnKey "^i"
.OnKey "^j"
.OnKey "^k"
.OnKey "^l"
.OnKey "^m"
.OnKey "^n"
.OnKey "^o"
.OnKey "^p"
.OnKey "^q"
.OnKey "^r"
.OnKey "^s"
.OnKey "^t"
.OnKey "^u"
.OnKey "^v"
.OnKey "^w"
.OnKey "^x"
.OnKey "^y"
.OnKey "^z"
.OnKey "^,"
.OnKey "^."
.OnKey "^-"
.OnKey "^#"
.OnKey "^{+}"
.OnKey "^ß"
.OnKey "^0"
.OnKey "^9"
.OnKey "^8"
.OnKey "^7"
.OnKey "^6"
.OnKey "^5"
.OnKey "^4"
.OnKey "^3"
.OnKey "^2"
.OnKey "^1"
.OnKey "{F1}"
.OnKey "{F2}"
.OnKey "^{F2}"
.OnKey "^%{F2}"
.OnKey "{F3}"
.OnKey "^{F3}"
.OnKey "{F4}"
.OnKey "{F5}"
.OnKey "{F6}"
.OnKey "{F7}"
.OnKey "{F8}"
.OnKey "{F9}"
.OnKey "{F10}"
.OnKey "{F11}"
.OnKey "{F12}"
.OnKey "^{F12}"
.OnKey "+{F1}"
.OnKey "+{F2}"
.OnKey "+{F3}"
.OnKey "+{F4}"
.OnKey "+{F5}"
.OnKey "+{F6}"
.OnKey "+{F7}"
.OnKey "+{F8}"
.OnKey "+{F9}"
.OnKey "+{F10}"
.OnKey "+{F11}"
.OnKey "+{F12}"
.OnKey "%{F2}"
.OnKey "^%{F9}"
'VB-Editor
.OnKey "%{F8}"
.OnKey "%{F11}"
.OnKey "+%{F11}"
'Ziffernblock:
.OnKey "^{111}"  'geteilt
.OnKey "^{106}"  'mal
.OnKey "^{109}"  'minus
.OnKey "^{107}"  'plus
End With
End Sub

Rufe die Prozeduren LockKeys und UnlockKeys einfach in deinen bestehenden Prozeduren (Sperren/Entsperren) auf.
Achtung: Es befinden sich darin auch Tastenkombis, die das aufrufen des VB-Editors unmöglich machen. Wenn deine Mappe die einzig geöffnete ist, kannst du nicht mehr auf den Editor zugreifen (sonst einfach eine andere Mappe aktivieren).
Du solltest noch so eine Art Admin-Modus hinzufügen, der nach Kennwortabfrage alles wieder freigibt. Denn die Einschränkungen sollen ja nur für die Anwender gelten, nicht für dich...
Die einfachste Form:
In LockKeys:

.OnKey "^a", "SetAdmin" 'statt ""

Dann:

Sub SetAdmin()
Dim pw As String
pw = InputBox("Kennwort:", "Admin-Modus")
If pw = "123" Then
Entsperren
Else
Sperren
End If
End Sub

So kannst du im gesperrten Modus mit Strg-A und Kennworteingabe die Beschränkungen aufheben.
Gruß Matthias
Anzeige
AW: alle controls in menü datei ausblenden
20.08.2005 14:17:30
Sören
Hi matthias,
du bist echt genial! ich danke dir erstaml vielmals für deine hilfe.
ich werde das jetzt mal angehen.
gruß und noch ein schönes we,
sören

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige