写了一个模块,让 Access 表单跟随 Office 主题自动变色

Hi,大家好

先看效果:创建一组测试窗体

新建一个 Access 数据库,拉一张普通表单,往上扔几个常用控件——

标签、文本框、组合框、按钮、选项卡、复选框,再加一个子表单。样式不做任何调整,就用 Access 默认的灰白底黑字。

(图1:初始状态 — Colourful 主题下的表单,默认样式)

挺正常,对吧?

现在去 文件 → 选项 → 常规,把 Office 主题从「彩色」改成「黑色」:

(图2:切换为 Black 主题的操作截图)

回到表单一看——Access 自己的外壳、导航栏全黑了,但你的表单呢?还是灰白底黑字,跟黑色主题格格不入,文字都快看不清了。

(图3:Black 主题下,表单毫无变化,白色背景非常刺眼)

这就是我们要解决的问题。

问题分析:为什么表单不会自己变色?

Access 从 2016 版开始支持四种 Office 主题:

主题注册表值
Dark Grey(深灰)3
Black(黑色)4
White(白色)5
Colourful(彩色,默认)7
跟随系统6(自动判断)

主题值存在注册表 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Common\UI Theme 里。

Access 改主题只会改自己的外壳和导航栏——你画的表单,它不管。所以我们需要自己写一个模块,读注册表 → 拿主题值 → 给表单逐区域、逐控件上色。

 

解决方案:modOfficeTheme 模块

思路来自 Colin Riddington(isladogs.co.uk),我做了工程化精简。整个模块的核心就三步:

  1. 读注册表 → 拿到当前主题值(3/4/5/7)

  2. 查配色方案 → 10 个颜色函数,每种主题返回一套 RGB 色值

  3. 遍历表单ApplyThemeToForm 给每个区域、每个控件按类型精准上色

完整模块代码如下,新建一个标准模块,命名为 modOfficeTheme,全贴进去: