You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel VBA UserForm中ListBox的.Width与.Height属性无效问题求助

解决VBA UserForm动态添加ListBox时宽高不生效及移除滚动条的问题

我之前也碰到过一模一样的问题!你的代码逻辑没问题,但几个默认的控件属性在搞鬼,咱们一步步来搞定:

1. 为什么Width/Height设置没效果?

你遇到的宽高不生效,主要是两个容易被忽略的属性在起作用:

  • 列宽度未明确指定:当你设置了ColumnCount=2但没定义ColumnWidths时,ListBox会自动给列分配宽度,整体控件宽度被列的总宽度锁死,你手动设的.Width自然就被覆盖了。
  • IntegralHeight自动调整高度:ListBox的IntegralHeight默认是True,它会自动调整控件高度,保证能完整显示每一行内容,所以你设置的.Height会被这个属性强制修改。

2. 修复代码+移除滚动条

把这些属性补上,就能解决问题了,修改后的代码如下:

Option Explicit
Private Sub UserForm_Initialize()
    Dim y()
    ReDim y(1 To 3, 1 To 2)
    y(1, 1) = "Fuselage"
    y(1, 2) = "Painting"
    y(2, 1) = "Engines"
    y(2, 2) = "Fuel Efficiency"
    y(3, 1) = "Landing Gear"
    y(3, 2) = "Brake Stress Test"
    
    With Me.Controls.Add("Forms.ListBox.1", "Aviation", True)
        .ColumnCount = 2
        ' 明确设置两列的宽度,总和尽量接近你要的控件宽度(预留一点边框空间)
        .ColumnWidths = "240;240"
        .List = y
        .Width = 500
        .Height = 600
        ' 关闭自动调整高度,让手动设置的高度生效
        .IntegralHeight = False
        ' 完全移除滚动条
        .ScrollBars = fmScrollBarsNone
        ' 顺便设置一下控件在窗体上的位置,避免跑到左上角边缘
        .Top = 10
        .Left = 10
    End With
    
    ' 确保窗体不会自动缩放,影响控件显示
    Me.AutoSize = False
    Me.ScrollBars = fmScrollBarsNone
End Sub

额外小贴士

  • 如果你的UserForm本身设置了滚动条,记得把它也关掉(Me.ScrollBars = fmScrollBarsNone),不然窗体滚动条可能会干扰控件的显示。
  • fmScrollBarsNone是VBA内置的枚举值,你也可以直接写0来代替,效果是一样的。

这样修改后,你的ListBox就会严格按照你设置的500宽、600高显示,滚动条也会消失啦!

内容的提问来源于stack exchange,提问作者Andreas Hanisch

火山引擎 最新活动