*Function TVLister >Lparameters toTV > Local lnIndex,lnLastIndex > _Cliptext='' > With toTV > lnIndex = .Nodes(1).Root.FirstSibling.Index > lnLastIndex = .Nodes(1).Root.LastSibling.Index > _GetSubNodes(lnIndex,toTV,lnIndex) > Do While lnIndex # lnLastIndex > lnIndex = .Nodes(lnIndex).Next.Index > _GetSubNodes(lnIndex,toTV,lnIndex) > Enddo > EndWith > Return _Cliptext > >Function _GetSubNodes > Lparameters tnIndex, toTV, tnRootIndex > Local lnIndex, lnLastIndex > With toTV Thank you very much, i will test it. > WriteNode(tnIndex,toTV, tnRootIndex) > If .Nodes(tnIndex).Children > 0 > lnIndex = .Nodes(tnIndex).Child.Index > lnLastIndex = .Nodes(tnIndex).Child.LastSibling.Index > _GetSubNodes(lnIndex,toTV,tnRootIndex) > Do While lnIndex # lnLastIndex > lnIndex = .Nodes(lnIndex).Next.Index > _GetSubNodes(lnIndex,toTV,tnRootIndex) > Enddo > Endif > Endwith > >Function WriteNode > Lparameters tnCurIndex, toTV,tnRootIndex > Local lnRootIndex, lnIndex, lcPrefix, lcKey, lnLevel > lnIndex = tnCurIndex > > With toTV > lcPrefix = '+-' + .Nodes(lnIndex).Text > lnLevel = 0 > Do While lnIndex # tnRootIndex > lnIndex = .Nodes(lnIndex).Parent.Index > lcPrefix = Iif(.Nodes(lnIndex).LastSibling.Index = lnIndex,' ','|')+Space(3)+lcPrefix > lnLevel = lnLevel + 1 > EndDo > _Cliptext = _Cliptext + lcPrefix + Chr(13) > Endwith >Cetin