vzc*_*czc 12 excel vba excel-vba
是否可以在多列列表框中设置标题而不使用工作表范围作为源?
以下使用分配给列表框的列表属性的变量数组,标题显示为空白.
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
Dic*_*ika 17
不,我在列表框上方创建标签作为标题.你可能会认为每次你的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保持为零,则忽略表单操作按钮,因此永远不会选择这些值.
当然,只要选择了另一个列表项,标题就会失去焦点,但此时他们的工作就完成了.
以这种方式执行操作还允许您具有水平滚动的标题,这对于浮动在列表框上方的单独标签很难/不可能.另一方面,如果列表框需要垂直滚动,则标题不会保持可见.
基本上,这是一种妥协,适用于我所处的情况.
小智 5
有一种非常简单的解决方案,可以在多列列表框的顶部显示标题。只需将“ columnheads”的属性值更改为“ true”,默认情况下为false。
之后,只需提及属性“ rowsource”中的数据范围(不包括数据范围中的标头),标头应位于数据范围的第一顶行,然后它将自动选择标头,并且标头将被冻结。
如果假设您的数据在“ A1:H100”范围内,并且标题位于“ A1:H1”(这是第一行),那么您的数据范围应该是“ A2:H100”,这需要在属性“ rowsource”和“ columnheads”中提及值应该为真
问候,Asif Hameed
| 归档时间: | 
 | 
| 查看次数: | 130116 次 | 
| 最近记录: |