对比1楼你写的和这个有什么不同:
Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
For Each nd As WinForm.TreeNode In e.node.Nodes '同步子节点选中状态
nd.Checked = e.Node.Checked
Next
If e.node.ParentNode IsNot Nothing Then '去掉父节点选中状态
e.node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In trv.AllNodes
If nd.Level > 0 AndAlso nd.ParentNode.Checked Then '如果父节点选中
Continue For '跳过此节点,处理下一结点
End If
If nd.Checked Then
If flt > "" Then
flt = flt & " Or " '注意用or而不是And
End If
If nd.Level = 0 Then '注意下面的条件都要用括号括起来
flt = flt & "(大类 = '" & nd.Text & "')"
ElseIf nd.Level = 1 Then
flt = flt & "(大类= '" & nd.ParentNode.Text & "' And 二类 = '" & nd.Text & "')"
Else
flt = flt & "(大类= '" & nd.ParentNode.ParentNode.Text & "' And 二类 = '" & nd.ParentNode.Text & "' And 三类 = '" & nd.Text & "')"
End If
End If
Next
Tables("文件管理").Filter = flt
[此贴子已经被作者于2012-7-18 23:03:49编辑过]