如何在VBA ListBox中直接显示最后10条条目?
解决VBA ListBox降序排序及直接显示最后10条条目问题
问题概述
在VBA ListBox中实现降序排序存在难度,需求为无需滚动即可直接查看ListBox中的最后10条条目。
优化实现方案
经taller_ExcelHome协助,以下是优化后的完整VBA代码:
Private Sub UserForm_Initialize() Dim dataSheet As Worksheet Dim totalRows As Long Dim dataArray As Variant Dim sortIdx As Long, compareIdx As Long Dim tempData As Variant Dim displayStartRow As Long ' 指定数据所在工作表 Set dataSheet = ThisWorkbook.Worksheets("数据源") ' 获取数据最后一行 totalRows = dataSheet.Cells(dataSheet.Rows.Count, "A").End(xlUp).Row ' 读取数据到数组 dataArray = dataSheet.Range("A2:C" & totalRows).Value ' 对数组进行降序排序(以第一列为关键字) For sortIdx = LBound(dataArray, 1) To UBound(dataArray, 1) - 1 For compareIdx = sortIdx + 1 To UBound(dataArray, 1) If dataArray(sortIdx, 1) < dataArray(compareIdx, 1) Then tempData = dataArray(sortIdx, :) dataArray(sortIdx, :) = dataArray(compareIdx, :) dataArray(compareIdx, :) = tempData End If Next compareIdx Next sortIdx ' 计算显示起始行:数据超过10条则取倒数第10条开始,否则从第一条开始 displayStartRow = IIf(UBound(dataArray, 1) > 10, UBound(dataArray, 1) - 9, LBound(dataArray, 1)) ' 清空ListBox并填充目标数据 ListBox1.Clear For sortIdx = displayStartRow To UBound(dataArray, 1) ListBox1.AddItem dataArray(sortIdx, 1) ListBox1.List(ListBox1.ListCount - 1, 1) = dataArray(sortIdx, 2) ListBox1.List(ListBox1.ListCount - 1, 2) = dataArray(sortIdx, 3) Next sortIdx End Sub
效果对比
内容的提问来源于stack exchange,提问作者Shiela
相关产品推荐
相关产品推荐

