是否可以在多列列表框中设置标题而不使用工作表范围作为源?
以下使用分配给列表框的列表属性的变量数组,标题显示为空白.
Sub testMultiColumnLb() ReDim arr(1 To 3, 1 To 2) arr(1, 1) = "1" arr(1, 2) = "One" arr(2, 1) = "2" arr(2, 2) = "Two" arr(3, 1) = "3" arr(3, 2) = "Three" With ufTestUserForm.lbTest .Clear .ColumnCount = 2 .List = arr End With ufTestUserForm.Show 1 End Sub
Dick Kusleik.. 17
不,我在列表框上方创建标签作为标题.你可能会认为每次你的lisbox改变时更改标签是一种巨大的痛苦.你是对的 - 这是一种痛苦.第一次设置是一种痛苦,更不用说了.但我还没有找到更好的方法.
不,我在列表框上方创建标签作为标题.你可能会认为每次你的lisbox改变时更改标签是一种巨大的痛苦.你是对的 - 这是一种痛苦.第一次设置是一种痛苦,更不用说了.但我还没有找到更好的方法.
此解决方案要求您添加第二个ListBox元素并将其放置在第一个元素上方。
像这样:
然后,调用函数CreateListBoxHeader以使对齐正确并添加标题项目。
结果:
Public Sub CreateListBoxHeader(body As MSForms.ListBox, header As MSForms.ListBox, arrHeaders) ' make column count match header.ColumnCount = body.ColumnCount header.ColumnWidths = body.ColumnWidths ' add header elements header.Clear header.AddItem Dim i As Integer For i = 0 To UBound(arrHeaders) header.List(0, i) = arrHeaders(i) Next i ' make it pretty body.ZOrder (1) header.ZOrder (0) header.SpecialEffect = fmSpecialEffectFlat header.BackColor = RGB(200, 200, 200) header.Height = 10 ' align header to body (should be done last!) header.Width = body.Width header.Left = body.Left header.Top = body.Top - (header.Height - 1) End Sub
Private Sub UserForm_Activate() Call CreateListBoxHeader(Me.listBox_Body, Me.listBox_Header, Array("Header 1", "Header 2")) End Sub
我刚才看到这个问题并找到了这个解决方案.如果您的RowSource指向一系列单元格,则多列列表框中的列标题将从紧邻RowSource上方的单元格中获取.
使用此处图示的示例,在列表框内,单词Symbol和Name显示为标题标题.当我在单元格AB1中更改单词Name时,再次在VBE中打开表单,列标题发生了变化.
这个例子来自S. Christian Albright的VBA For Modelers中的一本工作簿,我试图弄清楚他是如何在列表框中得到列标题:)
简单回答:没有.
我过去所做的是将标题加载到第0行,然后在显示表单时将ListIndex设置为0.然后用蓝色突出显示"标题",给出标题的外观.如果ListIndex保持为零,则忽略表单操作按钮,因此永远不会选择这些值.
当然,只要选择了另一个列表项,标题就会失去焦点,但此时他们的工作就完成了.
以这种方式执行操作还允许您具有水平滚动的标题,这对于浮动在列表框上方的单独标签很难/不可能.另一方面,如果列表框需要垂直滚动,则标题不会保持可见.
基本上,这是一种妥协,适用于我所处的情况.
有一种非常简单的解决方案,可以在多列列表框的顶部显示标题。只需将“ columnheads”的属性值更改为“ true”,默认情况下为false。
之后,只需提及属性“ rowsource”中的数据范围(不包括数据范围中的标头),标头应位于数据范围的第一顶行,然后它将自动选择标头,并且标头将被冻结。
如果假设您的数据在“ A1:H100”范围内,并且标题位于“ A1:H1”(这是第一行),那么您的数据范围应该是“ A2:H100”,这需要在属性“ rowsource”和“ columnheads”中提及值应该为真
问候,Asif Hameed