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

16 篇文章 0 订阅
9 篇文章 0 订阅

工作表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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值