Excel 尝试将选定treeview节点的文本复制到剪贴板,但仅获取剪贴板中的最后一个节点
我正在使用excel/vba创建树结构。节点前面有复选框。我使用递归函数遍历节点并复制选定/选中节点的文本。我试图把它放在变量、excel行、数组中,但我只得到最后一个选定节点的文本 下面是递归函数 我正在将根节点传递给它。如何复制所选项目Excel 尝试将选定treeview节点的文本复制到剪贴板,但仅获取剪贴板中的最后一个节点,excel,vba,Excel,Vba,我正在使用excel/vba创建树结构。节点前面有复选框。我使用递归函数遍历节点并复制选定/选中节点的文本。我试图把它放在变量、excel行、数组中,但我只得到最后一个选定节点的文本 下面是递归函数 我正在将根节点传递给它。如何复制所选项目 Public Sub TraverseTree(objNode As Node) Dim objSiblingNode As Node Set objSiblingNode = objNode Do If o
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?"
因此,请尝试下一个场景:
私有变量
:TraverseTree
Sub
将成为:复制
按钮单击
事件将变为:Copy
按钮。打开记事本、写字板、Word(任何文本编辑器)并尝试Ctrl+V
你能编辑你的文章并分享(至少一张照片)你的工作表吗?当然。我会的。excel表中没有任何内容。一切都是在VBA代码中定义的。父母,孩子都没有在纸上,没有必要给我们看。。。但是,为了让上述代码返回节点子节点,它是如何在VBA中构建的?整个树结构是在Private Sub UserForm_Initialize()下定义的。在这种情况下,您必须在
TreeView1.Nodes
之间迭代,并检索您要查找的节点的文本值,当存在匹配项时,它会起作用,但也只是将一行(并非所有选定节点)添加到剪贴板上,这是最后一个选定节点的文本。我尝试了dataobject,但没有在函数中使用。@Munish Saxena:当然,只有一个节点。一次一个。。。事实上,你能展示(在一张图片中,如果不是可编辑的),你真正需要什么吗?是否希望字符串保留分析的节点文本及其所有子节点?最终用前面的选项卡表达?如果是,则必须构建并返回…是的,我希望将所有选中节点的文本从根节点到结束节点保存在剪贴板中。我可以和你们分享这张照片。。如果需要,我可以发送excel文件。我如何直接发送给你。@Munish Saxena:使用我的个人邮件(在我的个人资料中)。但请尝试解释/展示您希望字符串的外观。@Munish Saxena:或者使用传输站点并将链接放在这里。是一个可靠的网站,易于使用。。。
Private strWiew As String
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
Private Sub CommandButton1_Click()
Dim objNode As Node
Set objNode = TreeView1.Nodes("P1")
strWiew = ""
TraverseTree objNode
CopyToClipboard strWiew
End Sub