El método que tú pones para contar palabras y el que yo he usado en realidad son parecidos, yo para recorrer todo el texto lo único que hago es un For.
For i=1 To Len(RichTextBox.Text) 'Len(RichTextBox.Text) devuelve el número de caracteres que contiene el RichTextBox
If Mid(RichTextbox.Text, i, 1) = " " Then
cont = cont + 1
End If
Next i
Es sencillo porque con la función Len saco el número de caracteres total del TextBox, luego digo que lo recorra desde el caracter 1 hasta el número total de caracteres.
Luego la función Mid funciona así: Mid(RichTexBox.Text, i, 1)
Es algo así: coge el caracter de la posición i de RichTexBox.Text tomado de 1 en 1.
Así recorres cada caracter y compruebas si el caracter es un espacio, como el espacio siempre separa las palabras, cada espacio que encuentras sumas 1 ya que es una palabra más. Y como tras la última palabra no hay espacio pues al final del proceso le sumo uno más.
Lo de vdata(i) es en realidad un array separado por la función, Split un ejemplo sería:
Dim data as String
Dim vdata as Variant
data="hola|adios|bien|mal"
vdata=Split(data, "|")
La función Split lo que hace es dividir a partir del caracter o caracteres que pongas en la función, es algo así como: Separa lo que hay en data a partir del caracter "|"
Entonces esto daría:
vdata(0) = "hola"
vdata(1) = "adios"
vdata(2) = "bien"
vdata(3) = "mal"
Pues yo he hecho lo mismo pero usando como separador los espacios. Así obtuve cada palabra separada.
Y a la pregunta de si se puede usar este método para otros controles, la respuesta es sí. En labels, en textox, en listbox, en listviews... etc.
Espero haberte aclarado un poco, si no entiendes algo, sólo tienes que preguntarlo.
Saludos!