Dein Code ist ein wenig falsch formatiert. Das hier sollte funktionieren:
If number > 0 Then
Dim aUnits() As String = Array("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")
Dim aTens() As String = Array("Zero'", "Ten", "Twenty", "Thity", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety")
If words <> "" Then words = words + "and "
If number < 20 Then
words = words + aUnits(number)
Else
words = words + aTens(number / 10)
If (number Mod 10) > 0 Then words = words + "_" + aUnits(number Mod 10)
End
End If
Um das eben noch zu beantworten: Zumindest unter macOS/iOS gibt es dafür auch NSNumber, das als Formatter-Option auch einen SpelloutStyle besitzt. Die API ließe sich mit ein paar Declares erschließen. Oder plattformübergreifend vermutlich diese JavaScript-Bibliothek.