抱歉,我知道这个案子经常被讨论过,但我找不到完美的解决方案。
在我的访问数据库中,我使用每个USysRibbons的自定义ui,这非常有用。默认UI未显示在用户模式下,但应该有一个按钮,只需恢复默认UI。什么是最佳解决方案?
答案 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