Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
732to736
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
732to736
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hinzufügen von Popup-Kontrollen zu Befehlsleisten

Hinzufügen von Popup-Kontrollen zu Befehlsleisten
Popup-Kontrollen
Hallo Allerseits,
ich möchte einer Befehlsleiste ein Popup (oder Dropdown) - Steuerelement hinzufügen. Leider funktioniert bei mir nur "msoControlPopup", damit bekomme ich eine Schaltfläche nur für Text. Ich möchte vorzugsweise eine Schaltfläche mit Symbol, aber beim Einfügen bekomme ich immer einen Laufzeitfehler (Nr. 5, Ungültiger Prozeduraufruf oder ungültiges Argument).
Ich habe verschiedene Steuerelemente ausprobiert, die mso-Konstanten sind im Objektkatalog vorhanden und ich sehe beim debuggen auch ihren Wert, außerdem habe ich auch mit den Variablendeklarationen herumgespielt, alles erfolglos.
Wäre toll, wenn jemand eine Idee hätte.

Sub BefehlsLeisteTest()
Dim LeistenName As String
Dim IniBlatt As Variant, KnopfElement As Variant, PopupElement As Variant, UnterElement As Variant
Set IniSheet = Workbooks("DateiMitCode.xls").Worksheets("BlattMitBild")
LeistenName = "TestLeiste"
' Löschen der Befehlsleiste, falls bereits vorhanden
On Error Resume Next
CommandBars(LeistenName).Delete
On Error GoTo 0
' Hinzufügen einer neuen Befehlsleiste
Application.CommandBars.Add (LeistenName)
' Hinzufügen eines Knopfs zur neuen Befehlsleiste
IniBlatt.Shapes("Bild 1").CopyPicture
With Application.CommandBars(LeistenName)
Set KnopfElement = .Controls.Add
End With
With KnopfElement
.Style = msoButtonAutomatic
.PasteFace
.OnAction = "MakroStart"
.Caption = "Knopf 1"
End With
' Hinzufügen eines Popup - Steuerelementes zur neuen Befehlsleiste
IniBlatt.Shapes("Bild 1").CopyPicture
With Application.CommandBars(LeistenName)
Set PopupElement = .Controls.Add(Type:=msoControlPopup)
'       Set PopupElement = .Controls.Add(Type:=msoControlSplitButtonPopup)
'       Set PopupElement = .Controls.Add(Type:=msoControlSplitButtonMRUPopup)
'       Set PopupElement = .Controls.Add(Type:=msoControlButtonDropdown)
End With
With PopupElement
.Caption = "Popup-Element"
'       .Style = msoButtonAutomatic
'       .PasteFace
End With
' Hinzufügen eines Knopfs zum Popup - Steuerelement
IniBlatt.Shapes("Bild 1").CopyPicture
Set UnterElement = PopupElement.Controls.Add
With UnterElement
.Style = msoButtonAutomatic
.PasteFace
.OnAction = "MakroStart"
.Caption = "SubKnopf 1"
End With
' Anzeigen der Befehlsleiste
Application.CommandBars(LeistenName).Visible = True
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Hinzufügen von Popup-Kontrollen zu Befehlsleisten
17.02.2006 18:10:55
Popup-Kontrollen
Hallo,
ein Popup mit Icon steht in VBA nicht zur Verfügung. Nur ein kleiner Teil der Controls
steht unter VBA zur Verfügung, welche das im Einzelnen sind, steht auch in der Hilfe.
Gruß K.Rola
AW: Hinzufügen von Popup-Kontrollen zu Befehlsleisten
17.02.2006 18:34:53
Popup-Kontrollen
Hallo ?,
ich bin nicht sicher, ob ich dein Problem richtig verstehe;
meinst du etwas in dieser Art?

Sub ShowPaul()
On Error Resume Next
Dim cb As CommandBar
Dim titel$
Application.CommandBars("paul").Delete
titel = "paul"
Set cb = Application.CommandBars.Add(Name:=titel, Position:=msoBarPopup)
cb.Controls.Add Type:=msoControlButton, temporary:=True
cb.Controls(1).FaceId = 59
cb.Controls(1).Caption = "Hier ist Paul"
cb.ShowPopup x:=150, y:=245
End Sub

fG
Rolf
Anzeige
AW: Hinzufügen von Popup-Kontrollen zu Befehlsleis
17.02.2006 19:14:44
Popup-Kontrollen
@ K.Rola
Danke für den Hinweis, ich werde mal suchen.
@ Rolf
Der Hinweis mit "FaceId" ist gut, vielen Dank dafür. Mein Problem ist, daß ich eigentlich nur ein Icon (ohne Caption) haben möchte, aber so geht's auch. Bleibt noch die Frage, ob ich ein eigenes Bild als Face benutzen könnte.
Schöne Grüße
pvmorris
AW: Hinzufügen von Popup-Kontrollen zu Befehlsleis
17.02.2006 19:18:02
Popup-Kontrollen
Hallo,
ein eigene Icons kannst du verwenden, nicht aber mit FaceID. Du kannst z.B. ein
Bild aus einer Tabelle kopieren.
Gruß K.Rola
AW: Hinzufügen von Popup-Kontrollen zu Befehlsleis
17.02.2006 19:54:44
Popup-Kontrollen
Hi K.Rola,
show doch mal ein example ;-)
hG
Rolf
AW: Hinzufügen von Popup-Kontrollen zu Befehlsleis
17.02.2006 21:00:00
Popup-Kontrollen
Hallo,
Beispieldatei:
https://www.herber.de/bbs/user/31165.xls
Ab Excel XP gibt es auch noch andere Möglichkeiten.
Gruß K.Rola
Anzeige
Wer ist denn...
17.02.2006 21:17:38
Rolf
..der fiese Typ?
Hi K.Rola,
herzlichen Dank für den Anschauungsunterricht.
Schönen Abend
Rolf
AW: Wer ist denn...
17.02.2006 21:38:45
K.Rola
..der fiese Typ?
Ich finde das Ampelmännchen gar nicht so fies!
Gruß K.Rola
Danke, aber...
18.02.2006 19:12:29
pvmorris
Hallo nochmal,
vielen Dank für die Hilfe bisher und das Beispiel.
Leider erzeugt das Beispiel von K. Rola Buttons, kein Popup's wie bei Rolf und wie ich sie gerne hätte.
Ich habe in der Hilfe bei "types" die von mir ausprobierten Steuerelemente gefunden (die auskommentierten Set - Anweisungen in dem von mir geposteten Code). Es funktioniert nur msoControlPopup, der Rest liefert den besagten Laufzeitfehler (obwohl sie in der Hilfe aufgeführt sind). Mit msoControlPopup funktioniert aber nicht PasteFace und ich kann kein eigenes Bild draufpacken.
Deshalb nochmal: die anderen Typen (mso - Konstanten) sind vorhanden, funktionieren aber nicht mit der Add-Anweisung, msoControlPopup funktioniert zwar, ich kann aber nur ein eingebautes Icon verwenden. Wie kriege ich die anderen an's funktionieren (wenigstens um zu sehen, ob sie mit PasteFace funktionieren)?
Oder alternativ: wie schiebe ich Excel ein neues Icon unter, das ich mit FaceId zuweisen könnte?
Schöne Grüße,
pvmorris
Anzeige
AW: Danke, aber...
18.02.2006 19:40:25
K.Rola
Hallo,
das Beispiel kam auf Wunsch von Rolf, war also auch für ihn bestimmt.
Das einzige Control in VBA, das ein Icon akzeptiert, ist der Button.
Eigene Icons haben keine FaceId, es geht in deiner Version zur Laufzeit also nur
mit CopyFace.
Gruß K.Rola
AW: Danke, aber...
18.02.2006 19:52:12
pvmorris
Hallo K. Rola,
ich bitte um Entschuldigung wegen des Mißverständnisses über das Beispiel.
Schade, wenn ich keine Icons mit den anderen Controls verwenden kann, dann muß ich wohl mit Caption arbeiten. Besteht vielleicht die Möglichkeit, Icons in Excel einzubauen, so daß sie eine FaceId bekommen?
Schöne Grüße,
pvmorris
Anzeige
AW: Danke, aber...
18.02.2006 19:57:47
K.Rola
Hallo,
"Besteht vielleicht die Möglichkeit, Icons in Excel einzubauen, so daß sie eine FaceId bekommen?"
Hatte ich eigentlich schon gepostet, nein, das geht nicht.
Gruß K.Rola
AW: Danke, aber...
19.02.2006 17:06:39
pvmorris
Hatte ich wohl nicht richtig verstanden. Vielen Dank nochmal.
FaceID's
19.02.2006 09:43:16
Rolf
Hallo pvmorris,
mit dem folgenden abgekupferten Code erzeugst du Symbolleisten,
die alle FaceIDs anzeigen.
Bisher bin ich da noch immer fündig geworden.
hG
Rolf
Option Explicit
'Symbolleisten mit Schaltflächensymbolen anlegen

Sub DisplayAllFaceIDs()
'Erzeugt mehrere Symbolleisten, mit denen alle verfügbaren 
'Schaltflächensymbole angezeigt werden, 250 Symbole pro Leiste
Const MaxFaces = 250
Dim fDone As Boolean
Dim IDStart As Long
Dim IDEnd As Long
Dim CmdBar As CommandBar
Dim k As Long
Dim aBtn As CommandBarButton
Dim tLeft As Long
Dim tTop As Long
On Error Resume Next
IDStart = 0
IDEnd = MaxFaces - 1
tLeft = 50
tTop = 100
fDone = False
Do
Set CmdBar = CommandBars.Add(Position:=msoBarFloating, MenuBar:=False, temporary:=False)
With CmdBar
.Left = tLeft
.Top = tTop
.Visible = True
For k = IDStart To IDEnd
Application.StatusBar = "Hinzufügen von Symbol: " & k
Set aBtn = .Controls.Add(Type:=msoControlButton, temporary:=False)
aBtn.FaceId = k
aBtn.OnAction = "icon_copy"
If Err.Number = 0 Then
aBtn.TooltipText = "ID-Nummer: " & k
'Wenn alle Symbolleisten erstellt werden sollen,
'die folgende Abfrage auf Kommentar setzen:
If k = 249 Then
fDone = True
Exit For
End If
Else
fDone = True
IDEnd = k - 1
aBtn.Delete
Exit For
End If
Next k
End With
CmdBar.Name = "Symbole " & IDStart & " bis " & IDEnd
CmdBar.Width = 600
If Not fDone Then
IDStart = IDEnd + 1
IDEnd = IDStart + (MaxFaces - 1)
tLeft = tLeft + 10
tTop = tTop + 20
End If
Loop Until fDone
Application.StatusBar = False
End Sub

Anzeige
AW: FaceID's
19.02.2006 17:11:35
pvmorris
Hallo Rolf,
nicht schlecht, vielen Dank. Da wird sich schon was finden lassen.
Gruß,
pvmorris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige