MS Access拆分窗体多列组合框列宽自动重置为1英寸问题求助
MS Access拆分窗体组合框列宽重置问题解决
问题背景
在MS Access中创建拆分窗体,包含多个基于[ID]/[Descriptor]查找表的长组合框——绑定ID列,显示Descriptor字段。已将组合框ColumnWidths设为"0in.; 20in.",但办公室宽屏显示器超出Access默认22英寸最大窗体尺寸时:
- 打开或放大窗体,组合框
ColumnWidths会自动重置为"0in.; 1in.;",下拉文本在1英寸处截断,剩余列空白 - 缩小窗体时,列宽恢复正确值
已尝试的代码
曾在窗体Resize和Open事件中添加以下代码,但放大窗体后列宽仍会重置:
Private Sub Form_Resize() Dim frm As Form Dim ctl As Control Dim iTwip As Long iTwip = 1440 Set frm = Me.Form For Each ctl In frm If ctl.ControlType = acComboBox Then If ctl.Width > (20 * iTwip) Then ctl.ColumnWidths = "0in.; 20in." Else ctl.ColumnWidths = "0in.; " & Format(ctl.Width / iTwip, "##") & "in." End If End If Next ctl Set ctl = Nothing End Sub
可行解决方案
1. 改用缇(Twip)单位强制设置列宽
避免Access对英寸单位的自动调整逻辑,直接用绝对缇值设置列宽(1英寸=1440缇,20英寸对应28800缇):
Private Sub Form_Resize() Dim ctl As Control Const DESIRED_COL_WIDTH As Long = 28800 ' 20英寸对应的缇数 For Each ctl In Me.Controls If ctl.ControlType = acComboBox Then ' 直接用缇设置列宽,跳过单位转换 ctl.ColumnWidths = "0; " & DESIRED_COL_WIDTH ' 确保组合框自身宽度足够适配下拉列(可选) If ctl.Width < DESIRED_COL_WIDTH Then ctl.Width = DESIRED_COL_WIDTH End If End If Next ctl Set ctl = Nothing End Sub
2. 补充窗体加载时的强制设置
在Form_Load事件中调用Resize逻辑,确保窗体打开时列宽就生效:
Private Sub Form_Load() Call Form_Resize End Sub
3. 关闭自动调整布局
- 打开窗体设计视图
- 点击窗体空白区域,打开属性窗口
- 将
自动调整属性设为否 - 若不需要窗体居中,将
自动居中属性也设为否
内容的提问来源于stack exchange,提问作者G Alvidrez
相关产品推荐
相关产品推荐

