写了一个模块,让 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),我做了工程化精简。整个模块的核心就三步:
读注册表 → 拿到当前主题值(3/4/5/7)
查配色方案 → 10 个颜色函数,每种主题返回一套 RGB 色值
遍历表单 → ApplyThemeToForm 给每个区域、每个控件按类型精准上色
完整模块代码如下,新建一个标准模块,命名为 modOfficeTheme,全贴进去: