我希望在 MS Access 2010 数据库中制作一个简单的表单,用户可以在其中选择要使用的主题。如何通过vba更改数据库的主题?谷歌对这个问题没有太大帮助。
1 回答
我知道这个问题是不久前提出的,但是由于我在研究设置主题时遇到了这个问题,所以我想我应该尝试提供一些我发现的东西。
在让用户选择主题时,我认为最简单的方法就是将“颜色”按钮放在功能区中。如果您碰巧制作了自己的自定义色带,您可以使用它<control idMso="ThemeColorsGallery" />
来引用“颜色”选项。
如果您想尝试更精确地控制发生的事情,我想我可能已经找到了一个选项,但它涉及更多一点,我还没有制定出细节。不过,我想发布它,因为我认为有人可能想要使用它。
在控制图片库功能时,我意识到隐藏的“MSysResources”表中有一个“Office Theme”条目。我相信“MySysResources”表中“Office 主题”行中的任何内容都决定了程序启动时加载的主题。我测试这个想法的方法是我选择了一个主题,然后走到桌子旁,将附件保存到桌面。然后我去选择了一个不同的主题,并通过查看我的一些表格来确保它就位。然后,我回到表格并删除了“Office Theme”行中的内容,并将保存的文件上传回附件中。在我关闭并重新打开程序后,
我设想可能使用的方式是您可以通过代码分配该附件。特别是,如果您想基于特定于您的程序的配置选项覆盖默认设置,这似乎很有用。
2015 年 8 月 18 日更新: 有人要求提供有关我如何通过 VBA 设置主题的更多详细信息,因此我将在此处提供。基本理论是我将 MSysResources 中附件字段中的数据保存到表中。然后,如果我需要用我保存的主题覆盖当前主题,我会从我的表中提取它并将其保存在适当的 MSysResources 记录中。请注意,我使用 MySQL 作为我的表存储平台,并且使用名为“Lgo”的 MediumBlob 字段来存储数据。
这是我使用的两个函数。第一个函数将主题保存到我的 MySQL 表中。第二个函数提取保存的数据并将其保存在 MSysResourcestable 中当前主题的顶部。请注意,要查看第二个函数的效果,您必须在运行该函数后关闭并重新打开程序。
Function SveThm()'Save Theme
Dim MSR As Recordset, Atc As Recordset, LR As Recordset
Set MSR = CurrentDb.OpenRecordset("SELECT * FROM MSysResources WHERE [Name]='Office Theme'", dbOpenDynaset)
If MSR.RecordCount > 0 Then
Set Atc = MSR!Data.Value
Set LR = CurrentDb.OpenRecordset("SELECT * FROM tbllgo;", dbOpenDynaset)
If LR.RecordCount = 0 Then LR.AddNew Else LR.Edit
LR!Stn = LgoStn
LR!Lgo = CStr(Atc!FileData)
LR!Typ = Typ
LR.Update
LR.Close
MsgBox "Your theme has been saved."
End If
End Function
Function SetMSys()'Set MSysResources
Dim MSys As Recordset, Lgo As Recordset, Atc As Recordset
Set MSys = CurrentDb.OpenRecordset("SELECT * FROM MSysResources WHERE [Name]='Office Theme'", dbOpenDynaset)
If MSys.RecordCount > 0 Then
MSys.Edit
Set Atc = MSys!Data.Value
Atc.Edit
Set Lgo = CurrentDb.OpenRecordset("SELECT Lgo FROM tbllgo;", dbOpenDynaset)
If Lgo.RecordCount > 0 Then Atc!FileData = Lgo!Lgo
Lgo.Close
Atc.Update
MSys.Update
End If
End Function