大家好,欢迎来到IT知识分享网。
Office2019版本以下自带的 Microsoft Treeview Control version 6.0控件只支持32位office,微软发布更新后还经常会出现问题,,,而且在64位office创建的Treeview经常在32位office也使用不了。
JKP开发并免费发布了100%VBA TreeView,不附带任何条件!
不调用任何外部 DLL / OCX,只用 VBA 类 + MSForms.Frame 动态生成树节点。
- 纯 VBA:一个 .cls 文件即可引用
- 零部署:复制即用,32/64 位 Office 通吃
- 零权限:无需管理员注册 OCX
- 零成本:MIT 协议,可商业再分发
架构速写
┌────────────────────────────────────────┐ │ Access/Excel/Word 宿主窗体 │ │ └─ subTreeView(子窗体/子报表) │ │ └─ MSForms.Frame(动态画布) │ │ ├─ Label → 节点文字 │ │ ├─ Label → +/- 展开按钮 │ │ ├─ Label → CheckBox │ │ └─ Image → 节点图标 │ └────────────────────────────────────────┘
- 每个节点 = 4 个轻量级控件
- 延迟加载:折叠节点不生成控件,10 000 节点秒开
- 事件冒泡:统一路由到 clsTreeView 事件
一次编写,三端运行
平台 |
实测版本 |
备注 |
Windows |
Office 2010 32-bit → 2024 64-bit |
Access 子窗体、Excel 用户窗体 |
macOS |
Office 365 16.80 (Apple Silicon) |
无 ActiveX,完美运行 |
RDS/Citrix |
Server 2019 |
无需注册 OCX,降低运维成本 |
一分钟上手
Step 1 创建一个空白的窗体,取名为窗体1
Step 2 把窗体subTreeview拖入窗体1里
Step 3 窗体1 贴入VBA代码 :
Option Compare Database Option Explicit Private mfrImages As MSForms.Frame Public WithEvents tv As clsTreeView '------------------------------------------------- ' 主窗体加载:初始化 TreeView '------------------------------------------------- Private Sub Form_Load() '1. 绑定 TreeView 对象 Set tv = Me.subTreeView.Form.pTreeview '★模块级对象 Set mfrImages = Me.subTreeView.Form.Controls("frImages").Object '2. 外观设置 tv.CheckBoxes = True tv.Indentation = 18 tv.NodeHeight = 16 tv.ShowLines = True tv.ShowExpanders = True '3. 把图标 Frame 交给 TreeView(关键) Set tv.Images = mfrImages '4. 构造树 Dim root As clsNode Set root = tv.AddRoot("R1", "根节点", "FolderClosed", "FolderOpen") With root .Bold = True .ForeColor = vbRed .Expanded = True End With Dim c1 As clsNode Set c1 = root.AddChild("C1", "子节点 1", "NOTE03", "NOTE04") c1.ForeColor = vbBlue Dim c11 As clsNode Set c11 = c1.AddChild("C11", "子节点 1-01", "FLGUK", "GreenTick") c11.ForeColor = vbBlue Dim c12 As clsNode Set c12 = c1.AddChild("C12", "子节点 1-02", "Scroll") c12.ForeColor = vbBlue Dim c2 As clsNode Set c2 = root.AddChild("C2", "子节点 2", "OpenBook", "Scroll") c2.ForeColor = vbBlue c2.AddChild "C21", "子节点 2-01", "FolderClosed", "FolderOpen" c2.AddChild "C22", "子节点 2-02", "FolderClosed", "FolderOpen" '5. 渲染 tv.Refresh End Sub Private Sub Form_Unload(Cancel As Integer) Set tv = Nothing End Sub '------------------------------------------------- ' 节点单击事件 '------------------------------------------------- Private Sub tv_Click(Node As clsNode) MsgBox "你点击了:" & Node.Caption & vbCrLf & _ "Key = " & Node.Key & vbCrLf & _ "Level = " & Node.level, _ vbInformation, "TreeView Click" End Sub '------------------------------------------------- ' 勾选框改变事件 '------------------------------------------------- Private Sub tv_NodeCheck(Node As clsNode) MsgBox Node.Caption & _ IIf(Node.Checked = -1, " 选中", " ?") End Sub


获取方式
GitHub 关键词搜索:JKP VBA TreeView
或直接访问:
https://github.com/JKP-Application-Development-Services/VBA-TreeView
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/186799.html