0

我想知道是否有人可以帮助我解决 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

我已经为此工作了一个多星期,并且我正在全力以赴完成它。

4

1 回答 1

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

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

当然,您的功能区 XML 必须分配Sub GetEnabledMacro给控件的GetEnabled属性。

于 2018-03-18T02:29:08.010 回答