You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel 2016用户窗体ListBox列标题显示问题求助

Excel 2016用户窗体ListBox列标题不显示的解决办法

你的问题出在使用.List = dataArray赋值数据时,ColumnHeads = True不会生效——这个属性仅在通过.RowSource绑定数据源时才会自动调用标题行,或是手动设置列标题。结合你的标题行在B8、数据从B9开始的情况,给你两个可行方案:

方案一:改用RowSource绑定数据(自动读取列标题)

修改代码,直接通过RowSource关联数据区域,让Excel自动把B8行作为列标题:

Public Sub UserForm_Activate()
    Dim wsDB As Worksheet
    Dim lastRow As Long, lastCol As Long
    Dim dataRange As Range
    
    Set wsDB = Sheets("DataBase Entry")
    lastRow = wsDB.Cells(Rows.Count, "B").End(xlUp).Row
    lastCol = wsDB.Cells(9, Columns.Count).End(xlToLeft).Column
    ' 数据范围是B9到对应行列,RowSource会自动取上一行(B8)作为标题
    Set dataRange = wsDB.Range("B9").Resize(lastRow - 8, lastCol) ' 修正行数,避免包含空行
    
    With Me.lbData
        .Clear
        .ColumnCount = lastCol
        .ColumnHeads = True
        ' 修正列宽拼接逻辑,避免前缀分号导致的第一列宽度异常
        .ColumnWidths = ""
        For j = 1 To lastCol
            .ColumnWidths = .ColumnWidths & IIf(j = 1, "", ";") & "100"
        Next j
        ' 用RowSource绑定数据,格式为"工作表名!范围地址"
        .RowSource = wsDB.Name & "!" & dataRange.Address
        .TextAlign = fmTextAlignCenter
    End With
End Sub

方案二:手动设置列标题(保留List赋值方式)

如果不想改用RowSource,可以手动读取B8行的标题,赋值给ListBox的.Column属性:

Public Sub UserForm_Activate()
    Dim wsDB As Worksheet
    Dim lastRow As Long, lastCol As Long
    Dim dataArray As Variant, headerArray As Variant
    
    Set wsDB = Sheets("DataBase Entry")
    lastRow = wsDB.Cells(Rows.Count, "B").End(xlUp).Row
    lastCol = wsDB.Cells(9, Columns.Count).End(xlToLeft).Column
    ' 读取数据和标题行内容
    dataArray = wsDB.Range("B9").Resize(lastRow - 8, lastCol).Value
    headerArray = wsDB.Range("B8").Resize(1, lastCol).Value
    
    With Me.lbData
        .Clear
        .ColumnCount = lastCol
        ' 手动设置列标题
        .Column = headerArray
        ' 修正列宽拼接逻辑
        .ColumnWidths = ""
        For j = 1 To lastCol
            .ColumnWidths = .ColumnWidths & IIf(j = 1, "", ";") & "100"
        Next j
        .List = dataArray
        .TextAlign = fmTextAlignCenter
    End With
End Sub

两种方案都能解决列标题不显示的问题,你可以根据习惯选择。

内容的提问来源于stack exchange,提问作者Carl Zheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:48:28