100% VBA 原生树形控件TreeView:在 32/64 位 Office中无烦恼

100% VBA 原生树形控件TreeView:在 32/64 位 Office中无烦恼Office2019 版本以下自带的 Microsoft Treeview Control version 6 0 控件只支持 32 位 office 微软发布更新后还经常会出现问题 而且在 64 位 office 创建的 Treeview 经常在 32 位 of

大家好,欢迎来到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 

100% VBA 原生树形控件TreeView:在 32/64 位 Office中无烦恼

100% VBA 原生树形控件TreeView:在 32/64 位 Office中无烦恼



获取方式

GitHub 关键词搜索:JKP VBA TreeView
或直接访问:

https://github.com/JKP-Application-Development-Services/VBA-TreeView


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

(0)
上一篇 2025-08-27 08:10
下一篇 2025-03-04 15:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信