Look at the Characters object of a shape (in the developer reference)
You've got shp.Text, and also shp.Characters.
The Characters object allows you to select runs of text via the Begin
and End properties. This allows you to programatically manipulate bits
of text on a shape.
I'm not sure if you can visually select sub-strings in the UI, however.