• 限制LitstBox控件显示指定行数的最新数据(1/3)


    工作表Sheet1中的数据表共有3列,行数不确定,现需要将数据加载到用户窗体的ListBox控件中,设置控件的相关属性属性如下所示。

    控件属性属性值
    ColumnCount3
    ColumnHeadsTrue
    RowSourceSheet1!A2:C15

    在这里插入图片描述

    窗体显示效果如下图所示,这里有一点需要提醒大家注意,由于启用了列标题,所以RowSource属性指定的单元格范围从第二行开始,这个参数指定范围之上的一行数据将作为ListBox控件的标题行。

    在这里插入图片描述

    ListBox控件的这几个常规属性大家也经常用到,无需多讲。由于数据行数累加增加,控件加载的数据越来越多,每次用户都需要使用右侧滚动条拖动才能查看最新数据,因此希望ListBox只加载最后10行数据(不含标题行),这样用户可以非常方便的选择数据。

    利用UserForm_Initialize事件可以轻松实现窗体加载时,在设置ListBox控件的RowSource的动态范围(Sheet1!A6:C15),但是由于控件标题行并支持单独指定单元格范围,所以最终窗体效果如下图所示。工作表中第5行数据成为了ListBox的标题行,这显然是无法接受的。

    在这里插入图片描述

    借助辅助单元格区域就可以轻松实现,辅助单元格可以位于工作表中的任意位置,通常选择工作表中右侧未使用的列,此示例使用AA列开始的单元格区域。

    _注意:_此后的VBA代码定位工作表数据区域时,如果使用UsedRange,那么需要针对辅助单元格区域做特殊处理。

    Private Sub UserForm_Initialize()
        Dim lastRow As Long
        With ActiveSheet
            .Range("AA:AC").Clear
            .Range("AB:AC").NumberFormatLocal = "h:mm:ss AM/PM"
            .Range("AA:AA").NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy"
            lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
            If lastRow > 11 Then
                .Range("AA1").Resize(1, 3).Value = .Range("A1:C1").Value
                .Range("AA2").Resize(10, 3).Value = .Range(.Cells(lastRow - 9, 1), .Cells(lastRow, 3)).Value
            Else
                .Range("AA1").Resize(lastRow, 3).Value = .Range("A1").Resize(lastRow, 3).Value
            End If
            lastRow = .Cells(Rows.Count, "AA").End(xlUp).Row
        End With
        With Me.ListBox1
            .ColumnCount = 3
            .ColumnWidths = "75;75;75"
            .ColumnHeads = True
            .RowSource = "AA2:AC" & lastRow
        End With
    End Sub
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    【代码解析】
    第4行代码清空AA到AC列用于保存临时数据。
    第5~6行代码设置单元格格式,确保数据可以正确显示。
    第7行代码获取数据行数。
    第8行代码判断数据行数(不包含标题行)是否大于10。
    如果多于10行数据,第8行代码将数据表标题行复制到辅助单元格区域的第一行,第10行代码拷贝最后10行数据到辅助单元格区域。
    如果不足10行数据,第13行代码拷贝将整个数据表(包含标题行)拷贝到辅助单元格区域。
    第14行代码获取辅助单元格区域数据行数。
    第17行代码设置数据列数。
    第18行代码设置列宽度。
    第19行代码设置启用列标题。
    第20行代码代码下拉列表数据区域。

    效果如下图所示。
    在这里插入图片描述

  • 相关阅读:
    4.5 final修饰符
    String(一)———了解编码
    明明数据已经更新了,但是视图就是没变? 试试 Vue.set的使用
    k8s 解决pvc与pv不能绑定问题
    刨析 代码中常用的 基础 String 对象类(源码解析)
    《知识点累积》HTML+JS+CSS
    Android开发笔记(一百八十七)利用估值器实现弹幕动画
    Android虚拟机线程启动过程解析, 获取Java线程真实线程Id的方式
    5.1.1 修改主机名
    Hadoop生态圈中的Hive数据仓库技术
  • 原文地址:https://blog.csdn.net/taller_2000/article/details/133855631