Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: dynamisches Ribbon - onLoad Problem

dynamisches Ribbon - onLoad Problem
04.07.2018 21:27:31
Jan
Hallo liebe VBA-Gemeinde,
da ist man doch eigentlich schon mit allem fertig, und dann ärgert Excel einen doch noch hintenrum: Mein Excel-Dokument verfügt über ein eigenes Ribbon, das zum Zwecke einer dynamischen Aktualisierung (je nach gewähltem Tabellenbltatt und Zelle sind Funktionen ausgegraut oder nicht sichtbar) über das onLoad Ereignis verfügt.
Der XML-Kopf (mit Custom UI Editor erstellt) sieht so aus:
customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad ="onLoad_X1"
In einem Standardmodul befindet sich dann der entsprechende Set-Befehl:
Public Sub onLoad_X1(Ribbon As IRibbonUI)
Set objRibbon = Ribbon
CurrentItemID = ""
End Sub
Soweit funktioniert das auch super. Mehr zufällig habe ich jetzt aber festgestellt, dass es zum Fehler kommt, wenn beim Öffnen der mit Ribbon versehenen Mappe bereits eine andere Excel-Mappe geöffnet ist. Dann meldet sich Excel gleich mit:
Das Makro "onLoad_X1" kann nicht ausgeführt werden.
Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar,
oder alle Makros wurden deaktiviert.
Ich bin ratlos, was ich mit dieser Meldung anfangen soll. Was macht Excel hier? Wird versucht, das Ribbon auch auf die bereits geöffnete Mappe anzuwenden (das natürlich nicht über das obige Makro onLoad_X1 verfügt). Das wäre doch ein sinnloses Verhalten.
Über einen Experten-Tipp würde ich mich sehr freuen.
Viele Grüße, Jan
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dynamisches Ribbon - onLoad Problem
05.07.2018 07:36:29
mumpel
Hallo!
Die Prozeduren für das onLoad-Ereignis sollten in jeder Datei einen eigenen Namen haben. In jeder Mappe den selben Prozedurennamen führt erfahrungsgemäß zum genannten Fehler.
Gruß, René
AW: dynamisches Ribbon - onLoad Problem
05.07.2018 10:46:42
PeterK
Hallo
Es liegt daran, das Excel ja bereits läüft und dein File zur laufenden Instance hinzugefügt wird. Es gibt zwei Möglichkeiten:
1) Du gibst eine Fehlermeldung aus und bittest den Benutzer Excel zu schliessen
2) Du restartest Dich in eine neue Instance

Private Sub Workbook_Open()
Dim oXL As Excel.Application
If Workbooks.Count > 1 Then
MsgBox "I want to be alone!  Re-opening myself in a new copy of Excel"
Set oXL = CreateObject("Excel.Application")
oXL.Visible = True
oXL.Workbooks.Open ThisWorkbook.FullName, ReadOnly:=False
AppActivate oXL.Caption
ThisWorkbook.Close False
End If
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dynamisches Ribbon in Excel: onLoad Probleme beheben


Schritt-für-Schritt-Anleitung

Um das Problem mit dem dynamischen Ribbon in Excel zu lösen, folge diesen Schritten:

  1. Erstelle das XML für das Ribbon: Verwende den Custom UI Editor und füge den onLoad-Parameter hinzu.

    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="onLoad_X1">
  2. Definiere die onLoad-Prozedur: Im Standardmodul deiner Arbeitsmappe erstelle die Funktion, die beim Laden des Ribbons aufgerufen wird.

    Public Sub onLoad_X1(Ribbon As IRibbonUI)
       Set objRibbon = Ribbon
       CurrentItemID = ""
    End Sub
  3. Prüfe auf bereits geöffnete Arbeitsmappen: Füge eine Überprüfung in das Workbook_Open-Ereignis ein, um sicherzustellen, dass keine anderen Instanzen von Excel geöffnet sind.

    Private Sub Workbook_Open()
       Dim oXL As Excel.Application
       If Workbooks.Count > 1 Then
           MsgBox "I want to be alone! Re-opening myself in a new copy of Excel"
           Set oXL = CreateObject("Excel.Application")
           oXL.Visible = True
           oXL.Workbooks.Open ThisWorkbook.FullName, ReadOnly:=False
           AppActivate oXL.Caption
           ThisWorkbook.Close False
       End If
    End Sub
  4. Testen: Speichere die Datei und öffne sie. Überprüfe, ob das Makro ohne Fehler ausgeführt wird.


Häufige Fehler und Lösungen

  • Fehler: Das Makro "onLoad_X1" kann nicht ausgeführt werden: Dieser Fehler tritt auf, wenn beim Öffnen der Arbeitsmappe bereits eine andere Excel-Instanz aktiv ist. Stelle sicher, dass du die oben beschriebene Überprüfung im Workbook_Open-Ereignis hinzugefügt hast.

  • Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar: Achte darauf, dass jede Arbeitsmappe ihre eigene onLoad-Prozedur hat. Verwende unterschiedliche Namen für die onLoad-Funktionen, um Konflikte zu vermeiden.


Alternative Methoden

Falls das Problem weiterhin besteht, kannst du folgende alternative Methoden ausprobieren:

  1. Verwende ein Modul zur Verwaltung des Ribbons: Anstatt die onLoad-Prozedur direkt im Ribbon zu definieren, kannst du ein spezielles Modul erstellen, das die Logik für das Ribbon verwaltet.

  2. Vermeide die Verwendung von onLoad: Wenn du die dynamische Anpassung des Ribbons nicht benötigst, kannst du das onLoad-Ereignis ganz weglassen und stattdessen die Sichtbarkeit der Steuerelemente direkt im VBA-Code steuern.


Praktische Beispiele

Hier sind zwei praktische Beispiele, um den Umgang mit dem Ribbon in Excel zu veranschaulichen:

  1. Beispiel für eine einfache Anpassung: Füge eine Schaltfläche hinzu, die bei bestimmten Bedingungen aktiviert oder deaktiviert wird:

    Public Sub onLoad_X1(Ribbon As IRibbonUI)
       Ribbon.InvalidateControl "myButton"
    End Sub
    
    Public Sub myButton_Click()
       MsgBox "Button clicked!"
    End Sub
  2. Dynamisches Ein- und Ausblenden: Du kannst die Sichtbarkeit von Steuerelementen basierend auf der aktuellen Auswahl steuern:

    Public Sub onLoad_X1(Ribbon As IRibbonUI)
       Dim isVisible As Boolean
       isVisible = (ActiveSheet.Name = "MeinTabellenblatt")
       Ribbon.InvalidateControl "myButton"
       Ribbon.InvalidateControl "myOtherButton"
    End Sub

Tipps für Profis

  • Nutze Debugging: Verwende Debug.Print in deinen Makros, um Informationen über den Status deiner Variablen und das Verhalten deiner Prozeduren zu erhalten.

  • Verwalte globale Variablen: Wenn du mehrere Ribbon-Steuerelemente hast, erwäge die Verwendung von globalen Variablen, um den Zustand zwischen den verschiedenen onLoad-Prozeduren besser zu verwalten.

  • Dokumentiere deinen Code: Halte deinen Code klar und gut dokumentiert, um späteren Problemen vorzubeugen und anderen zu helfen, deinen Code besser zu verstehen.


FAQ: Häufige Fragen

1. Warum funktioniert mein onLoad nicht?
Das kann passieren, wenn die Arbeitsmappe bereits in einer geöffneten Excel-Instanz geladen ist. Stelle sicher, dass du die Überprüfung im Workbook_Open-Ereignis implementiert hast.

2. Wie kann ich sicherstellen, dass mein Ribbon immer aktuell bleibt?
Verwende die Methode Ribbon.Invalidate, um das Ribbon zu aktualisieren, wenn sich der Zustand der Arbeitsmappe ändert, z. B. beim Wechsel zwischen verschiedenen Blättern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige