I know that all the "" sign are empty cells
The For ColNdx/Next ColNdx loop is where the text string is built for writing each line of text, so this is the loop you need to change if each row is not looking right. It appears that the code puts two Chr(34)'s (quotation marks I believe) when it encounters an empty cell. So I suspect you need to change this to what you want it to put in when it encounters an empty cell.
As for using the Selection object rather than the entire activesheet object change
ExportToTextFile FName:=CStr(FileName), Sep:=CStr(Sep), _
SelectionOnly:=False, AppendData:=False
to
ExportToTextFile FName:=CStr(FileName), Sep:=CStr(Sep), _
SelectionOnly:=TRUE, AppendData:=False
Then the code looks like it should only use the block of cells selected (the Selection object) for the export rather then the entire worksheet.
I'm not sure why your attempt to hard code the row and column numbers into the activesheet.usedrange failed. I expect it has to do with the way VBA handles only one index to the .Cells property. I have always used two indices in the cells property (.cells(3,6).row), so perhaps it isn't really seeing rows 3 through 104. If you continue in this way, why not simply use?
startrow=3
startcol=6
endrow=104
endcol=6
Bookmarks