Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1400to1404
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
Inhaltsverzeichnis

DropDown-Liste mit Tabellennamen füllen (Ribbon)

DropDown-Liste mit Tabellennamen füllen (Ribbon)
14.01.2015 11:57:58
Erik Kaubitzsch

Liebe Gemeinde,
ich befasse mich derzeit mit Ribbons bzw. den Multifunktionsleisten. Alles ist super chic, ich bin richtig glücklich mich damit gerade zu befassen, weil die Ribbons einige technische Probleme beheben, mit denen ich mich immer wieder konfrontiert sehe.
Ein kleines Problem habe ich nun trotzdem, bei dessen Lösung euch um Hilfe bitte.
Ich habe eine Dropdown-Liste in einem benutzerdefinierten Ribbon. Ziel ist es, diese Dropdown-Liste mit den Namen der Tabellenblätter zu füllen, die einen bestimmten CodeNamen(!) haben und sichtbar sind.
Leider klappt es mit meinem bisherigen Weg nicht, diese Aufgabe zu lösen.
Die Definition in der customUI.xml sieht folgendermaßen aus:
Code in der XML-Datei


[dropDown label="Sachkonten" id="ddnAccounts" onAction="myNavigation" getItemLabel=" _
get_account_label" getItemID="get_account_ID" getItemCount="count_accounts" sizeString=" _
xxxxxxxxxxxxxxxxxxxx" supertip="Sachkonten enthalten die Rechnungseinträge" screentip="Wählen Sie bitte das Sachkonto, das Sie sehen wollen"/]
(Ich musste die spitzen Klammern durch eckige ersetzen, da der XML-Code nicht in der Vorschau angezeigt wurde)
Insgesamt referenziere ich auf vier Prozeduren:
Code im VBA-Projekt/Modul "RibbonCallbacks"

Option Explicit
Private arrAcounts() as string
Public objRibbon As IRibbonUI
Public Sub onLoad_Test(ribbon As IRibbonUI)
Set objRibbon = ribbon
End Sub
'Callback for ddnAccounts onAction
Sub myNavigation(control As IRibbonControl, id As String, index As Integer)
'Die Bedeutung dieser Prozedur ist mir bekannt.
Debug.Print "id: " & id
Debug.Print "index: " & index
End Sub
'Callback for ddnAccounts getItemCount
Sub count_accounts(control As IRibbonControl, ByRef returnedVal)
Dim thisWorksheet As Worksheet
Dim n As Long
n = 0
'Alle Tabellen zählen, die die Bedingungen erfüllen
For Each thisWorksheet In ThisWorkbook.Worksheets
If InStr(1, thisWorksheet.CodeName, "Account") > 0 And thisWorksheet.Visible =  _
xlSheetVisible Then
n = n + 1
End If
Next thisWorksheet
'Dann die Tabellennamen in ein Array schreiben, das modulweit verfügbar ist.
ReDim arrAccounts(n - 1)
For Each thisWorksheet In ThisWorkbook.Worksheets
If InStr(1, thisWorksheet.CodeName, "Account") > 0 And thisWorksheet.Visible =  _
xlSheetVisible Then
arrAccounts(n) = thisWorksheet.Name
n = n + 1
End If
Next thisWorksheet
'Anzahl der Tabellenblätter zurückgeben
returnedVal = n
End Sub
'Callback for ddnAccounts getItemLabel
Sub get_account_label(control As IRibbonControl, index As Integer, ByRef returnedVal)
'Anhand des Parameters "index" das Array mit den Tabellennamen auslesen
returnedVal = arrAccounts(index)
End Sub
'Callback for ddnAccounts onChange
Public Sub OnChangeCombobox(control As IRibbonControl, text As String)
'Wählt das Tabellenblatt aus
ThisWorkbook.Worksheets(text).Activate
End Sub

Leider funktioniert das Befüllen nicht und ich habe mit mehreren debug.print auch schon geschaut, ob die Prozeduren überhaupt ausgelöst werden. Bisher ohne Erfolg. Da ich wirklich neu in diesem Thema bin, freue ich mich über eine kurze Erläuterung zur Lösung oder zur herangehensweise.
Ich danke euch für eine hilfreiche Rückmeldung.
Gruß
Erik

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
DropDown-Liste mit Tabellennamen füllen (Ribbon)
17.01.2015 10:10:22
Hajo_Zi
Hallo Erik,
ich mache es so.
'Copyright 2007-2009 by Melanie Breden. Excel-VBA Codebook
Option Explicit                                     ' Variablendefinition erforderlich
'Public objRibbon As IRibbonUI
'Rem Callback for customUI.onLoad
'Public Sub rx_onLoad(ribbon As IRibbonUI)
'    Set objRibbon = ribbon
'End Sub
Rem Sub wird beim ersten Anklicken des Pfeils der ComboBox
Rem und dann bei jeder Neuinitialisierung ausgeführt
Rem Callback for cboCombo getItemCount
Public Sub cboCombo_getItemCount(control As IRibbonControl, ByRef returnedVal)
Rem Anzahl Einträge festlegen (Monate)
returnedVal = ThisWorkbook.Worksheets.Count
End Sub
Rem Sub wird nach Wert der Variable returnedVal aus getItemCount n mal durchlaufen
Public Sub cboCombo_getItemID(control As IRibbonControl, index As Integer, ByRef id)
Rem Eindeutiger Index je Eintrag festlegen, der wievielte Eintrag, Index beginnt mit 0
id = index
End Sub
Rem Callback for cboCombo getItemLabel
Public Sub cboCombo_getItemLabel(control As IRibbonControl, index As Integer, ByRef Label)
Rem Beschriftung je Eintrag festlegen
If ThisWorkbook.Worksheets(index + 1).Visible Then
Label = ThisWorkbook.Worksheets(index + 1).Name
Else
Label = "ausgeblendet"
End If
End Sub
Rem Callback für cboCombo onChange
Public Sub cboCombo_onChange(control As IRibbonControl, text As String)
Rem Tabele aktivieren
If text <> "ausgeblendet" Then ThisWorkbook.Worksheets(text).Activate
End Sub


Anzeige
AW: DropDown-Liste mit Tabellennamen füllen (Ribbon)
17.01.2015 14:56:07
Erik Kaubitzsch
Hallo Hajo,
vielen Dank. Dein Lösungsvorschlag erscheint mir plausibel. Eine Frage habe ich noch:
Gilt dein Code analog auch für das DropDown-Steuerelement (mit angepassten Callbacks)?
Ich finde es irgendwie schade, dass man in den Callback-Prozeduren keine Schleifen durchlaufen lassen kann.
Vielen Dank dir!
Gruß
Erik

DropDown-Liste mit Tabellennamen füllen (Ribbon)
17.01.2015 14:57:52
Hajo_Zi
Hallo Erik,
keine Ahnung, es ist nicht mein Code, wie auch in meinem Beitrag steht.
Gruß Hajo

AW: DropDown-Liste mit Tabellennamen füllen (Ribbon)
17.01.2015 15:10:33
Erik Kaubitzsch
Hallo Hajo,
ok, danke. Probieren geht über Studieren.
Gruß
Erik

Anzeige

344 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige