Hola.
El problema que tienes es que tu tomas del texto carácter a carácter, luego en el bloque select case le dices que si es uno de aquellos a 'b' se le añada tal... pero claro elo código morse no es un código basado en 1 sólo carácter sino en varios, por tanto puesto que sólo tomas un carácter en el bloque select case sólo coincidrá cuando sea '.' ó '-' , es decir punto o raya (E y T), porque son los únicos caso de un sólo carácter.
La solución no es posible. De hecho para que fuera sencillo debería haber un carácter separador entre cada signo del código, sino es así no hay manera de saber si la secuencia '-.-.-.' es ';' o si es 'NNN' ó 'KR' ó 'CN', etc....
El código ha sido abandonado de los procesos digitales por los errores ineludibles cuando una máquina intenta interpretar el 'acento' de cada conferenciante. Si hubiera un tercer signo separador, sería otra cosa, o bien una regla de separación , por ejemplo en binario se usan también sólo dos dígitos pero para interpretar un cóodigo se establece previamente el tamaño de cada 'palabra', casos: byte= 8 códigos, Integer=32 códigos, etc... Caudno se teclea, el separador es una pausa en el tiempo, que una persona puede interpretar correctamente con cierto adiestramiento, pero en un texto lineal, es prácticamente imposible, habría que hacer un programa de inteligencia artificial primero para crear un contexto y luego probar si lo que sigue es consecuente con el contexto, si no lo es habría que recrear un nuevo contexto, etc... Todavía no tenemos esa potencia de análisis apenas hemos emepezado a procesar el lenguaje humano, como saber si la secuencia es un texto humano o los datos de la matriz de una imagen... o un ruido previo para ofuscar y entorpecer a un posible oyente... ?
No te rompas los cuernos con morse, aunque si es por precticar siempre aprenderás algo....