excel - 尝试将选定树视图节点的文本复制到剪贴板,但只获取剪贴板中的最后一个节点
问题描述
我正在使用 excel/vba 创建树结构。节点前面有复选框。我正在使用递归函数来遍历节点并复制选定/选中节点的文本。我试图把它放在变量、excel 行、数组中,但我只得到最后选择的节点的文本。
下面是递归函数。
我将根节点传递给它。如何复制选定的项目?
Public Sub TraverseTree(objNode As Node)
Dim objSiblingNode As Node
Set objSiblingNode = objNode
Do
If objSiblingNode.Checked Then
Debug.Print objSiblingNode.Text
End If
If Not objSiblingNode.Child Is Nothing Then
Call TraverseTree(objSiblingNode.Child)
End If
Set objSiblingNode = objSiblingNode.Next
Loop While Not objSiblingNode Is Nothing
End Sub
VBA 代码中定义的树节点
'Parent Nodes
TreeView1.Nodes.Add Key:="P1", Text:="Phone is down/blank screen"
TreeView1.Nodes.Add Key:="P2", Text:="phone is showing Configuring IP"
TreeView1.Nodes.Add Key:="P3", Text:="Phone stuck at registering"
'Child for P1
TreeView1.Nodes.Add "P1", tvwChild, "ch1", "Is the phone getting power?"
'Child for ch1
TreeView1.Nodes.Add "ch1", tvwChild, "ch1.1", "Yes"
TreeView1.Nodes.Add "ch1", tvwChild, "ch1.2", "No"
'Child for ch1.1
TreeView1.Nodes.Add "ch1.1", tvwChild, "ch1.1.1", "Do you see any buttons lit up, what are they?"
解决方案
所以,请尝试下一个场景:
- 在表单模块顶部声明一个
Private Variable
(在声明区域中):
Private strWiew As String
- 你
TraverseTree
Sub
将成为:
Private Sub TraverseTree(objNode As Node)
Do
If objNode.Checked Then
If strWiew = "" Then
strWiew = objNode.Text
Else
strWiew = strWiew & vbCrLf & vbTab & objNode.Text
End If
End If
If Not objNode.Child Is Nothing Then
Call TraverseTree(objNode.Child)
End If
Set objNode = objNode.Next
Loop While Not objNode Is Nothing
End Sub
- 您需要将结果字符串放入剪贴板的函数:
Dim clipboard As New MSForms.DataObject
clipboard.SetText strNode
clipboard.PutInClipboard
End Sub
- 您的
Copy
按钮Click
事件将变为:
Private Sub CommandButton1_Click()
Dim objNode As Node
Set objNode = TreeView1.Nodes("P1")
strWiew = ""
TraverseTree objNode
CopyToClipboard strWiew
End Sub
- 运行您的应用程序。检查您希望返回其文本的树节点并按下
Copy
按钮。打开记事本、写字板、Word(任何文本编辑器)并尝试Ctrl + V
...
推荐阅读
- javascript - 图像地图为圆形区域设置背景图像
- .net - 如何使用 OrchardCore CMS 通过 GraphQL 从 MediaFields 获取所有内容?
- python - 通过传递坐标在棋盘上划出白色方块
- asp.net-core - 动态创建和销毁 Blazzor 客户端组件?
- ios - NSRangeException 由 String.subscript.getter
- python - 如何在python中的for循环函数的最后删除空格/跳转到下一行
- c# - 使用 Web API 在不写入磁盘的情况下读取 HTTP 文件和表单数据
- macos-catalina - 由于 OS Catalina,FICO Xpress Workbench 无法工作,产生错误“spawn mosel ENOENT”
- css - CSS变换过渡问题
- laravel - 404异常的Laravel自定义页面