Inicio / Blog's y documentación / Blogs / El blog de Alejandro Sánchez - Lurkan

Anoche me puse a buscar alguna macro para convertir de número a letras y en cosa de 10 minutos me encontré uno, lo probé y me gusto, luego al otro dia me di cuenta que tenia unos detallitos y me propuse corregirlo, detalles menores cosa de paréntesis y cosas sencillas, como no se nada de basic de openoffice pero algo de programación no creo que fuera mucho problema y así fue, en cosa de otros 15 minutos estaba como queria y aqui dejo el resultado.

El macro original es de Néstor Londoño B. y lo encontre en http://user.services.openoffice.org/es/forum/viewtopic.php?f=21&t=806

Aquí pongo el macro y la explicacion el macro que pongo es el que yo modifique y se ajusta a lo que necesito.

El macro original funciona bien lo que yo cambie fue estética en la presentación para ajustarlo a mis gustos.

Instrucciones:

1 - Abra OOo en hoja de cálculo.


2 - Vaya a la barra superior <Herramientas> < Macros> < Organizar MacrosOpenOffice.org Basic>

se abre otra ventana <Macros básicas de OpenOficce>

Abra ahora <Mis Macros> <Standard>

en la derecha utilice <Administrar>

en la nueva ventana escoja <Nuevo>

se abre nuevo módulo y pulse <Aceptar> ahora <Editar> y Borre la Sub Main y End Sub; en éste espacio pegue la macro.

Cierre la Macro.

3 - Escriba un Número en una casilla y donde necesite que salga el texto ejecute la función Cnp() o Cnt()

Escribimos =cnp(A1) y ejecutamos la instrucción.[Enter]. donde A1 es la casilla donde esta el número.

REM  *****  BASIC  *****

Dim texno (41) as string

Function Cnp ( X as currency ) as string
'Dim Cnp$, X@
'X=50000
Dim A%,B%,E$,F$,N$,pEnsa$,F1%
Cnp = ""
Texto
if X = 0 then Exit Function
If X > 15000000000000 then 
    print "Número muy grande "
    Exit Function
End if      
N = Str(X)
for I = 1 to len(N)
    if Asc(mid$(N,I,1))= 46 then 
        E = left$ (N,I-1)
        F = right$ (N,(len(N)-I)
        F = left$ (F,2)
        F1 = Val (F)
        CT = I
    end if
next
NL = (len(E)-1) \ 3
NK = (len(E)-1) mod 3
if NK = 0 then
    NK = 3
    NL = NL-1
end if    
A = val(mid(E,2,NK))             
pEnsa = Escribe(A) + texno (NL+37)
if NL = 4 or NL = 2 then
    if A = 1 then
    pEnsa = pEnsa + "ón "
    else
    pEnsa = pEnsa + "ones "
    end if
end if
if NL = 3 and Val(mid(E,nk+2,3)) = 0 then
    pEnsa = pEnsa + "millones "
end if
for J = NK+2 to Len(E) step 3
    A=val(mid$(E,j,3))
    NL = NL - 1 
    if A > 0 then
        pEnsa = pEnsa & Escribe(A) + texno (NL+37)
        if NL = 2 then
            if A = 1 then
                pEnsa = pEnsa + "ón "
            end if 
            if A >1 then
                pEnsa = pEnsa + "ones "
            end if
        end if         
    end if 
next
if right(pEnsa,5) = "ones " or right(pEnsa,3) = "ón " then 
    pEnsa = pEnsa + "de "
end if
if pEnsa = "" then pEnsa = "Cero "
if pEnsa = "un " then
    pEnsa = pEnsa + "peso "
    else
    pEnsa = pEnsa + "pesos "
end if            
if F1 >=1 then   'México: If F = 0 then F = "00" 
    A = F
    'pen = Escribe ( A )'Si desea que las fracciones se escriba en texto entonces active estas dos lineas quitando el apostrofe inicial
  'pEnsa = pEnsa + "con " + pen + "céntimos "' y desactive la linea inferior, logicamente colocando el apostrofe. 
  pEnsa = pEnsa + "con " + F1 +"/100 " 'Formato "01" con F
End if          'Mex: Elimine línea 
pEnsa = Ucase("("+left(pEnsa,1))+ right(pEnsa,len(pEnsa)-1) + "M.N.)"
Cnp = pEnsa
End Function 

sub Texto ()
texno(0) = "es "
Texno(1) = "un "
Texno(2) = "dos "
Texno(3) = "tres "
texno(4) = "cuatro "
texno(5) = "cinco "
texno(6) = "seis "
texno(7) = "siete "
texno(8) = "ocho "
texno(9) = "nueve "
Texno(10) = "diez "
texno(11) = "once "
texno(12) = "doce "
texno(13) = "trece "
texno(14) = "catorce "
texno(15) = "quince "
texno(16) = "dieciséis "
texno(17) = "diecisiete "
texno(18) = "dieciocho "
texno(19) = "diecinueve "
texno(20) = "veint"
texno(21) = "treinta "
texno(22) = "cuarenta "
texno(23) = "cincuenta "
texno(24) = "sesenta "  
texno(25) = "setenta "
texno(26) = "ochenta "
texno(27) = "noventa "
texno(28) = "ciento "
texno(29) = "doscientos "
texno(30) = "trescientos "
texno(31) = "cuatrocientos "
texno(32) = "quinientos "
texno(33) = "seiscientos "
texno(34) = "setecientos "
texno(35) = "ochocientos "
texno(36) = "novecientos "
texno(37) = ""
texno(38) = "mil "
texno(39) = "mill"
texno(40) = "mil "
texno(41) = "bill" 
end sub
    
Function Escribe (ByVal A as integer)
dim escrito as string
dim NA as integer
dim NB as integer
NA = A
    if NA >= 100 then
        NB = NA \ 100
        NA = NA - NB *100
        if NB = 1 and NA = 0 then
            escrito = "cien "
        else
        escrito = texno(NB + 27)
        end if
    end if        
    NB = NA \ 10
       NA = NA -10 * NB 
    if NB > 2 then
        escrito = escrito & texno(NB + 18)
        if NA > 0 then
            Escrito = Escrito & "y " & Texno (NA)
        End if    
        NA = 0
    end if
    if NB = 2 then
        if NA = 0 then 
            escrito = escrito +    "veinte "
        end if
    if NA = 1 then 
            escrito = escrito +    "veintiún "
        end if
        if NA > 1 then
        escrito = escrito & texno(20) +"i" & texno (NA
        end if 
    end if
    NA = 10 * NB + NA
    if NA < 20 and NA > 0 then
        escrito = escrito & texno (NA)
    end if     
    Escribe = Escrito 
End function

Function Cnt ( X as currency ) as string
'Dim Cnl$, X@ 
'X=50000
dim FX$, PX$, Y as Variant, T as variant
Cnt = ""
Cnt = Cnp(X)
Y = X
If Y = 0 then Exit Function 
Reval ( Y ) 'Para México agregue if X - int ( X ) = 0 then T = ",00"
Cnt = Cnt + " (" + Y + ")" 'Cambiar CNT = Y + T + " (" + cnt + ")"
end function

Function Reval ( X     as Variant ) as Variant
Dim L as Integer    'Recibe un valor numérico y la da formato de moneda
Dim J as integer
Dim K as integer
Dim Y as variant
Dim FX as string
    X = Str ( X )
    X = Trim ( X )
    L = Len ( X )
    For J = L to 1 Step - 1
        If Mid (X, J, 1) = "," or Mid ( X, J, 1 ) = "."  then
            K = L  - J
            L = J - 1
            J = 0
        End If    
    next
    If K > 0 then FX = "," + Right ( X, K )
    X = left ( X, L )
    FX = Left ( FX, 3 )
    If Val ( FX ) = 0 then FX = ""
    If L <= 3 then Y = X  
    Do while Len ( X ) > 3 
        Y = "." + right ( X, 3 ) + Y
        X = left ( X, len( X ) - 3 )
        If len ( X ) <= 3 then
            Y = X + Y
            X = ""
        end if
    Loop
'If FX = "" then FX = ",00" PARA MEXICO
X = "$" + Y + FX
Reval = X
End function

Entre los beneficios de actualizar a KDE 4.6 es que se a mejorado la velocidad de kwin y plasma.

debemos agregar un nuevo repositorio a nuestro Kubuntu

add-apt-repository ppa:kubuntu-ppa/backports

luuego actualizar

aptitude update

aptitude dist-upgrade

eso es todo

asanchezm at e-compugraf dot com

¿chatear? en gmail bajo el nick de lurkan.

twitter @lurkan

identi.ca lurkan

youtube lurkan01

en la oficina me encuentras en la extensión 122

Mis galerías

Lun Mar Mié Jue Vie Sáb Dom
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28