使用vba恢复默认色带(使用自定义UI)

时间:2014-02-23 14:14:50

标签: vba ms-access

抱歉,我知道这个案子经常被讨论过,但我找不到完美的解决方案。

在我的访问数据库中,我使用每个USysRibbons的自定义ui,这非常有用。默认UI未显示在用户模式下,但应该有一个按钮,只需恢复默认UI。什么是最佳解决方案?

2 个答案:

答案 0 :(得分:3)

您可以在启动期间按住Shift键 - 因此不会显示自定义指定的功能区。

当然,在开发和设计过程中,您将按住shift键,这样您的启动设置就不会运行。然后开发一段时间,然后在“用户”模式下进行测试,退出,然后重新进入应用程序而不绕过shift键。当你以用户模式运行/测试时,你可能整天都会跳这个舞,然后再回到开发者模式。

使用启动设置和自定义功能区设置运行应用程序时,无法真正开发或修改内容。并且您需要很多设置,并且尝试对所有这些设置进行编码真的是浪费时间。因此,当你想工作时,只需使用它们进行转移。

一个非常酷的技巧是在QAT上放置一个小型+修复按钮。所以在工作时,只需点击一下鼠标,你就不要按住shift键 - 没有退出的presto +重新输入你现在处于“用户”模式,你所有的启动设置现在都“活跃”并为你服务以“用户模式”测试您的应用程序。这包括您的定制色带。

另一个c + r并按住shift键将使您回到开发人员模式。假设你有Q + r旅馆你的QAT,你的启动设置可能会隐藏这个。所以在这种情况下“翻转”回到开发者模式我简单点击alt-f4退出整个应用程序。此时,Windows资源管理器中的accDB文件仍然会突出显示,因此我现在点击回车键。

因此,“用户”和“开发者”模式“跳舞”之间的退出和转换将全天发生。

当你终于把事情做对了吗?您然后将accDB编译为accDE以锁定您的代码和表单设计。您还可以并且应该禁用shift键旁路并将此已编译的应用程序分发给您的用户。编译的应用程序不仅会锁定您的表单和代码以防止任何更改,但是这样的代码运行起来更加可靠,因为未处理的错误不会重置全局或本地变量 - 您可以确保所有变量在整个用户期间保持不变运行你的应用程序。

以上实际上是在Access中开发的唯一实用方法。

更好的是,这种方法还消除了尝试隐藏或显示Access中的开发人员表面的各种代码的需要 - 事实上,您发现很多设置在代码中设置相当难以捉摸或难以设置,例如AutoExec宏,甚至是应用程序范围的自定义功能区。更糟糕的是,此类设置通常需要重新启动Access。 (一旦访问已经开始,那么它太晚了以修改设置,如果你这样做,则需要退出+重新输入。)

通过按住一个微小的移位键进入开发人员,可以简单地消除所有这些巨大的代码和麻烦。

答案 1 :(得分:0)

接受的答案很有见地,我很高兴它对您有用。不幸的是,它实际上并没有回答您的问题。

默认状态是 CustomRibbonID 属性根本不存在。所以要返回默认状态,我们需要删除该属性。

Public Sub DeleteCurrentDBProperty(ByVal propertyName As String)
    With CurrentDb.Properties
        On Error Resume Next
        .Delete propertyName
        On Error GoTo 0
    End With
End Sub

Public Sub RestoreDefaultRibbon()
    DeleteCurrentDBProperty "CustomRibbonID"
End Sub

现在我们需要一种以编程方式添加属性的方法。这需要更稳健的方法。

Public Sub SetCurrentDBProperty(ByVal propertyName As String, ByVal newValue As Variant, Optional ByVal prpType As Long = dbText)
    Dim thisDBs As Database
    Set thisDBs = CurrentDb
    Dim wasFound As Boolean
        
    ' Look for property in collection
    Dim thisProperty As Object ' DAO.Property
    For Each thisProperty In thisDBs.Properties
        If thisProperty.Name = propertyName Then
            ' Check for matching type
            If thisProperty.Type <> prpType Then
                ' Remove so we can add it back in with the correct type.
                thisDBs.Properties.Delete propertyName
                Exit For
            End If

            wasFound = True
            
            ' Skip when no change is required
            If thisProperty.Value = newValue Then
                Exit For
            Else
                ' Update value
                thisProperty.Value = newValue
            End If
        End If
    Next thisProperty
    
    If Not wasFound Then
        ' Add new property
        Set thisProperty = thisDBs.CreateProperty(propertyName, prpType, newValue)
        thisDBs.Properties.Append thisProperty
    End If
End Sub

然后给定一个示例功能区名称 Runtime,您可以像这样调用属性设置器:

Public Sub SetRuntimeRibbon()
    SetCurrentDBProperty "CustomRibbonID", "Runtime"
End Sub