首页 > 解决方案 > 使用 MsoThemeColorSchemeIndex 访问设置主题 VBA 关闭 1

问题描述

在设置控件/表单主题时,我经常使用 VBA,因为我可以动态更改颜色。效果很好。我一直在尝试使我的数据库远离使用硬编码的数字,并建立了一个包含主题的主题模块,其中映射了主题,因此我可以在那里更改它们而不是其他任何地方。

然后我意识到,嘿,有一种更简单的方法可以做到这一点(或者……我想)。输入枚举MsoThemeColorIndexMsoThemeColorSchemeIndex. 这样,我什至可以做一些花哨的事情,比如决定当我使用myInternalTheme1常量时,我​​可以用MsoThemeColorSchemeIndex.msoThemeAccent1.

很久以前,我注意到如果我使用帮助文档(上图)中显示的内容,主题将“关闭”1。即5msoThemeAccent1“Theme1”),而不是映射到msoThemeAccent1实际映射到“Theme2”,以及“主题 2" 颜色显示。所以,我只是手动调整。但是我想知道我是否在这里遗漏了一些东西,并且我错误地使用了该值?

保存值后,我使用 SaveAsText 导出这些表单,当我这样做时,在“属性”中手动应用“主题 1”的字段显示使用了该值,该值4“应该”映射到msoThemeColorLight2,但没有。

字段的背景主题设置:

BackThemeColorIndex =4 

我如何使用它:

    ' In my "modColor" 

    Public Const MythemeAccent1 As Integer = 4 ' (help docs specify this as MsoThemeColorIndex.msoThemeColorLight2)

    ' This one colors the header in Theme2 "wrong color, correct enum value???" 
    ' MsoThemeColorSchemeIndex.msoThemeAccent1 = 5 (as docs say)
    Me.section(acHeader).BackThemeColorIndex = MsoThemeColorSchemeIndex.msoThemeAccent1 

    ' This one colors the header with Theme1 "correct color, wrong enum value???"
    '  MsoThemeColorSchemeIndex.msoThemeLight2 = 4 (as docs say)
    Me.section(acHeader).BackThemeColorIndex = MsoThemeColorSchemeIndex.msoThemeLight2

'  my internal module, this works correctly (code looks correct, and correct color used).
    Me.section(acHeader).BackThemeColorIndex = MythemeAccent1 

如果我通过它在设计视图中分配颜色Form Properties > FormHeader > Format > Back Color > "Accent 1"可以正常工作,并且主题被正确应用。

FormHeader 属性格式

我已经多次验证主题是正确的。我导出了主题,并验证了“Accent 1”的 XML 是正确的,而“Accent2”是不同的。“Theme 1”是“Bluish”,“Theme 2”是“Redish”供参考,所以我的显示器渲染并不是让我觉得它不同。

.Thmx从文件中摘录的 XML :

           <a:accent1>
                <a:srgbClr val="5C83B4"/>
            </a:accent1>
            <a:accent2>
                <a:srgbClr val="E74B4B"/>
            </a:accent2>

标签: vbams-accessoffice365themes

解决方案


推荐阅读