![]() |
Tipp 0359
|
Symbolleiste - eigene Grafiken integrieren -2-
|
 |
|
Autor/Einsender: Datum: |
|
Angie 29.01.2006 (Update) |
|
Entwicklungsumgebung: |
|
Excel 2000 |
|
|
Möchte man einer Symbolleisten-Schaltfläche (CommandBarButton) zur Laufzeit eine eigene Grafik zuweisen, so kann man wie in
Tipp Symbolleiste - eigene Grafiken integrieren - 1 - gezeigt, verfahren. Allerdings hat
der Tipp den Nachteil, dass eine Grafik-Datei "mitgeliefert" werden muss.
|
In Excel bietet es sich direkt an, die Grafiken für die Schaltflächen bereits zur Entwurfszeit als Shape auf einem
Tabellenblatt zu platzieren. Damit der Anwender das Tabellenblatt nicht so ohne Weiteres einsehen und/oder verändern kann, wird
anschließend die Visible-Eigenschaft des Tabellenblatts im VB-Editor manuell auf xlSheetVeryHidden gesetzt.
|
Nachdem die von Excel standardmäßig vergebenen Namen für Shapes nicht sehr aussagekräftig sind, wurden den Shapes aber
vor dem Ausblenden des Tabellenblatts zunächst per VBA ein sinnvoller Name gegeben. Dazu wird einfach nacheinander das entsprechende
Shape ausgewählt und z. B. mit dem Aufruf
|
|
|
Selection.Name = "picSmily"
|
|
|
der neue Name vergeben.
|
Aber auch in diesem Beispiel lässt es sich nicht vermeiden, dass die Grafik zunächst in die Zwischenablage kopiert und dann mit
PasteFace-Methode auf die entsprechende Schaltfläche eingefügt werden muss.
|
Anmerkung: Im Download befindet sich als Beispiel eine *.xls-Datei, obige Vorgehensweise kann aber auch in einem AddIn (*.xla)
angewandt werden, wobei dann die Visible-Eigenschaft des Tabellenblatts nicht verändert werden muss, da die Tabellenblätter in
einem AddIn für den Anwender eh nicht sichtbar sind.
|
|
Code im Codebereich von DieseArbeitsmappe |
|
|
Option Explicit
Private Const mc_CBAR_NAME As String = "VB-fun-Symbolleiste_2"
Private Const mc_ICON_SHEETNAME As String = "CBarPictures"
Private Sub Workbook_Open()
Call CreateCommandBar
ThisWorkbook.Saved = True
End Sub
Private Sub CreateCommandBar()
Dim objCBar As Office.CommandBar
Dim objCBBtn As Office.CommandBarButton
Dim i As Integer
Dim objWks As Worksheet
Call DeleteCommandBar
On Error GoTo err_CreateCommandBar
Set objCBar = Application.CommandBars.Add( _
Name:=mc_CBAR_NAME, Temporary:=True)
With objCBar
.Visible = True
.Position = msoBarTop
.Protection = msoBarNoCustomize
End With
For i = 1 To 3
objCBar.Controls.Add Type:=msoControlButton
With objCBar.Controls(i)
.Style = msoButtonIcon
.Tag = gc_CBARBTN_TAG & CStr(i)
.OnAction = "MyOnActionMacro"
End With
Next
Set objWks = ThisWorkbook.Worksheets(mc_ICON_SHEETNAME)
objWks.Shapes("picSmilyHappy").CopyPicture
objCBar.Controls(1).PasteFace
objWks.Shapes("picSmilyWink").CopyPicture
objCBar.Controls(2).PasteFace
objWks.Shapes("picThumbUp").CopyPicture
With objCBar.Controls(3)
.Style = msoButtonIconAndCaption
.Caption = "Geschafft !"
.PasteFace
.BeginGroup = True
End With
exit_Sub:
On Error Resume Next
Set objWks = Nothing
Set objCBBtn = Nothing
Set objCBar = Nothing
On Error GoTo 0
Exit Sub
err_CreateCommandBar:
MsgBox "Es ist ein Fehler bei der Erstellung der neuen" & _
vbCrLf & "Symbolleiste aufgetreten !", vbExclamation, _
Title:="Fehler beim Erstellen der Symbolleiste"
Call DeleteCommandBar
Resume exit_Sub
End Sub
Private Sub DeleteCommandBar()
On Error Resume Next
Application.CommandBars(mc_CBAR_NAME).Delete
On Error GoTo 0
End Sub
|
|
|
Soll die Symbolleiste nur dann sichtbar sein, wenn die Arbeitsmappe aktiviert ist, mit der die Symbolleiste erstellt wurde, ist weiterer Code
im Codebereich von DieseArbeitsmappe notwendig. Mit den Ereignissen Workbook_WindowActivate und
Workbook_WindowDeActivate wird das Ein- und Ausblenden der Symbolleiste "gesteuert".
|
|
|
Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
Call EnableCommandBar(True)
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
Call EnableCommandBar(False)
End Sub
Private Sub EnableCommandBar(ByVal Enabled As Boolean)
On Error Resume Next
Application.CommandBars(mc_CBAR_NAME).Enabled = Enabled
On Error GoTo 0
End Sub
|
|
|
Code im Codebereich eines Moduls |
|
Beim Hinzufügen der Schaltfläche zur Symbolleiste wird die OnAction-Eigenschaft zugewiesen, also der Name des Makros,
das ausgeführt wird, wenn der Benutzer auf das Symbolleisten-Steuerelement klickt.
In diesem Beispiel wird im OnAction-Makro für die jeweilige Schaltfläche lediglich eine MsgBox angezeigt.
|
|
|
Option Explicit
Public Const gc_CBARBTN_TAG As String = "MyButton"
Public Sub MyOnActionMacro()
If Not Application.CommandBars.ActionControl Is Nothing Then
Select Case Application.CommandBars.ActionControl.Tag
Case gc_CBARBTN_TAG & "1"
MsgBox "Du hast die 1. neue Schaltfläche geklickt!", _
vbOKOnly + vbInformation, Title:="VB-fun-Demo"
Case gc_CBARBTN_TAG & "2"
MsgBox "Du hast die 2. neue Schaltfläche geklickt!", _
vbOKOnly + vbInformation, Title:="VB-fun-Demo"
Case gc_CBARBTN_TAG & "3"
MsgBox "Du hast die 3. neue Schaltfläche geklickt!", _
vbOKOnly + vbInformation, Title:="VB-fun-Demo"
Case Else
End Select
End If
End Sub
|
|
|
|
|
Windows-Version |
95 |
 |
|
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
Excel-Version |
95 |
 |
|
97 |
 |
|
2000 |
 |
|
2002
(XP) |
 |
|
2003 |
 |
|
2007 |
 |
|
2010 |
 |
|
|
|
Download (18,3 kB)
|
Downloads bisher: [ 1265 ]
|
|
|