ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aman1516

[求助] 动态设置 Listbox 的列数与列宽

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-26 14:49 | 显示全部楼层
aman1516 发表于 2014-4-26 13:49
以下代码以工作表各列列宽做为列表框列宽的参照:

good idea !

为了确保输入的字符在列标题范围内,代码修如下:

Private Sub TextBox1_Change()
Dim i%, j%, c As Long, t$, s$, w$, wrr, arr, brr, crr

arr = [a1].CurrentRegion
If TextBox1.Text = "" Then
    ListBox1.ColumnCount = UBound(arr, 2) - 1
    ListBox1.List = arr
Else
    For i = 1 To UBound(arr, 2) - 1
        t = t & Cells(1, i).Value
        If InStr(TextBox1.Text, Cells(1, i).Value) > 0 Then
            s = s & ":" & i
            w = w & Columns(i).ColumnWidth * 5 & ";"
        End If
    Next i
    If InStr(t & ",", Mid(TextBox1.Text, Len(TextBox1.Text), 2)) = 0 Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
    If s <> "" Then
        s = Right(s, Len(s) - 1)
    Else
        For i = 1 To Cells(1, Cells.Columns.Count).End(xlToLeft).Column - 1
            If InStr(Cells(1, i).Value, TextBox1.Text) > 0 Then s = i: w = Columns(i).ColumnWidth * 5 & ";": Exit For
        Next i
    End If
    brr = Split(s, ":")
    ReDim crr(1 To UBound(arr, 2), 1 To UBound(brr) + 1)
    For i = 1 To UBound(arr, 2)
        For j = 1 To UBound(brr) + 1
           crr(i, j) = Cells(i, Val(brr(j - 1))).Value
        Next j
    Next i
    With Me.ListBox1
        .ColumnCount = UBound(brr) + 1
        .ColumnWidths = w
        .List = crr
    End With
End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-26 14:53 | 显示全部楼层
VBA万岁 发表于 2014-4-26 14:49
为了确保输入的字符在列标题范围内,代码修如下:

Private Sub TextBox1_Change()

指定Listbox列数与列宽并读入内容.zip (23.72 KB, 下载次数: 142)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-26 16:31 | 显示全部楼层
非常感谢 VBA万岁 的热心帮忙,祝你工作愉快。

一路下来,学习了很多方面的知识,谢谢!

TA的精华主题

TA的得分主题

发表于 2014-4-26 16:50 | 显示全部楼层
aman1516 发表于 2014-4-26 16:31
非常感谢 VBA万岁 的热心帮忙,祝你工作愉快。

一路下来,学习了很多方面的知识,谢谢!

我也是,谢谢!

TA的精华主题

TA的得分主题

发表于 2014-7-20 19:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
参观学习,受益非浅!

TA的精华主题

TA的得分主题

发表于 2014-7-20 19:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VBA万岁 发表于 2014-4-26 14:53

看了VBA万岁的结果,很佩服。
但觉得如果再继续完善一下,将更完美:
把文本框用,隔开显示列标题的形式换成在同样位置自动生成一系列列标题和复选框,这样要显示哪一项标题,就直接点选,要全部显示则不选或全选。

TA的精华主题

TA的得分主题

发表于 2014-7-21 09:09 | 显示全部楼层
长河逐浪 发表于 2014-7-20 19:47
看了VBA万岁的结果,很佩服。
但觉得如果再继续完善一下,将更完美:
把文本框用,隔开显示列标题的形式 ...

见附件:
指定Listbox列数与列宽并读入内容.rar (25.95 KB, 下载次数: 148)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-7-21 13:20 | 显示全部楼层
VBA万岁 发表于 2014-4-25 15:25
附件:

你设置工作表格式很在行的,请帮我设置一下生成后的各班分表格式,请见发来的附件,看看能不能够帮我一下,多谢!

▲▲▲新生分班(多条件分班)B.rar

66.12 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2014-7-22 09:17 | 显示全部楼层
达州张先生 发表于 2014-7-21 13:20
你设置工作表格式很在行的,请帮我设置一下生成后的各班分表格式,请见发来的附件,看看能不能够帮我一下 ...

近期没空,有时间我帮你看看。

TA的精华主题

TA的得分主题

发表于 2014-7-23 21:20 | 显示全部楼层
本帖最后由 长河逐浪 于 2014-7-23 21:22 编辑
VBA万岁 发表于 2014-7-21 09:09
见附件:


非常感谢老师的回应!看来是难者不会,会者不难,分分钟您就又搞了一个……
不过,我想像的效果不是用下拉框,这样只能单选,而多数情况下在 Listbox 中希望呈现的是多列信息,只是对列的选择更具灵活性。我想像的是用复选框CheckBox,这样,通过灵活多选,实现对呈现列的动态掌控。
E:\OneDrive\时间管理\复选框.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 10:53 , Processed in 0.043474 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表