| Symbolleisten ausblenden |
Folgender
Code blendet alle sichtbaren Symbolleisten aus.
Die globalen Variablen (definiert im allgemeinen
Deklarationsabschnitt) werden benötigt um später
die Symbolleisten wieder einzublenden.
' Globale Variablen
Public symstatus() As Boolean
Public symstatus_pos() As Integer' Alle
Symbolleisten ausblenden z.B. in auto_open
Prozedur
Dim x, anzleisten
anzleisten = Application.Toolbars.Count
ReDim symstatus(anzleisten + 2)
ReDim symstatus_pos(anzleisten + 2)
For x = 1 To anzleisten
symstatus(x) = Application.Toolbars(x).Visible
symstatus_pos(x) = Application.Toolbars(x).Position
Application.Toolbars(x).Visible = False
Next x
Und
nun der Code um die Symbolleisten wieder
einzublenden:
' Symbolleisten wieder einblenden z.B.
in auto_close Prozedur
Dim x, anzleisten
anzleisten = Application.Toolbars.Count
For x = 1 To anzleisten
Application.Toolbars(x).Visible = symstatus(x)
Application.Toolbars(x).Position =
symstatus_pos(x)
Next x
|
|
| Neue Symbolleiste erstellen |
Mit
folgendem Code wird eine neue Symbolleiste mit
Schaltknöpfen und kleinen Icons erstellt.
' Symbolleiste erstellen
Application.CommandBars.Add(Name:="Meine
Symbolleiste").Visible = True
' Elemente der Symbolleiste hinzufügen
Set my = Application.CommandBars("Meine
Symbolleiste")
Application.CommandBars("Meine Symbolleiste").Position
= msoBarTop
' Zwei neue Buttons hinzufügen
my.Controls.Add Type:=msoControlButton, Id:=1851
my.Controls.Add Type:=msoControlButton, Id:=1851
' Zuordnungen
Set graf = my.Controls(1)
' Icon das angezeigt werden soll
graf.FaceId = 64
graf.Style = msoButtonIconAndCaption
' Was auf dem Button steht. &1
bedeutet Aufruf mit ALT+1 möglich.
graf.Caption = "&1 - Button 1"
graf.TooltipText = "Dies ist Button 1"
' Welche Prozedur soll ausgeführt
werden ?
graf.OnAction = "daten_eingabe"
' Zuordnung Button 2
Set graf = my.Controls(2)
graf.FaceId = 276
graf.Style = msoButtonIconAndCaption
graf.Caption = "&2 - Button 2"
graf.TooltipText = "Dies ist Button 2"
graf.OnAction = "daten_ausgabe"Die neu
erstellte Symbolleiste wieder ausblenden und löschen.
' Symbolleiste löschen
Application.CommandBars("Meine Symbolleiste").Delete
|
|
| |
|
| Einträge aus einem Menü
entfernen |
Mit
nachfolgendem Code werden aus dem Datei-Menü von
Excel Einträge entfernt. Dabei wird immer vom
ersten Eintrag ausgegangen. Wird dieser entfernt,
so ist der nachfolgende Eintrag der Erste usw.
Mit Reset wird zuerst sichergestellt, daß das
Standardmenü eingestellt ist.
' Im Menü Datei Einträge
ausblenden
Application.CommandBars("File").Reset
Application.CommandBars("File").Controls(1).Delete
Application.CommandBars("File").Controls(1).Delete
Application.CommandBars("File").Controls(2).Delete
Application.CommandBars("File").Controls(2).Delete
Application.CommandBars("File").Controls(2).Delete
Application.CommandBars("File").Controls(2).Delete
Dadurch werden die Einträge "Neu",
"Öffnen...", "Speichern",
"Speichern unter...", "Als HTML
speichern...", "Seite einrichten..." aus dem
Datei Menü entfernt.Man kann es
sich aber auch einfacher machen und die Menüeinträge
direkt mit Namen ansprechen:
Application.CommandBars("File").Controls("Speichern
unter...").Delete
' die CommandBars-Indizies sind
leider in englisch und lauten: File, Edit,
View, Insert, Format, Tools, Data, Window, Help
' benutzerdefinierte Menüs sind natürlich nicht
berücksichtigt.
Soll
ein ganzer Menübaum (hier Datei) gelöscht
werden, dann muß es heißen:
Application.CommandBars("Worksheet
Menu Bar").Controls("Datei").Delete
' ihr findet, das ist verwirrend ?
Stimmt, ein dauernder Wechsel zwischen deutsch
und englisch.
Der
folgende Code stellt das Standardmenü "File"
wieder her.
Application.CommandBars("File").Reset
Sollen
alle Menüs zurückgesetzt werden:
Application.CommandBars("Worksheet Menu Bar").Reset
|
|
| Einträge
einem Menü hinzufügen |
Dem "Bearbeiten"-Menü
soll ein Menüeintrag am Ende der Liste hinzugefügt
werden und bei Aufruf soll die Sub-Prozedur
"Test" aufgerufen werden.
' Eintrag erzeugen
Sub erstellen()
Dim NeuerEintrag As Object
Set NeuerEintrag = CommandBars("Edit").Controls.Add
With NeuerEintrag
.Caption = "Eintrag"
.OnAction = "Test"
' FaceId fügt ein integrietes Excel-Icon
ein.
.FaceId = 23
End With
End SubNun das gleiche wie oben, aber den
Eintrag an der 3. Position einfügen und eine
zweite und dritte Ebene hinzufügen.
Sub erstellen()
Dim NeuerEintrag, Ebene2, Ebene3 As Object
Set NeuerEintrag = CommandBars("Edit").Controls.Add(Type:=msoControlPopup,
Before:=3)
With NeuerEintrag
.Caption = "Eintrag"
End With
Set Ebene2 = NeuerEintrag.Controls.Add(Type:=msoControlPopup)
With Ebene2
.Caption = "Zweite Ebene"
End With
Set Ebene3 = Ebene2.Controls.Add
With Ebene3
.Caption = "Dritte Ebene"
.FaceId = 99
.OnAction = "Test"
End With
Set Ebene3 = Ebene2.Controls.Add
With Ebene3
.Caption = "Noch ein Test"
.FaceId = 123
End With
End Sub
Wie
bereits links beschrieben stellt man mit
folgendem Code den Ursprungszustand wieder her:
Application.CommandBars("Edit").Reset
' oder
Application.CommandBars("Worksheet Menu Bar").Reset
|
|
| |
|
| Integrierte
Excel-Icons sichtbar machen |
Es befinden
sich Hunderte von Icons in Excel, die man über
die FaceId-Eigenschaft seinen Menüs hinzufügen
kann.
Sub ZeigeFaceIds()
Dim NeueSymbolleiste As CommandBar
Dim NeuerButton As CommandBarButton
Dim x, IconStart, IconStop As Integer
' Zuerst eine bereits vorhande
Symbolleiste löschen
On Error Resume Next
Application.CommandBars("FaceIds").Delete
On Error GoTo 0
' Neue Symbolleiste erstellen
Set NeueSymbolleiste = Application.CommandBars.Add(Name:="FaceIds",
temporary:=True)
NeueSymbolleiste.Visible = True
' Folgende Variablen ändern um
unterschiedliche Icons zu sehen
' Eine Differenz größer 500 dauert zu
lange !
IconStart = 1
IconStop = 500
For x = IconStart To IconStop
Set NeuerButton = NeueSymbolleiste.Controls.Add(Type:=msoControlButton,
Id:=2950)
With NeuerButton
.FaceId = x
.Caption = "FaceId =
" & x
End With
Next x
NeueSymbolleiste.Width = 600
End Sub |
| |
| Integrierte
Excel-Dialoge aufrufen |
Mit nachfolgendem Code wird
der "Öffnen"-Dialog angezeigt.
dialogAntw
= Application.Dialogs(xlDialogOpen).Show
' dialogAntw enthält danach den
Pfad- und Dateiangabe der geöffneten Datei.
' Weitere Konstanten zum öffnen von Dialogen
findet man in der VBA-Hilfe, wenn man nach "Dialogs-Objekt
(Auflistung)" sucht. |
| |
| OnAction mit
Parametern |
| In den zuvor vorgestellten
Prozeduren wurde die OnAction-Funktion zum
starten von Sub-Prozeduren verwendet. Wenn man
nun aber noch Parameter an die Sub-Prozedur
senden will, muß man zwischen den Anführungszeichen
noch Apostrophe setzen. ' Übergabestrings
müssen zwischen Doppel-Anführungszeichen
gesetzt werden !
.OnAction = " ' Prozedurname
" "String" ", 10, 100 '
"
' Die Leerzeichen dienen nur der Übersichtlichkeit
und müssen weggelassen werden.
Sub
Prozedurname(Textb As String, Zahl1 As Integer,
Zahl2 As Integer)
Dim Ausgabe As String
Ausgabe = Textb + vbCrLf + CStr(Zahl1) +
vbCrLf + CStr(Zahl2)
MsgBox Ausgabe
End Sub
|
|
| Kontextmenü
erstellen |
Kontextmenüs
erscheinen, wenn man die rechte Maustaste drückt.
Folgender Code erstellt ein Kontextmenü für
Arbeitsblätter. Es enthält zwei Menüebenen
(Hauptmenü mit Untermenüs)
Sub
Kontext()
Dim Ebene1, Ebene2 As CommandBarControl
With CommandBars("Cell")
' zuerst sicherstellen, daß das
Kontextmenü leer ist.
While .Controls.Count > 0
On Error Resume Next
.Controls(1).Delete
Wend
' 1. Ebene Nr.1 erstellen
Set Ebene1 = .Controls.Add(Type:=msoControlPopup,
temporary:=True)
Ebene1.Caption = "Freischichten"
' 2. Ebene - Freischichten
Set Ebene2 = Ebene1.Controls.Add(temporary:=True)
With Ebene2
.Caption
= "Freischicht"
.FaceId = 52
.OnAction = "a_fs"
End With
Set Ebene2 = Ebene1.Controls.Add(temporary:=True)
With Ebene2
.Caption = "½
Freischicht 1. Hälfte frei"
.FaceId = 330
End With
' 1. Ebene Nr.2 erstellen
Set Ebene1 = .Controls.Add(Type:=msoControlPopup,
temporary:=True)
Ebene1.Caption = "Urlaub"
' 2. Ebene - Urlaub
Set Ebene2 = Ebene1.Controls.Add(temporary:=True)
With Ebene2
.Caption = "Jahresurlaub"
.FaceId = 52
End With
'1. Ebene Nr.3 erstellen
Set Ebene1 = .Controls.Add(Type:=msoControlPopup,
temporary:=True)
Ebene1.Caption = "Krankheit/Kuren"
'usw.
Set Ebene1 = .Controls.Add(Type:=msoControlPopup,
temporary:=True)
Ebene1.Caption = "Seminare"
Set Ebene1 = .Controls.Add(Type:=msoControlPopup,
temporary:=True)
Ebene1.Caption = "Ausbildung"
Set Ebene1 = .Controls.Add(temporary:=True)
With Ebene1
.Caption = "Auswahl
löschen"
.FaceId = 47
.OnAction = "erase"
' nächste
Eigenschaft zeigt an, daß eine neue Gruppe
beginnt,
' somit wird eine
Trennlinie eingefügt.
.BeginGroup = True
End With
End With
End SubDas Kontextmenü wieder zurücksetzen.
Sub Kontexterase()
Application.CommandBars("Cell").Reset
End Sub
|
|