RefreshRibbon和Invalidate错误

时间:2014-01-23 22:29:04

标签: xml ms-access access-vba ribbon

我有我的xml:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="CallBackOnLoad">

 button id"ThisButton".......getVisible="GetVisible"

在一个模块中

Option Compare Database
Option Explicit

Public gobjRibbon As IRibbonUI
Public bolVisible As Boolean

Public Function GetVisible(control As IRibbonControl, ByRef visible)
'some logic
end function

单独的模块

Option Compare Database
Option Explicit

Public gobjRibbon As IRibbonUI
Public bolVisible As Boolean

Public Sub globalInit()
    If gobjRibbon Is Nothing Then Call CallbackOnLoad
End Sub

Sub CallbackOnLoad(ribbon As IRibbonUI)
    Set gobjRibbon = ribbon
End Sub

Public Function RefreshRibbon()
    gobjRibbon.Invalidate
End Function

有时我会在Invalidate上找到'对象或者没有设置块varialbe',有时候我没有。如果我设法通过无效,它应该刷新调用GetVisible函数的功能区但是我得到每个按钮的错误GetVisible说明我的表格找不到GetVisible功能。我要把头发拉出来但我已经秃了。有什么建议吗?一切似乎都在这里。

编辑:我将补充说,可见性逻辑由谁登录到特定表单确定。该表单首先加载,用户登录并启动对RefreshRibbon的调用。

编辑:我想我发现了第一个错误。只有当我单步执行代码并且因为功能区分配了一个OnLoad事件时才会发生这种情况......某些东西

1 个答案:

答案 0 :(得分:0)

我可能错了,如果我是,我会乐意删除我的答案。

Access启动时会加载Ribbons。这是他们的Load事件发生的唯一时间。

至于控制何时/如果显示功能区,我认为您应该能够通过表单的RibbonName属性执行此操作。在表格公开活动期间,我能够在表格中添加功能区名称。

Private Sub Form_Open(Cancel as Integer)
    If MsgBox("Do you want to load the ribbon?", vbYesNo, "Um...") = vbYes Then
        Me.RibbonName = "MyCustomRibbon"
    End If
End Sub