郑州经济技术开发区协同办公系统,seo营销策略,秦皇岛市建设局网站关于装配式专家,开公司的流程学习资源#xff1a;《Excel VBA从入门到进阶》第60集 by兰色幻想本节讲Treeview控件。TreeView控件是以树形结构显示数据的控件。利用TreeView控件#xff0c;可以设计出树形结构图#xff0c;便于用户选择不同的项目。总公司人事结构是一级节点#xff0c;公司一、公司二…学习资源《Excel VBA从入门到进阶》第60集 by兰色幻想本节讲Treeview控件。TreeView控件是以树形结构显示数据的控件。利用TreeView控件可以设计出树形结构图便于用户选择不同的项目。总公司人事结构是一级节点公司一、公司二、公司三是二级节点部门是三级节点人员是四级节点首先需要把treeview控件添加到工具箱依旧在工具箱右键附加控件找到Microsoft TreeView Control确定就可以在工具箱找到它了。一、数据导入treeview是由节点构成的第一个节点叫顶级节点其余的是子节点。例把以下公司结构表做成Treeview。可以看到已经把各级别标记为不同颜色代码也是递进有层次感的可以单从员工的代码看出他所属的公司和部门。下面以一个结构图展示节点分布代码思路讲解treeview控件添加节点的ADD方法Treeview1.Nodes.Add上一级节点的索引值是否为子节点节点的索引值节点上显示的文字图标的索引号选取节点时的图标TreeView1.Nodes.Add(relative, relationship, key, text, image)注意① 节点对象Nodes② 如果一级节点的索引值和创建节点的位置为空的话则表示创建是的顶级节点。③ 节点的索引值不能是纯数字。④ 子节点的表示tvwChild。⑤ 选取节点时的图标可选前四个参数必须。套到例子里写创建顶级节点的语句Set Nodx TreeView1.Nodes.Add(, , 总公司, 总公司人事结构, 1) ①上一级节点的索引值因为是顶级节点所以没有上一级节点的索引值略过不填②是否为子节点顶级节点不是子节点略过不填不填内容也要写逗号啊③节点的索引值设置为总公司④节点上显示的文字总公司人事结构⑤选取节点时的图标1上节内容imagelist因为有图标所以记得也要在窗体插入imagelist控件。**假设不设置选取节点时的图标代码可写为Set Nodx TreeView1.Nodes.Add(, , 总公司, 总公司人事结构) 最后的逗号可不写因为这项参数是可选的。写创建子节点公司一的语句Set Nodx TreeView1.Nodes.Add(总公司, tvwChild, A C2, C1 ( C2 ), 2)①上一级节点的索引值“总公司”。②是否为子节点是所以填tvwChild。③节点的索引值因为不能是纯数字为方便记忆把表格中的代码赋值给C2,写成 A C2。以公司一为例那么它的索引值就是“A1”。④节点上显示的文字C1 ( C2 )把表格中的级别赋值给C1。以公司一为例那么它将会显示为“公司一1”。⑤选取节点时的图标2imagelist控件的序号2图片。2. 代码逻辑①要显示图标所以先要配置好lmagelist控件。②循环语句循环获取级别和代码。③判断语句根据代码判断并生成对应级别的节点。完整代码Private Sub UserForm_Initialize()Dim Nodx As nodeTreeView1.ImageList ImageList1 从imagelist控件中提取图片
Set Nodx TreeView1.Nodes.Add(, , 总公司, 总公司人事结构, 1) 总公司是顶级节点的索引值,For x 2 To Range(B65536).End(xlUp).RowC1 Cells(x, 1)C2 Cells(x, 2)If Len(C2) 1 Then 如果代码长度为1说明是顶级节点下的二级节点Set Nodx TreeView1.Nodes.Add(总公司, tvwChild, A C2, C1 ( C2 ), 2)ElseIf Len(C2) 3 Then 如果代码长度为3说明是三级节点Set Nodx TreeView1.Nodes.Add(A Left(C2, 1), tvwChild, A C2, C1 ( C2 ), 3)ElseIf Len(Cells(x, 2)) 6 Then 如果代码长度为6说明是四级节点Set Nodx TreeView1.Nodes.Add(A Left(C2, 3), tvwChild, A C2, C1 ( C2 ), 4)End IfNextEnd Sub运行演示二、数据读取有数据导入就有数据读取。如何让程序识别到我们点击了哪个节点呢还是接上例想达到如下效果从图中可以看到每点击一个节点旁边的文本框都会显示它的信息。代码思路讲解表示选取的节点SelectedItem 正在选取的节点SelectedItem.Key 正在选取节点的索引值2. 节点包含的信息第一个信息是它的索引值刚刚除了顶级节点的索引值特别设置为“总公司”其他索引值都是“A代码”代码长度不一。第二个信息是它显示出来的内容text除了顶级节点特别设置为“总公司人事结构”其他都是“级别名代码”。所以我们需要根据代码长度判断它所在的级别使用判断语句。①如果代码长度为2表明它是二级节点公司名称就是节点的text注意去除后面的“代码”部门和姓名没有代码是去除首字母的索引值。②如果代码长度为4表明它是三级节点公司名称是它的上一节点的text部门是当前节点的text姓名没有代码是去除首字母的索引值。上一节点 Nodes.Parent②如果代码长度为7表明它是四级节点公司名称是它的上上一节点的text部门是上一节点的text姓名当前节点的text代码是去除首字母的索引值。上上一节点 Nodes.Parent.Parent3. 去除Text后面的“代码“内容因为比较重复写一个VBA自定义函数。代码和级别的长度不一所以不能直接用Left需要再加一个函数组合用用字符查找函数InStr查找”“的位置用instr算出left的截止位置。Function 截取名称(AAA)截取名称 Left(AAA, InStr(1, AAA, () - 1)
End Function完整代码Private Sub TreeView1_Click()
Dim MyItem As nodeSet MyItem TreeView1.SelectedItem SelectedItem正在选取的节点If Len(MyItem.Key) 2 Then SelectedItem.Key 正在选取节点的索引值TextBox1 截取名称(MyItem.Text) 如果是顶级节点,公司名称等于节点的显示内容(去掉代码)TextBox2.Value TextBox3.Value TextBox4 Replace(MyItem.Key, A, ) 替换掉A后的代码
ElseIf Len(MyItem.Key) 4 ThenTextBox1 截取名称(MyItem.Parent.Text) MyItem.Parent.Text上一级节点的显示文本TextBox2 截取名称(MyItem.Text)TextBox3.Value TextBox4 Replace(MyItem.Key, A, )
ElseIf Len(MyItem.Key) 7 ThenTextBox1 截取名称(MyItem.Parent.Parent.Text)TextBox2 截取名称(MyItem.Parent.Text)TextBox3 截取名称(MyItem.Text)TextBox4 Replace(MyItem.Key, A, )End IfEnd Sub