我想知道是否有人可以帮助我解决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
我已经在这方面工作了一个多星期,而且我还在努力完成它。
答案 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
属性。