Excel 也能做窗体,为什么真正给人用的还是 Access?
- 2026-09-22 12:29:05
摘要: Excel 的 UserForm 和 Access 窗体都叫窗体,但一个是弹窗填数,一个是给人天天用的业务界面。从绑定、布局、主题到连续窗体,差距比很多人想的大。
Hi,大家好!
Excel 里的录入窗体发还是 UserForm 那套灰底、灰色按钮、控件挤成一排。客户名称、订单日期、金额,填完点确定,再写回单元格。
Access 不也有 VBA 与窗体吗,有区别吗?
Excel 的 UserForm 和 Access 窗体,名字像,活完全不是一类。
Excel 窗体是「盖在表格上面的对话框」。Access 窗体是「对着数据表做出来的业务界面」。一个用来偶尔填几个数,一个用来每天开着干活。

先把两个东西分开
Excel 里说的窗体,多半是 VBA 编辑器里插入的 UserForm,底层是老的 MSForms。控件就那么几种:文本框、组合框、列表框、命令按钮、多页。默认长什么样,用过的人都知道。
Access 窗体是数据库对象。设计视图里拖控件,记录源直接绑表或查询,打开就是一条条业务数据。单页窗体、连续窗体、数据表、分割窗体,都是窗体,只是默认视图不同。
所以后面对比,我说的 Excel 窗体,指 UserForm;Access 窗体,指这个能绑数据的界面对象。别跟工作表上的「窗体」控件搞混,那个更简单,更不像系统。
最大的差别:绑不绑数据
Excel UserForm 默认是空的。打开窗体,你得自己从工作表读值塞进文本框;点保存,再自己写回单元格。改一行还好,改一百行、还要校验必填、还要防别人改错列,代码很快就堆成一团。
Access 窗体把记录源设成表或查询,文本框控件来源写成字段名,打开就能改数据。上下翻记录、新增、删除,导航按钮自带。子窗体还能再绑一张明细表,主窗体改订单号,下面明细跟着变。
我见过不少 Excel 窗体,为了模拟这个效果,UserForm_Initialize 里循环几百行单元格往 ListBox 里装。Access 里这件事叫连续窗体,或者直接用数据表视图,不用自己造列表。
这不是好不好看的问题,是窗体到底围着什么转。Excel 围着单元格转,Access 围着记录转。
界面这件事,Access 确实好看很多
Excel UserForm 的默认样子,基本还停在很早以前的对话框审美:灰色面板、立体按钮、控件之间全靠手对齐。想做圆角、阴影、主题色,MSForms 几乎帮不上忙。很多人最后只能贴一张图片当背景,按钮还是那几个老控件。
Access 这边,近几年能用的东西明显多了:
窗体有主题、字体、颜色方案,一套改完,按钮、标签、文本框一起变
控件有形状轮廓、形状填充、悬停、按下状态,按钮能做成扁平的,不再是那种灰色凸起
布局视图能把控件放进表格布局或堆积布局,对齐不用靠目测
选项卡、导航控件、分割窗体,页面结构能做出来,不是一堆控件堆在一张灰底上
条件格式能按字段值变颜色,逾期标红、库存偏低变黄,不用自己写一堆
BackColor图片、附件、Web 浏览器、图表,都能直接放在窗体上
我自己做给客户用的录入界面,一般会把窗体边框、记录选择器、导航按钮按场景关掉,标题自己做一条,按钮做成扁平色块。同样是填客户档案,Access 打开像个小系统,Excel UserForm 打开还是「宏窗体」。
用户不一定懂数据库,但界面第一眼就能分出来。

连续窗体,Excel 几乎做不出来
Access 有一种视图叫连续窗体:页眉做表头,主体做一行模板,打开后按记录一条条重复。筛选、排序之后,行还在,看起来像列表,每一行又是完整控件,能放按钮、复选框、下拉框。
Excel UserForm 没有这个东西。你要列表,只能上 ListBox 或 ListView。ListBox 列对齐别扭,还不能在某一行放按钮。想「每一行都能点编辑」,就得自己画一堆控件,或者弹第二个窗体。
订单明细、入库明细、审批列表,这类界面我几乎只会放 Access 连续窗体。Excel 里硬做,也能做,但维护成本很高,而且怎么打扮都像临时工具。
子窗体和分割窗体
Access 窗体里可以嵌子窗体。上面一张客户,下面一张历史订单,这是很常见的做法。分割窗体则是上半单条编辑、下半数据表,找记录很快。
Excel UserForm 也能嵌一个 Frame,或者再弹一个窗体,但没有「子窗体绑定子表、主子联动」这一套。主表换一行、明细自动刷新,在 Access 里是默认能力,在 Excel 里是你自己写的同步代码。
多人一起录数据时,这个差别会被放大。Excel 窗体写回的是某张表的某几行,一不小心就覆盖别人刚改的单元格。Access 窗体改的是当前记录,冲突会少很多。当然,真要多人用,前端还是要拆开,别大家共用一个前端文件。
录入体验也不只是样子
Access 窗体上,输入掩码、有效性规则、组合框行来源、查阅列,很多校验能做到字段这一层。日期选日期、客户从列表挑、数量不能填负数,不一定非要等点保存才报错。
Excel UserForm 的校验全写在 VBA 里。组合框的值你得自己从工作表加载,输错了也得自己弹 MsgBox。工作表本身还有人绕过窗体直接改单元格,窗体上的规则等于没设。
还有一件很具体的事:Access 文本框可以绑备注字段,能滚、能多行;连续窗体里还能做行号、即时搜索。这些我以前写过单独的做法,这里不展开。结论就一句:Excel 窗体适合「弹出来填三个数」,不适合「整天开着录业务」。
一张表把差距摊开
Excel 不是不能做窗体,是它的窗体从来就不是为「系统界面」准备的。

什么时候 Excel 窗体就够了
也别神化 Access。下面这些场景,我还是会用 Excel UserForm:
就几个人,数据就一张表,填完立刻要算、要透视
窗体只是个参数入口,真正干活的是工作表公式
用户坚决不装 Access,也不接受运行时
一旦出现这些信号,我就劝人把界面做到 Access 里:
每天都要打开窗体录数据,不是偶尔点一次
一张主表加明细,还要查历史
界面要给客户看、给领导看,不能再是灰框
同一套数据,不能再靠「别改错列」来维持
样式只是最容易看见的一层。底下是绑定、连续窗体、子窗体、主题,这些 Excel UserForm 补不齐。补得越深,越像在 Excel 里重写一个残缺的 Access。

窗体给人用,不是给自己演示宏用。要好看、要好填、要跟数据待在一起,选 Access 窗体,这事没有那么纠结。