You are right. I don't think there is a way to select nodes from VBA so that user can later work with them. However I think there is a workaround. The trick is that each time to move or do something to nodes, they get selected internally. So you can perform a non-destructive operation on the nodes, for example, move them by zero distance. You'll have your selection:
Code:
ActiveShape.Curve.SubPaths(2).Nodes.All.Move 0, 0
Of course, you need to be in Shape edit tool mode to see the selection. If you have the Pick tool selection, you won't notice anything.
You can force the Shape tool to be selected before you perform your operation:
Code:
ActiveTool = cdrToolNodeEdit
Here is a sample macro for you which allows you to select all nodes of one or more subpaths. First, you select some nodes, then run the macro. It will select all the nodes of the subpaths on which the originally selected nodes reside. For example, if you need to select all nodes of a subpath, just select any node on the subpath and run the macro. You can select two nodes from two different subpaths to have all nodes from those subpaths to be selected...
Code:
Sub SelectSubpaths()
Dim nr As New NodeRange
Dim n As Node
If ActiveShape Is Nothing Then
MsgBox "Nothing selected", vbCritical
Exit Sub
End If
If ActiveShape.Type <> cdrCurveShape Then
MsgBox "Please select a curve", vbCritical
Exit Sub
End If
If ActiveShape.Curve.Selection.Count = 0 Then
MsgBox "Please select one or mode nodes and try again", vbCritical
Exit Sub
End If
' Go through each selected node, determine which subpath it is on,
' get all the nodes from the subpath and add them to the range.
' If a subpath's nodes are already in the range, nr.AddRange will no nothing
For Each n In ActiveShape.Curve.Selection
nr.AddRange n.SubPath.Nodes.All
Next n
' Now create selection of all selected subpaths
nr.Move 0, 0
End Sub
As you can see the actual code is quite simple. There are a few sanity checks at the beginning, but there is nothing fancy about that either...
I hope this helps.