私は2日間試してみましたが、何も動作していないようです...VBAのカスタムアドインリボンチェックボックスにアクセスする方法は?
VSTOでVisio用のカスタムリボンアドインをインストールし、ボタンが正常に動作するように作成しました。私は最近、VBAプロジェクト内から読みたい状態のリボンにいくつかのチェックボックスを追加しました。
私はVBAのチェックボックス状態にアクセスする方法を理解できません。私はCommandBarsとToolBarsでたくさんのことを試しましたが、どこにも行きませんでした。そして、VBAではAdd-Inのメソッドを可視にするためのこのウォークスルーを見つけました:https://msdn.microsoft.com/en-us/library/bb608614
VBAコードはアドインを認識します私はアドインオブジェクトを割り当てますが、オブジェクトの関数(チェックボックスの1つの状態を参照するgetIOPressedState)を呼び出そうとすると、「オブジェクトはこのプロパティまたはメソッドをサポートしません」というメッセージが表示されます。
ここに何か不足していますか?
は、これは私が見えるようにしたい私のリボンクラスである
<ComVisible(True)> _
Public Interface IAddInUtilities
Function getIOPressed() As Boolean
Function getDDPressed() As Boolean
Sub doNothing()
End Interface
<Runtime.InteropServices.ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class StructuredAnalysisRibbon
Implements Office.IRibbonExtensibility, IAddInUtilities
Public ioPressedState As Boolean = False
Public ddPressedState As Boolean = False
Public ribbon As Office.IRibbonUI
Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
Return getResourceText("SAVisioAddIn.StructuredAnalysisRibbon.xml")
End Function
Public Function getIOPressed() As Boolean Implements IAddInUtilities.getIOPressed
Return ioPressedState
End Function
Public Function getDDPressed() As Boolean Implements IAddInUtilities.getDDPressed
Return ddPressedState
End Function
Public Sub doNothing() Implements IAddInUtilities.doNothing
'do nothing-added this to see if function As boolean in interface was causing issues
End Sub
ThisAddIn.vb
Public SARibbon As StructuredAnalysisRibbon
Protected Overrides Function CreateRibbonExtensibilityObject() As Microsoft.Office.Core.IRibbonExtensibility
Return SARibbon
End Function
Protected Overrides Function RequestComAddInAutomationService() As Object
If SARibbon Is Nothing Then
SARibbon = New StructuredAnalysisRibbon
End If
Return SARibbon
End Function
VisioのVBAコード
Public Sub bloop()
Dim addIn As COMAddIn
Dim addInObject As Object
Dim ioPressed As Boolean
ioPressed = False
Set addIn = Application.COMAddIns.Item("SAVisioAddIn")
Set addInObject = addIn.Object
ioPressed = addInObject.getIOPressed 'fails here bc method not recognized for object
'Also tried addIn.Object.doNothing and still didn't work
If ioPressed = True Then
MsgBox "checked"
Else
MsgBox "not checked"
End If
End Sub
このRibbon.XMLやリボンデザイナーですか?これを行う方法は100%明確ではありませんが、リボンを制御するコードは完全にAddin(Ribbon1.vbがデフォルトクラスになる)でなければならず、COMインターフェイスはそれを介して動作する必要があると確信していますリボン自体を制御しようとはしません。 –