每当在Excel-VBA中选择或取消选择其父节点时,如何自动选择或取消选择所有子节点?

时间:2019-06-07 11:43:15

标签: excel vba

自动选择/取消选择Excel-VBA的Treeview的父复选框。

我从以下来源获得了一个代码:

  1. https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=48560&lngWId=1

  2. http://www.vbforums.com/showthread.php?249131-VB-Check-All-Treeview-Children

假设Treeview为Treeview1,我将两者结合并编写了代码。

Polygon

我希望代码最少。

1 个答案:

答案 0 :(得分:0)

我正在做类似的事情。这应该适合您的情况。之所以有效,是因为第一个子节点将始终位于当前节点之后的索引处。递归函数将在下一个子项遍历其余子项后返回其索引。

这仅在您按树中显示的方式加载节点时起作用。

Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
    CheckChildAndGetNextIndex Node,Node.Checked
End Sub

Private Function CheckChildAndGetNextIndex(currentNode As Node, val as boolean) As Integer
    Dim i As Integer

    currentNode.Checked = val

    CheckChildAndGetNextIndex = currentNode.index + 1

    For i = 1 To currentNode.Children
        CheckChildAndGetNextIndex = CheckChildAndGetNextIndex(TreeView1.Nodes(CheckChildAndGetNextIndex), val)
    Next
End Function