IRibbonUI文档加载事件

时间:2018-03-17 22:11:13

标签: vba excel-iribbonui

我想知道是否有人可以帮助我解决VBA问题 - 我20多年来没有写过VBA而且我被卡住了。

我创建了一个功能区按钮,如果从本地驱动器或文件共享打开word文档,我需要灰色按钮。如果文档是从SharePoint或OneDrive打开的,我需要激活按钮。

Dim Rib As IRibbonUI
Public MyTag As String

'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
Set Rib = ribbon

End Sub

Sub GetEnabledMacro(control As IRibbonControl, ByRef Enabled)
If MyTag = "Enable" Then
    Enabled = True
Else
    If control.Tag Like MyTag Then
        Enabled = True
    Else
        Enabled = False
    End If
End If
End Sub

Sub RefreshRibbon(Tag As String)
MyTag = Tag
If Rib Is Nothing Then
    MsgBox "Error, Save/Restart your workbook" & vbNewLine & _
    "Visit this page for a solution:     Else
    Rib.Invalidate
End If
End Sub

Sub EnabledAllControls()
'Enable all controls
Call RefreshRibbon(Tag:="*")
End Sub

Sub DisableAllControls()
'Disable all controls
Call RefreshRibbon(Tag:="")
End Sub

然后我使用这个if语句来测试文件位置。它只是不开火?

Sub AutoOpen()
If InStr(ActiveDocument.Path, "http") = 1 Then
Call EnabledAllControls
Else

Call DisableAllControls

End If
End Sub

我已经在这方面工作了一个多星期,而且我还在努力完成它。

1 个答案:

答案 0 :(得分:0)

以下是未经测试的,但我制作了很多色带,感觉还不错。这是你认为删除了不必要部分的所有代码:

Dim Rib As IRibbonUI

'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
Set Rib = ribbon
End Sub

Sub GetEnabledMacro(control As IRibbonControl, ByRef Enabled)
Enabled = If InStr(ActiveDocument.Path, "http") = 1
End Sub

Sub AutoOpen()
If Rib Is Nothing Then
    MsgBox "Error, Save/Restart your workbook" & vbNewLine & _ 
    "Visit this page for a solution:"
Else
    Rib.Invalidate
End If
End Sub

基本上,您只需要功能区对象(检查),触发状态设置的事件(检查)和确定状态(检查)的逻辑。您不需要全局变量。

当然,您的Ribbon XML必须将Sub GetEnabledMacro分配给控件的GetEnabled属性。