Look at your code.
What do you think this does?
Else
StrExport = StrExport.Substring(0, StrExport.Length - 1)
StrExport &= Environment.NewLine
End If
Every time you go round your loop and find an non-selected row, you discard all information collected by previous iterations ... so of course you only get one row!
And thirty seconds with the debugger would have shown you that!
As I've said before: stop guessing; start thinking. It really does work out easier and quicker in the long term.
And don't concatenate strings like that: strings are immutable, so every "&" operation creates a new, bigger string. If you want to build a large string, use a StringBuilder - it's a lot more efficient!