Te comparto esta función que la adapté a tu muestra. Probala y comentame si cumple con tus requisitos.
Aquí una muestra de los resultados, según tu ejemplo:
Function NumLetras(Valor As Currency)
Dim Cantidad As Currency, Centavos As Currency
Dim Digito As Byte, PrimerDigito As Byte, SegundoDigito As Byte, TercerDigito As Byte, NumeroBloques As Byte, BloqueCero As Byte
Dim Bloque As String
Dim ValorEntero As Long
Dim Unidades As Variant, Decenas As Variant, Centenas As Variant, I As Variant
Valor = Round(Valor, 2)
Cantidad = Int(Valor)
ValorEntero = Cantidad
Centavos = (Valor - Cantidad) * 100
Unidades = Array("un", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintún", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve")
Decenas = Array("diez", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa")
Centenas = Array("ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
NumeroBloques = 1
Do
PrimerDigito = 0
SegundoDigito = 0
TercerDigito = 0
Bloque = ""
BloqueCero = 0
For I = 1 To 3
Digito = Cantidad Mod 10
If Digito <> 0 Then
Select Case I
Case 1
Bloque = " " & Unidades(Digito - 1)
PrimerDigito = Digito
Case 2
If Digito <= 2 Then
Bloque = " " & Unidades((Digito * 10) + PrimerDigito - 1)
Else
Bloque = " " & Decenas(Digito - 1) & IIf(PrimerDigito <> 0, " y", Null) & Bloque
End If
SegundoDigito = Digito
Case 3
Bloque = " " & IIf(Digito = 1 And PrimerDigito = 0 And SegundoDigito = 0, "cien", Centenas(Digito - 1)) & Bloque
TercerDigito = Digito
End Select
Else
BloqueCero = BloqueCero + 1
End If
Cantidad = Int(Cantidad / 10)
If Cantidad = 0 Then
Exit For
End If
Next I
Select Case NumeroBloques
Case 1
NumLetras = Bloque
Case 2
NumLetras = Bloque & IIf(BloqueCero = 3, Null, " mil") & NumLetras
Case 3
NumLetras = Bloque & IIf(PrimerDigito = 1 And SegundoDigito = 0 And TercerDigito = 0, " millón", " millones") & NumLetras
End Select
NumeroBloques = NumeroBloques + 1
Loop Until Cantidad = 0
NumLetras = Trim(NumLetras) & " pesos (" & Format(Str(Centavos), "00") & "/100 mxn)"
'1ra letra en mayúsculas.
NumLetras = UCase(Left(NumLetras, 1)) & Mid(NumLetras, 2, Len(NumLetras) - 1)
End Function