ich brauche Hilfe bei der Einrichtung einer Checkbox im Ribbon.
Bei der Anweisung objRibbon.Invalidate bekomme ich eine Fehlermeldung. Im Forum habe ich dann eine Anleitung gefunden, wie man diesen Fehler umgehen kann. Code s. unten.
Wenn ich den Code in eine "jungfräuliche" Exceltabelle einsetze, funktioniert das auch. Aber eingesetzt in mein Makro bekomme ich wieder den Fehler
"Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt."
Hat jemand eine Idee, was ich ändern kann/muss, damit die Checkbox funktioniert?
Grüße
Peter
~f
Option Private Module
Private Const NAMES_NAME = "Ribbon"
Public Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef destination As Any, _
ByRef source As Any, _
ByVal length As Long)
Public gobjRibbon As IRibbonUI
Public bCheckboxState As Boolean
Public Sub RibbonOnLoad(pobjRibbon As IRibbonUI)
Dim objName As Name
Set gobjRibbon = pobjRibbon
ThisWorkbook.Names.Add Name:=NAMES_NAME, RefersTo:=CStr(ObjPtr(pobjRibbon)), Visible:=False
End Sub
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim objRibbon As Object
Call CopyMemory(objRibbon, lRibbonPointer, LenB(lRibbonPointer))
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
Sub RefreshRibbon()
Dim objName As Name
If gobjRibbon Is Nothing Then
For Each objName In ThisWorkbook.Names
If objName.Name = NAMES_NAME Then
Set gobjRibbon = GetRibbon(CLngPtr(Mid$(objName.RefersTo, 2)))
Exit For
End If
Next
Set objName = Nothing
gobjRibbon.Invalidate
Else
gobjRibbon.Invalidate End If
End Sub
Public Sub Checkbox_onAction(control As IRibbonControl, pressed As Boolean)
If pressed = True Then
bCheckboxState = pressed
RefreshRibbon
Else
bCheckboxState = False
RefreshRibbon
End If
End Sub
Public Sub Checkbox_getLabel(control As IRibbonControl, ByRef label)
If bCheckboxState = False Then
label = "Beschriftung aus"
Else
label = "Beschriftung ein"
bCheckboxState = True
End If
End Sub
Public Sub Checkbox_getPressed(control As IRibbonControl, ByRef returnValue)
If bCheckboxState = True Then returnValue = 1
End Sub
~f