当前位置:  开发笔记 > 后端 > 正文

如何使用VBA将标头添加到Excel用户表单中的多列列表框中

如何解决《如何使用VBA将标头添加到Excel用户表单中的多列列表框中》经验,为你挑选了5个好方法。

是否可以在多列列表框中设置标题而不使用工作表范围作为源?

以下使用分配给列表框的列表属性的变量数组,标题显示为空白.

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改变时更改标签是一种巨大的痛苦.你是对的 - 这是一种痛苦.第一次设置是一种痛苦,更不用说了.但我还没有找到更好的方法.



1> Dick Kusleik..:

不,我在列表框上方创建标签作为标题.你可能会认为每次你的lisbox改变时更改标签是一种巨大的痛苦.你是对的 - 这是一种痛苦.第一次设置是一种痛苦,更不用说了.但我还没有找到更好的方法.



2> Jonas_Hess..:

这是我解决问题的方法:

此解决方案要求您添加第二个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



3> Rick Henders..:

我刚才看到这个问题并找到了这个解决方案.如果您的RowSource指向一系列单元格,则多列列表框中的列标题将从紧邻RowSource上方的单元格中获取.

使用此处图示的示例,在列表框内,单词SymbolName显示为标题标题.当我在单元格AB1中更改单词Name时,再次在VBE中打开表单,列标题发生了变化.

屏幕截图显示命名范围和范围外的列标题.

这个例子来自S. Christian Albright的VBA For Modelers中的一本工作簿,我试图弄清楚他是如何在列表框中得到列标题:)



4> Lunatik..:

简单回答:没有.

我过去所做的是将标题加载到第0行,然后在显示表单时将ListIndex设置为0.然后用蓝色突出显示"标题",给出标题的外观.如果ListIndex保持为零,则忽略表单操作按钮,因此永远不会选择这些值.

当然,只要选择了另一个列表项,标题就会失去焦点,但此时他们的工作就完成了.

以这种方式执行操作还允许您具有水平滚动的标题,这对于浮动在列表框上方的单独标签很难/不可能.另一方面,如果列表框需要垂直滚动,则标题不会保持可见.

基本上,这是一种妥协,适用于我所处的情况.


如何在"真正的"ListBox上方创建另一个ListBox.这将只包含一行标题,然后同时滚动它们.我没试过,但认为可以做到,不是吗?

5> 小智..:

有一种非常简单的解决方案,可以在多列列表框的顶部显示标题。只需将“ columnheads”的属性值更改为“ true”,默认情况下为false。

之后,只需提及属性“ rowsource”中的数据范围(不包括数据范围中的标头),标头应位于数据范围的第一顶行,然后它将自动选择标头,并且标头将被冻结。

如果假设您的数据在“ A1:H100”范围内,并且标题位于“ A1:H1”(这是第一行),那么您的数据范围应该是“ A2:H100”,这需要在属性“ rowsource”和“ columnheads”中提及值应该为真

问候,Asif Hameed


您错过了OP想要完成的工作,而没有使用工作表范围作为source_。
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有