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
相关产品推荐
相关产品推荐

