The CSTR() function is working but the range object is helpfully converting your numeric value back into a real value instead of text because thats what Excel likes
So you need to tell it that it should be text and not a number.
Dim strValue As String
Dim rng As Range
For Each rng In Selection.Cells
strValue = CStr(rng.Value)
rng.NumberFormat = "@"
rng.value = strValue