Artículo Traducir Números a Palabras
Autor / Fuente Soporte Técnico de MS / Harvey Triana
Tema General
Creado Diciembre 26 de 1998

Traducir Números a Palabras

Traducir Números (Moneda) a Palabras en Ingles o Español


Este articulo expone dos funciones para  traducir números a palabras en Ingles y Español respectivamente. Aunque este tema ha sido tratado ampliamente por buenos programadores, presento una alternativa con las funciones ConvertCurrencyToEnglish y ConvertCurrencyToSpanish. La primera esta basada en un articulo del soporte técnico de Microsoft, modificada para moneda variable y algo más. De otra parte, ConvertCurrencyToSpanish es escrita totalmente por mi. Ambas funciones fueron empaquetadas en clases para su reutilización en forma de objetos.


numtowords.gif (7360 bytes)


Esta figura ilustra el ejemplo incluido en ejecución.


Utilizando las Funciones

Para utilizar una de estas funciones, simplemente se crea un objeto a nivel de modulo (por ejemplo el formulario que emplea la función en particular) y se invoca como método del objeto. Aunque puede que prefiera usar como una simple función, al hacer las clases GlobalMultiUse.

Normalmente usaremos solo conversión a español o solo conversión a ingles. Esta es una de las razones por las que empaquete el código en clases diferentes.  Siempre prefiero un código ordenado, sin embargo, la conversión a Español, es tan heterogénea, que resulta imposible un código limpio. - ¿A quien se le ocurrió que Veinte y Tres se debiera escribir como Veintitrés?. Realmente en este case es más practico el idioma ingles. En fin, todos los caso están dados.

Este es un ejemplo para usar la conversión a Español. Digamos un Formulario con un TextBox (txt_Valor), y un Label (lbl_NumeroEnPalabras), para mostrar el valor en palabras,  depuse que el usuario da [Enters] a la caja de entrada.

Option Explicit

Private Const Moneda = "Dólares"
Private sw As cls_NumSpanishWord

Private Sub Form_Initialize()
    Set sw = New cls_NumSpanishWord
End Sub

Private Sub Form_Terminate()
    Set sw = Nothing
End Sub

Private Sub txt_Valor_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
       lbl_NumeroEnPalabras = sw.ConvertCurrencyToSpanish(txt_Valor,
Moneda)
    End If
End Sub

Realmente es muy simple.

Como característica particular ConvertCurrencyToSpanish incluye el parámetro opcional FeminineGenerous, el cual será útil para las monedas cuyo genero es femenino, por ejemplo Pesetas (estaría mal decir Trescientos Pesetas, lo correcto sería Trescientas Pesetas).

Para usar como componente, simplemente compile el proyecto DLL com_NumbersToWords. Luego creamos la referencia (el nombre de la referencia es Library Numbers To Words) en el programa de gestión que empleara el componente (Soluciones Visual Basic, Access, Word, etc.)


Como Clases Globales

Si se va a emplear en varios formularios, o en aplicaciones de Access, - por ejemplo, es convneniente cambiar la propiedad Intancing de la Clase a 6-GlobalMultiUse. Esto permitira la utilización de las funciones sin crear el objeto explicitimante. Por ejemplo, en una de mis aplicaciones de Access, aparece la instrucción:

Private Sub Valor_AfterUpdate()
    lblValorLetras.Caption = ConvertCurrencyToSpanish( _

                             [Valor], _
                             IIf([Tipo de Moneda] = DOLARES, "Dólares", "Pesos"))
End Sub

Valor es un combre de campo tipo moneda, y Tipo de Moneda es otro campo para definir el moneda con que se almacena el campo.

En Word también tiene cabida el componente. Primero que todo abrimos el editor VB de Word (Alt+F11) y creamos la Referencia al la DLL (igual que en Visual Basic). Generalmente lo que hago para Word es por ensayo y error, hasta que doy con lo que quiero. Por ejemplo que le parece - ¿ escribir un número, luego seleccionar el número (doble-clic), y dar clic a un botón de un Toolbar, y que el número se convierta en palabras ?. Pues lo logre. El código en el proyecto NORMAL, módulo NewMacros, debe aparecer:

Sub NumerosPalabras()
    '
    ' NumToWords Macro
    ' Números a Palabras
    '
    Selection.Text = ConvertCurrencyToSpanish(Selection.Text, "Pesos")
End Sub

La forma de crear el bóton en una Toolbar personalizada se lo dejo de tarea. Lo importante es que se puede.


Download NumbersToWordsDownload NumbersToWords (7 kb). Incluye un grupo de proyectos con la DLL y un ejemplo (se muestra en la imagen que acompaña este articulo). Cree una carpeta con el nombre NumbersToWords y decodifique el ZIP. Luego cargue el grupo de proyectos grp_NumbersToWords.vbg


Harvey Triana
Derechos Reservados. Autorización solo para programación