Checkbox bei Office-Ribbons
Hallo Forum,
ich habe in Excel ein Ribbon mit einer Checkbox angelegt. Jetzt möchte ich durch eine Prozedur oder Funktion den Wert der Checkbox manuell setzen, d.h. die Checkbox auf "checked" oder "nicht checked" setzen. Kann mir jemand ein kurzes Beispiel schicken, wie man das macht?
Vielen Dank,
M. Born
ich habe in Excel ein Ribbon mit einer Checkbox angelegt. Jetzt möchte ich durch eine Prozedur oder Funktion den Wert der Checkbox manuell setzen, d.h. die Checkbox auf "checked" oder "nicht checked" setzen. Kann mir jemand ein kurzes Beispiel schicken, wie man das macht?
Vielen Dank,
M. Born
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 277556
Url: https://administrator.de/contentid/277556
Ausgedruckt am: 24.11.2024 um 16:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
schau dir mal den Link an:
https://msdn.microsoft.com/de-de/library/microsoft.office.tools.ribbon.r ...
Gruß
Xolger
schau dir mal den Link an:
https://msdn.microsoft.com/de-de/library/microsoft.office.tools.ribbon.r ...
Gruß
Xolger
Schau dir mal das Beispiel an:
http://www.office-loesung.de/ftopic245891_0_0_asc.php
http://www.office-loesung.de/ftopic245891_0_0_asc.php
Hallo Marco,
womit arbeitest du denn überhaupt, mit Visual Studio (.Net) und VSTO ?
Der nötige Callback für Visual Basic .Net sieht folgendermaßen aus:
Die Funktions-Signaturen für die Callbacks aller verfügbaren Steuerelemente findest du alle hier: https://msdn.microsoft.com/en-us/library/ee691833.aspx#odc_Office2010Int ...
Den Namen der Funktion kannst du selbst wählen, er muss aber exakt mit dem Namen im Ribbon XML übereinstimmen.
Beispiel für ein solches Ribbon mit einer Checkbox:
Du setzt dir dann am einfachsten eine global erreichbare Bool-Variable die du auf True setzt wenn du die Checkbox setzen willst. Diese Variable fragst du in dem Callback dann ab und gibst entweder True oder False zurück, je nachdem ob du die Checkbox aktivieren oder deaktivieren willst.
Wichtig: Um eine Aktualisierung des Checkbox Status zu erreichen muss du dann in deiner Funktion noch die Funktion InvalidateControl("CheckBox1") des IRibbonUI Objekts des Ribbons mit dem exakten Namen der Checkbox aufrufen. Erst dann wird der Status der Checkbox aktualisiert bzw. die Callback-Funktion getriggert.
https://msdn.microsoft.com/en-us/library/aa433553%28v=office.12%29.aspx
Wenn du willst kann ich dir gerne das VSTO Projekt (Visual Studio 2010 Format) mit einem Beispiel zukommen lassen.
Wenn du das ganze mal ausprobieren willst hier ein angepasstes *.xlsm Dokument mit einem implantierten CustomXML
Trigger_Checkbox_277556.xlsm (In diesem Fall sind die Callbacks im Dokument als VBA enthalten)
Ein Click auf den Button triggert die Checkbox auf dem Tab MyTab
Grüße Uwe
-edit- Als VSTO VB.Net Dokument sieht das dann so aus:
womit arbeitest du denn überhaupt, mit Visual Studio (.Net) und VSTO ?
Der nötige Callback für Visual Basic .Net sieht folgendermaßen aus:
Function checkboxGetPressed(control As Office.IRibbonControl) As Boolean
'Return True to get the Checkbox to be in pressed state, and false for unchecked
End Function
Den Namen der Funktion kannst du selbst wählen, er muss aber exakt mit dem Namen im Ribbon XML übereinstimmen.
Beispiel für ein solches Ribbon mit einer Checkbox:
<?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="myTab" label="MyTab">
<group id="myGroup" label="Meine Gruppe">
<checkBox id="CheckBox1" label="CheckBox1" getPressed="checkboxGetPressed" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Wichtig: Um eine Aktualisierung des Checkbox Status zu erreichen muss du dann in deiner Funktion noch die Funktion InvalidateControl("CheckBox1") des IRibbonUI Objekts des Ribbons mit dem exakten Namen der Checkbox aufrufen. Erst dann wird der Status der Checkbox aktualisiert bzw. die Callback-Funktion getriggert.
https://msdn.microsoft.com/en-us/library/aa433553%28v=office.12%29.aspx
Wenn du willst kann ich dir gerne das VSTO Projekt (Visual Studio 2010 Format) mit einem Beispiel zukommen lassen.
Wenn du das ganze mal ausprobieren willst hier ein angepasstes *.xlsm Dokument mit einem implantierten CustomXML
Trigger_Checkbox_277556.xlsm (In diesem Fall sind die Callbacks im Dokument als VBA enthalten)
Ein Click auf den Button triggert die Checkbox auf dem Tab MyTab
Grüße Uwe
-edit- Als VSTO VB.Net Dokument sieht das dann so aus:
Ribbon.xml
<?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="myTab" label="MyTab" >
<group id="myGroup" label="Meine Gruppe">
<checkBox id="CheckBox1" label="CheckBox1" getPressed="checkboxGetPressed" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Ribbon.vb
<Runtime.InteropServices.ComVisible(True)> _
Public Class Ribbon
Implements Office.IRibbonExtensibility
Public ribbon As Office.IRibbonUI
Public Sub New()
End Sub
Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
Return GetResourceText("WorkbookTriggerCheckbox.Ribbon.xml")
End Function
#Region "Ribbon Callbacks"
'Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1.
Public Sub Ribbon_Load(ByVal ribbonUI As Office.IRibbonUI)
Me.ribbon = ribbonUI
Globals.ThisWorkbook.rib = ribbonUI
End Sub
Function checkboxGetPressed(control As Office.IRibbonControl) As Boolean
If Globals.ThisWorkbook.enableCheckbox Then
Return True
Else
Return False
End If
End Function
#End Region
#Region "Helpers"
Private Shared Function GetResourceText(ByVal resourceName As String) As String
Dim asm As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
Dim resourceNames() As String = asm.GetManifestResourceNames()
For i As Integer = 0 To resourceNames.Length - 1
If String.Compare(resourceName, resourceNames(i), StringComparison.OrdinalIgnoreCase) = 0 Then
Using resourceReader As IO.StreamReader = New IO.StreamReader(asm.GetManifestResourceStream(resourceNames(i)))
If resourceReader IsNot Nothing Then
Return resourceReader.ReadToEnd()
End If
End Using
End If
Next
Return Nothing
End Function
#End Region
End Class
ThisWorkbook.vb
Im Beispiel wird die Checkbox getriggert wenn sich der Wert in Zelle A1 ändert (bei 1 = an bei 0 = ausPublic Class ThisWorkbook
Public enableCheckbox As Boolean = False
Public rib As Office.IRibbonUI
Private Sub ThisWorkbook_SheetChange(Sh As Object, Target As Microsoft.Office.Interop.Excel.Range) Handles Me.SheetChange
If Sh.Name = "Tabelle1" And Not ThisApplication.Intersect(Sh.Range("A1"), Target) Is Nothing Then
If Target.Value = 1 Then
enableCheckbox = True
Else
enableCheckbox = False
End If
rib.InvalidateControl("CheckBox1")
End If
End Sub
Private Sub ThisWorkbook_Shutdown() Handles Me.Shutdown
End Sub
Protected Overrides Function CreateRibbonExtensibilityObject() As Microsoft.Office.Core.IRibbonExtensibility
Return New Ribbon()
End Function
End Class