ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] VBA窗体Listview虚拟模式极速显示100000000行大数据的实现

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-17 16:53 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ivccav 于 2023-5-17 19:46 编辑

Listview控件是款优秀的控件,功能很多。但显示行数超过5000行时,会非常卡顿,要加载比较长的时间才能显示完成,造成用户体验不够好。加载大数据时,官方建议使用虚拟模式。VB6中有人实现了简陋的虚拟模式,但我尝试用在Excel VBA中却无法运行:

白嫖的希望还是破灭了,只能自己研究。我使用虚拟模式,并不是为了真的显示1亿行数据,我也没有这么多数据可以显示,只是为了改善用户体验,在显示大量数据时,能给出丝滑版的流畅感。


花费了不少时间研究,我写的VBA Listview虚拟模式基本达到了实用,主要功能如下:

1.字体设置实现
2.模糊查询实现
3.行复选框实现
4.标头复选框实现
5.标头排序箭头实现
6.数据缓存的实现
7.右键导出勾选数据的实现




01021.gif
虚表示例VB6.zip (5.37 KB, 下载次数: 382)
Listview虚拟列表的实现.rar (371.45 KB, 下载次数: 585)

尽情体验这丝滑的感觉吧!
(数组排序在论坛中很多人写过,留给大家做个作业了)


评分

11

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-20 16:54 | 显示全部楼层



  加了排序程序进去:

01022.gif

Listview虚拟列表的实现. 排序.zip (378.41 KB, 下载次数: 523)



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 17:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ivccav 于 2023-5-18 08:09 编辑



记得有人提问怎么修改复选框大小。只能自绘实现:

01021.gif

既然要自绘,那么可以更加放飞自我点:
Listview标头三态复选框实现(自绘方式).zip (35.99 KB, 下载次数: 195)
01022.gif

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-5-17 17:12 | 显示全部楼层
  1. 这个控件,最大的问题就是兼容问题,要不然还是很不错的
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-17 17:12 | 显示全部楼层
尊敬的ivccav老师:用win10专业版+office2021专业增强版测试,出现如图“下标越界错误”,劳烦解惑,谢谢!
下标越界.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 17:51 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
笑着...两年过去 发表于 2023-5-17 17:12

这回没有在窗体上画listview控件,控件是程序生成的,不清楚是否还存在版本兼容问题。

版本问题对小白是有些问题,但稍微会vba应该不成问题,就是重新自己画一个listview或者把丢失的引用去掉勾选而已

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 17:52 来自手机 | 显示全部楼层
wowo000 发表于 2023-5-17 17:12
尊敬的ivccav老师:用win10专业版+office2021专业增强版测试,出现如图“下标越界错误”,劳烦解惑,谢谢!

能正常显示控件吗?只是导出数据有问题?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 17:59 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ivccav 于 2023-5-17 18:02 编辑

忘记说了,虚拟模式是任何功能都要自己实现,控件不管理和保存任何数据,也不支持排序,甚至连复选框都需要自己写代码来实现。为了能实现排序,我把所有数据保存在数组中,方便大家用排序程序排序,注意不要使用快排,因为多点一下,数据已经是有序的,再用快排会导致堆栈溢出!

TA的精华主题

TA的得分主题

发表于 2023-5-17 18:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个是个技术活  赞一下
如果同时在listbox 实现  那就更好了

TA的精华主题

TA的得分主题

发表于 2023-5-17 18:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ivccav 发表于 2023-5-17 17:02
记得有人提问怎么修改复选框大小。只能自绘实现:

大佬,这个控件如何实现正负号数字排序?给个例子

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-17 18:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
kings12333 发表于 2023-5-17 18:31
大佬,这个控件如何实现正负号数字排序?给个例子


虚拟模式是不能排序的,因为控件什么都不管,没有数据当然就不支持排序了。结果集我放在 arrresult数组中,要排序就自己写代码实现,然后再显示数据吧。排序程序我没有写,只写了显示数据的代码。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 22:35 , Processed in 0.041861 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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