El contenido de un textbox es una cadena de texto. Cuando haces un 'val' interpreta la cadena como un valor numérico hasta donde pueda hacerlo.
En este punto vb interpreta un punto dentro de una cadena de texto como no numérico, por eso te toma sólo la parte entera.
Hay 2 opciones:
A ) Remplazar la coma por un punto
dim var1 as double
Text1.text= "789,56"
text1.text= replace$(text1.text,",",".",1,1) ' sólo cambiamos la primera coma encontrado
var1=val(text1.text)
msgbox var1
en este caso habiendo una coma en el texto si no se remplaza haría esto:
text1.text="789,56"
...
msgbox var1 resultado= 789
B ) Eliminar la función val, forzando a que se realice una conversión implícita .
dim var1 as double
Text1.text= "789,56"
var1= text1.text
msgbox var1
En este caso si hubiera 1 punto en vez de una coma haría esto:
text1.text="789.56"
...
msgbox var1 resultado= 78956