|
本帖最后由 opiona 于 2022-11-12 09:45 编辑
Listbix用数组直接赋值
随着滚动条下拉 标题不能固定在原位 不太方便
变通了一下:
先将数据保存到一个临时表
再将临时表的数据显示到 Listbox
标题就变的和ListView一样 可以一直在上面显示
代码中同时实现:
鼠标滚轮的上下滚动条,左右滚动条(同时按下Shift)
通过一个自定义函数实现自动设置 Listbox列宽 为适应宽度
listbox标题行常驻_示例.rar
(124.37 KB, 下载次数: 144)
- Sub ListBox标题常驻设置(ARX, ListA, Optional ByVal ShName As String = "ListBox标题常驻")
- ''' With ListBox1
- ''' .Clear ' 清除列表框。
- ''' .ColumnCount = UBound(DRX, 2) '设置7列
- ''' .ColumnWidths = GetListBoxWidth(DRX) '设置每列宽度
- ''' .ListStyle = 0 '带有复选框
- ''' .MultiSelect = 0 '表示对象是否允许多项选择
- ''' rem List = DRX '内容来自一个数组
- ''' Rem 其他都正常设置, 调用: 标题常驻
- ''' Call ListBox标题常驻设置(DRX, ListBox1)
- ''' End With
-
- Rem 临时表需要临时设置 满足文本身份证类的显示
- Rem ARX 二维数组要求有标题
- Rem ListA Listbox名称
- Rem ShName 临时工作表名
-
- Set SHX = Worksheets(ShName)
- SHX.Cells.ClearContents
- LB = LBound(ARX)
- SHX.Range("A1").Resize(UBound(ARX, 1) + (1 - LB), UBound(ARX, 2) + (1 - LB)) = ARX
- MAXCOL = SHX.Range("IT1").End(xlToLeft).Column
- MAXROW = SHX.Range("A" & SHX.Rows.Count).End(3).Row
- With ListA
- .ColumnHeads = True
- .TextAlign = fmTextAlignCenter
- .RowSource = SHX.Range("A2:" & SHX.Cells(MAXROW, MAXCOL).Address).Address(External:=True)
- End With
- End Sub
复制代码
- Function GetListBoxWidth(ByVal ARX, Optional ByVal LB As Long = -1) As String
- Dim I, INTX, x, y, Z, ICOL, MAXROW, MinWidth, MaxWidth, MinNums As Long
- Dim StrX As String
- Rem 按照数组设置ListBox各列的宽度
- Rem ARX 数组
- Rem LB 起始值 默认是-1 自动计算
- Rem 使用方法: .ColumnWidths = GetListBoxWidth(ARX) '设置每列宽度
- Rem 宽度值 最小和最大宽度
- MinWidth = 12
- MaxWidth = 60
- MinNums = 6 '//每个字符宽度
- Rem 为了速度,只判断100行
- MAXROW = 100
- If UBound(ARX, 1) < 100 Then MAXROW = UBound(ARX, 1)
- StrX = ""
- If LB = -1 Then LB = LBound(ARX, 1) '//开始行 可以提前指定 =0 or =1
- For y = LB To UBound(ARX, 2)
- INTX = 0
- For x = LB To MAXROW
- Rem 获得字符串实际长度,中文2,英文1
- Z = 0
- If LenB(ARX(x, y)) > 0 Then
- Z = LenB(ARX(x, y))
- End If
- If Z > INTX Then INTX = Z
- Next
- If INTX < MinWidth Then INTX = MinWidth '//最小宽度
- If INTX > MaxWidth Then INTX = MaxWidth '//最大宽度
- Rem 获得此列的宽度
- If StrX <> "" Then StrX = StrX & ","
- StrX = StrX & INTX * MinNums
- Next
- GetListBoxWidth = StrX
- End Function
复制代码
|
评分
-
3
查看全部评分
-
|