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

CommandBarControl - Welcher Button ist gedrückt ?

CommandBarControl - Welcher Button ist gedrückt ?
22.07.2003 12:41:08
Michael Brüggemann
Liebe Excel Gemeinde,
und schon habe ich das nächste Problem mit den CommandBarControls:
Ich möchte die gleiche Subroutine für mehrere Buttons benutzen (OnACtion = "DieselbeRoutine"). Das klappt auch wunderbar, nur muss ich in der Routine dann feststellen, welcher der Buttons sie angestartet hat. Mein Versuch über die .State Eigenschaft geht leider fehl (Msgbox meldet, dass .State immer gleich 0 sei).
Dim objTargetMonitorBar As CommandBar
Dim objButton As CommandBarControl

Set objTargetMonitorBar = Application.CommandBars("Zielwert Monitor")

For Each objButton In objTargetMonitorBar.Controls
MsgBox objButton.State
Next objButton
Bin dankbar für jede Idee, welche Eigenschaft sonst mir die Information gibt.
CIAO
Michael

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CommandBarControl - Welcher Button ist gedrückt ?
22.07.2003 13:57:18
K.Rola
Hallo Michael,
da wirst du wohl ein Klassenmodul brauchen:
''In ein Standardmodul
Option Explicit
Option Base 1
Public Const b As Byte = 5 'Anzahl der Button
Public arrButton(b) As New clsMenu
Public Const CBNAME As String = "K.Rola"
Private M As clsMenu
''-------------------------------------------------------------
Sub MenuLeiste_erzeugen()
Dim objCB As CommandBar
On Error Resume Next
CommandBars(CBNAME).Delete
On Error GoTo 0
Set objCB = CommandBars.Add(Name:=CBNAME)
Set M = New clsMenu
M.MenuLeiste
With objCB
.Position = msoBarFloating
.Visible = True

End With
End Sub

''--------------------------------------------------------------
Sub setten()
Dim i As Byte
For i = 1 To b
Set arrButton(i).cmdButton = CommandBars(CBNAME).controls(i)
Next
End Sub

''--------------------------------------------------------------
''In ein Klassenmodul, das zwingend clsMenu heißen muss--------
''
''Klassenmodul: clsMenu
''
''-------------------------------------------------------------
Option Explicit
Public WithEvents cmdButton As CommandBarButton
Sub MenuLeiste()
Dim x As Byte
With CommandBars(CBNAME)
For x = 1 To b
Set cmdButton = .controls.Add(Type:=msoControlButton)
With cmdButton
.Style = msoButtonIconAndCaption
.Caption = "Button" & x
.Width = 100
.FaceId = 29
.Tag = x
.BeginGroup = True
End With
Next
End With
Set cmdButton = Nothing
Call setten
End Sub


Private Sub cmdButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
''Hier wird das OnAction der Button ausgeführt
MsgBox Ctrl.Caption
End Sub

Ich denke, das Prinzip wird klar.
Gruß K.Rola

Anzeige
AW: CommandBarControl - Welcher Button ist gedrückt ?
22.07.2003 22:13:42
Michael Brüggemann
Hallo K.Rola,
danke für Deine Wahnsinnsmühe !
Ich habe Deine Zeilen importiert. Leider erhalte ich einen Kompilierungsfehler "Objekt beinhaltet keine Automatisierungsereignisse" für die Zeile "Public WithEvents cmdButton As CommandBarButton".
Da ich leider mit Klassenmoduln bis jetzt keine Erfahrung habe, werde ich mich morgen früh in Ruhe damit beschäftigen.
Vielen Dank nochmal
Michael

AW: CommandBarControl - Welcher Button ist gedrückt ?
22.07.2003 22:41:11
K.Rola
Hallo Michael,
das war keine Mühe, da ich deratige Sachen ständig nutze, also nur
kopieren musste.
Hast du das Klassenmodul in clsMenu umbenannt? Ansonsten wüßte ich nicht,
warum das bei dir nicht klappen sollte.
Gruß K.Rola

Anzeige
AW: CommandBarControl - Welcher Button ist gedrückt ?
23.07.2003 10:19:51
Michael Brüggemann
Hallo K.Rola,
ich habe das Problem über einen anderen Weg (ohne Klassenmodul) lösen können.
In der Routine, die der Button aufruft (.OnAction), kann ich das Array Application.Caller prüfen. Dieses enthält in Application.Caller(1) den Index des Objektes im CommandBar und in Application.Caller(2) den Namen der CommandBar selber.

Sub WerHatMichGerufen()
MsgBox Application.Caller(1)  ' Index des Buttons im CommandBar
MsgBox Application.Caller(2)  ' Name des CommandBar
End Sub

Danke für Deine Hilfe
Michael

OT @ k.rola
22.07.2003 23:21:25
Boris
Hi k.rola,
du hast Post (bin jetzt aber mal wieder für ca. ne Stunde weg).
Gruß Boris

Anzeige
AW: CommandBarControl - Welcher Button ist gedrückt ?
22.07.2003 12:47:39
Michael Scheffler
Hi,
ruf doch verschiedene Routinen auf, die dann ihrerseits mit Argument Deine Grundfunktion aufrufen.
Gruß
Micha

AW: CommandBarControl - Welcher Button ist gedrückt ?
22.07.2003 13:42:27
Michael Brüggemann
Hallo Micha,
das ist zwar möglich, da ich die Controls jedoch dynamisch erzeuge und somit die Anzahl meiner Controls jedoch variiert (zwischen 1 und n), möchte ich nicht für n Buttons n Routinen in meinen Source einbauen.
Trotzdem danke für die schnelle Antwort
Michael

Commandbars.ActionControl (o.T.)
22.07.2003 12:44:15
xXx

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige