Anzeige
Archiv - Navigation
1900to1904
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

Ribbon-Leiste Laufzeitfehler 91

Ribbon-Leiste Laufzeitfehler 91
17.10.2022 14:34:15
Dirk
Hallo Profis,
brauche bei dem folgenden Problem eure Hilfe.
Ich habe mir in einer Datei eine Ribbon-Leiste mit drei Button erstellt. Beim Start der Datei werden Button 1 und 3 aktiviert und Button 2 deaktiviert. Soweit so gut, klappt auch. Nun soll Button 2 aktiviert werden, wenn Button 1 angeklickt wurde. In einem Beitrag aus 2015 (von Rene) habe ich dazu einen passenden Code gefunden und auf meine Datei angepasst. Und genau da beginnt das Problem. Beim Anklicken von Button 1 erscheint immer der Laufzeitfehler 91 an der Position "objRibbon.Invalidate". Nur warum weiß ich nicht. Da brauche ich euren Rat.
Der Code lautet wie folgt:
Option Explicit
Public objRibbon As IRibbonUI
Public btnSpeichernundExportieren As Boolean
Public btnExportinPDF As Boolean
Public btnSchließenohneSpeichern As Boolean

Public Sub onload(ribbon As IRibbonUI)
Set objRibbon = ribbon
End Sub
'-----------------------------
'** B1.0
'** Schaltfläche: ID= But1
'-----------------------------

Public Sub onAction_Speichern_und_Exportieren(control As IRibbonControl)
btnSpeichernundExportieren = True
objRibbon.Invalidate
'Speichern_und_Exportieren   '** B1.1 Prozedur in Modul 2
End Sub

Public Sub getEnabled_Speichern_und_Exportieren(control As IRibbonControl, ByRef enabled)
If btnSpeichernundExportieren Then enabled = True
End Sub
'-----------------------------
'** B2.0
'** Schaltfläche: ID= But2
'-----------------------------

Public Sub onAction_Export_in_PDF(control As IRibbonControl)
btnExportinPDF = True
objRibbon.Invalidate
'PDF_Export                  '** B2.1 Prozedur in Modul 2
End Sub

Public Sub getEnabled_Export_in_pdf(control As IRibbonControl, ByRef enabled)
If btnExportinPDF Then enabled = True
End Sub
'-----------------------------
'** B3.0
'** Schaltfläche: ID= But3
'-----------------------------

Public Sub onAction_Schließen_ohne_Speichern(control As IRibbonControl)
btnSchließenohneSpeichern = True
objRibbon.Invalidate
'Schließen_ohne_Speichern    '** B3.1 Prozedur in Modul 2
End Sub

Public Sub getEnabled_Schließen_ohne_Speichern(control As IRibbonControl, ByRef enabled)
If btnSchließenohneSpeichern Then enabled = True
End Sub
Danke im Voraus
Gruß
Dirk

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ribbon-Leiste Laufzeitfehler 91
17.10.2022 15:20:29
Nepumuk
Hallo Dirk,
da ist das Ribbon-Object verloren gegangen. Das passiert, wenn du im Code etwas änderst, beim Debuggen eines Fehlers auf Abbrechen klickst oder eine ActiveX-Control zur Laufzeit einfügst. Es ist aber möglich dieses Objekt wiederherzustellen.

Option Explicit
Option Private Module
#If Win64 Then
Public Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef destination As Any, _
ByRef source As Any, _
ByVal length As Long)
#Else
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef destination As Any, _
ByRef source As Any, _
ByVal length As Long)
#End If
Private Const RIBBON_NAME = "Ribbon"
Public gobjRibbon As IRibbonUI
Private Sub onLoad(ByRef probjRibbon As IRibbonUI)
Set gobjRibbon = probjRibbon
ThisWorkbook.Names.Add Name:=RIBBON_NAME, RefersTo:=CStr(ObjPtr(probjRibbon)), Visible:=False
End Sub
#If Win64 Then
Private Function GetRibbon(ByVal pvlngRibbonPointer As LongPtr) As IRibbonUI
#Else
Private Function GetRibbon(ByVal pvlngRibbonPointer As Long) As IRibbonUI
#End If
Dim objRibbon As IRibbonUI
Call CopyMemory(objRibbon, pvlngRibbonPointer, LenB(pvlngRibbonPointer))
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
Public Sub RefreshRibbon(Optional ByVal opvvntControlID As Variant)
Dim objName As Name
If gobjRibbon Is Nothing Then
For Each objName In ThisWorkbook.Names
If objName.Name = RIBBON_NAME Then
#If VBA7 Then
Set gobjRibbon = GetRibbon(CLngPtr(Mid$(objName.RefersTo, 2)))
#Else
Set gobjRibbon = GetRibbon(CLng(Mid$(objName.RefersTo, 2)))
#End If
Exit For
End If
Next
Set objName = Nothing
If IsMissing(opvvntControlID) Then
Call gobjRibbon.Invalidate
Else
Call gobjRibbon.InvalidateControl(ControlID:=opvvntControlID)
End If
Else
If IsMissing(opvvntControlID) Then
Call gobjRibbon.Invalidate
Else
Call gobjRibbon.InvalidateControl(ControlID:=opvvntControlID)
End If
End If
End Sub
Du musst dann zum aktualisieren des Ribbons an Stelle von "objRibbon.Invalidate" die Prozedur "RefreshRibbon" aufrufen.
Gruß
Nepumuk
Anzeige
AW: Ribbon-Leiste Laufzeitfehler 91
18.10.2022 08:30:10
Dirk
Hallo Nepumuk,
zuerst einmal danke für Deine Antwort. Was mache ich mit dem von Dir eingefügten Code? Muss der als fester Bestandteil mit in die Datei oder soll dieser einmal zur Wiederherstellung ausgeführt werden?
Danke
Gruß
Dirk
AW: Ribbon-Leiste Laufzeitfehler 91
18.10.2022 09:28:03
Nepumuk
Hallo Dirk,
das soll fester Bestandteil deiner Mappe werden. Im Nachhinein bringt er nichts.
Gruß
Nepumuk

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige