UN MILLÓN DE GRACIAS
Ideal la he modificado para mi forma de exponer las cantidades,
para 115.23
devolvia "115con veintitres /100"
y ahora devuelve "ciento quince y veintitres c."
os la paso con las modificaciones:
REM Comienzo
Option Explicit
Function EnLetras(ByVal pNumero As Double) As String
' Definicion de Variables
Dim cUnidad,cDecena,cCenten,cMillar,cMillon,cDecima As String
Dim nUnidad,nDecena,nCenten,nMillar,nMillon,nMiMill As Double
Dim nDecima,nNumero As Double
Dim cTirafi,cNumero as String
' On Error GoTo Errores:
' ThisComponent.addActionLock
' Numero muy grande
If Abs(pNumero) >= 10 ^ 12 Then GoTo Errores:
nNumero = Int(Abs(pNumero))
nDecima = (pNumero - nNumero)*100
cTirafi=""
cDecima=""
nMiMill = Int(nNumero/1000000000)
cTirafi = cMillares(nMiMill)
If (nNumero-(nMiMill*1000000000))<1000000 and nNumero>1000000000 Then
cTirafi=cTirafi+" millones "
End If
nNumero = nNumero-(nMiMill*1000000000)
' Cadena para los millones
nMillon = Int(nNumero/1000000)
cTirafi = cTirafi+cMillones(nMillon)
nNumero = nNumero-(nMillon*1000000)
' Cadena para los millares
nMillar = Int(nNumero/1000)
cTirafi=cTirafi+cMillares(nMillar)
nNumero = nNumero-(nMillar*1000)
' Cadena para los cientos
nCenten = Int(nNumero/100)
nNumero = nNumero-(nCenten*100)
nDecena = Int(nNumero/10)
nUnidad = nNumero-(nDecena*10)
cCenten=Centenas(nCenten,nUnidad,nDecena)
cUnidad=Unidades(nUnidad,nDecena)
cDecena=fDecenas(nDecena,nUnidad)
cDecima=fDecima(nDecima)
cTirafi=cTirafi+cCenten+cDecena+cUnidad+cDecima
EnLetras=cTirafi
' ThisComponent.removeActionLock
Exit Function
Errores:
msgbox "Número demasiado grande",64,"En Letras"
' ThisComponent.removeActionLock
Fin:
End Function
'________________________________________________________________________________________________________________________
Function Unidades(ByVal Numero as Integer,pDecenas as Integer) as String
Dim cUnidades as String
Dim Hilera as String
Dim nHilera as Integer
If Numero = 0 then
cUnidades=""
Unidades=cUnidades
Else
Hilera = "uno dos tres cuatrocinco seis siete ocho nueve "
nHilera=((Numero-1)*6)+1
If nHilera<=0 then nHilera=1
cUnidades=Trim(Mid(Hilera,nHilera,6))+" "
End If
If pDecenas=1 and Numero<6 then
cUnidades=""
End If
Unidades=cUnidades
End Function
'________________________________________________________________________________________________________________________
Function fDecenas(ByVal Numero as Integer,nUnidad as integer) as String
Dim Decenas as String
Dim Hilera as String
Dim nHilera as Integer
If Numero=0 Then
fDecenas=""
Else
if Numero=1 and nUnidad=1 then
Decenas="once"
fDecenas=Decenas
elseif Numero=1 and nUnidad=2 then
Decenas="doce"
fDecenas=Decenas
elseif Numero=1 and nUnidad=3 then
Decenas="trece"
fDecenas=Decenas
elseif Numero=1 and nUnidad=4 then
Decenas="catorce"
fDecenas=Decenas
elseif Numero=1 and nUnidad=5 then
Decenas="quince"
fDecenas=Decenas
else
if nUnidad=0 then
hilera="diez veinte treinta
cuarenta cincuenta sesenta setenta ochenta noventa "
else
Hilera="dieci veinti treinta
y cuarenta y cincuenta y sesenta y setenta y ochenta y noventa y "
end if
nHilera=((Numero-1)*12)+1
If nHilera<=0 then nHilera=1
If Numero=1 or Numero=2 then
Decenas=Trim(Mid(Hilera,nHilera,12))
Else
Decenas=Trim(Mid(Hilera,nHilera,12))+" "
end if
fDecenas=Decenas
end if
End If
End Function
'________________________________________________________________________________________________________________________
Function centenas(ByVal Numero as Integer,pDecenas as Integer,pUnidades as
Integer) as String
Dim Hilera as String
Dim Cientos as String
Dim nHilera as Integer
Hilera="ciento doscientos trescientos cuatrocientosquinientos
seiscientos setecientos ochocientos novecientos "
If Numero > 0 Then
nHilera=((Numero-1)*13)+1
If nHilera<=0 then nHilera=1
Cientos=Trim(Mid(Hilera,nHilera,13))+" "
Else
Cientos=""
End If
Centenas=Cientos
End Function
'________________________________________________________________________________________________________________________
Function cMillones(ByVal nMillon as Integer) as String
' Definicion de variables
Dim nCenten,nDecena,nUnidad as Integer
Dim cCenten,cDecena,cUnidad as String
Dim cCadena as String
If nMillon>0 Then
nCenten = Int(nMillon/100)
nMillon = nMillon-(nCenten*100)
nDecena = Int(nMillon/10)
nUnidad = nMillon-(nDecena*10)
cCenten=Centenas(nCenten,nUnidad,nDecena)
cUnidad=Unidades(nUnidad,nDecena)
cDecena=fDecenas(nDecena,nUnidad)
If nCenten=0 and nDecena=0 and nUnidad=1 Then
cCadena=cCadena+"un millón "
Else
cCadena=cCadena+cCenten+cDecena+cUnidad+" millones "
End If
Else
cCadena=""
End If
cMIllones=cCadena
End Function
'________________________________________________________________________________________________________________________
Function cMillares(ByVal nMillar as Integer) as String
'Definicion de variables
Dim nCenten,nDecena,nUnidad as Integer
Dim cCenten,cDecena,cUnidad as String
Dim cCadena as String
If nMillar>0 Then
nCenten = Int(nMillar/100)
nMillar = nMillar-(nCenten*100)
nDecena = Int(nMillar/10)
nUnidad = nMillar-(nDecena*10)
cCenten=Centenas(nCenten,nUnidad,nDecena)
If nUnidad>1 Then
cUnidad=Unidades(nUnidad,nDecena)
End If
if nUnidad=1 then
cUnidad="un"
End If
cDecena=fDecenas(nDecena,nUnidad)
cCadena=cCadena+cCenten+cDecena+cUnidad+" mil "
Else
cCadena=""
End If
cMillares=cCadena
End Function
'________________________________________________________________________________________________________________________
Function fDecima(ByVal nDecima as Integer) as String
Dim cCadena as String
If nDecima>0 then
cCadena=" y "+lTrim(Str(nDecima))+" c. "
Else
cCadena="exactos"
End If
fDecima=cCadena
End Function
REM Final
At 16:39 29/06/2005, you wrote:
Para mi facturación yo estoy utilizando una macro que encontré dentro de
la documentación de OO:
http://es.openoffice.org/files/documents/73/1083/enletras.sxc
Solo tuve que hacer unas pequeñas modificaciones, me ha sido de mucha
utilidad, por cierto aprovecho para darle gracias a Richard por esta macro.
Saludos,
Hernán Sedano
Miguel Mayol wrote:
En teoría en OO2 existe la función T en inglés que "convert a
value into text" pero la he probado y no va, estaría muy bien que
funcionara en la futura versión en castellano.
At 12:57 29/06/2005, you wrote:
Quoting Miguel Mayol <[EMAIL PROTECTED]>:
Con el estar office tenÃa una macro que me abrÃa una
plantilla, no me la
importóa bien el open office, y no he podido recrearla, sabeis si con OO2
podrÃa crear este tipo de macro, que con una combinación de teclas me
abriera una plantilla de hoja de cálculo, gracias.
Por otra parte, si hay alguien experimentado con la
programación en basic
(o en lo que sea) de OO, podrÃa tomarse la molestia de programar una
función que leyera los números en moneda, o sea 101,25 => Ciento un
€ y
veinticinco c. yo hice una mediante condicionales en una hoja de cálculo,
pero la perdà con un virus.
Con que llegara a 999.999,99 € me conformarÃa.
Es muy útil para hacer facturas, pues según ley (aunque
mucha gente no lo
haga) en españa es obligatorio poner el importe de las facturas en
número y
letra.
Lo ideal serÃa que esta función viniera "de serie" en el
programa, con
variables idiomáticas, pero eso serÃa ya mucho pedir, aunque por
pedir que
no quede.
PS: mandé una aclaración sobre el DIN A pero al parecer no
llegó, hay un
artÃculo en www.iso.org al respecto
Creo que si esto es para tu negocio y te urge contrataras a alguien para
que lo
escribiera. Hay varias casas de programacion en españa y asi apoyarias al
desarrollo de herramientas de software libre y OpenOffice.org.
--
Alexandro Colorado
Co-Leader of OpenOffice.org Spanish
http://es.openoffice.org/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.6/33 - Release Date: 28/06/2005
______________________________
Visita http://www.tutopia.com y comienza a navegar más rápido en Internet.
Tutopia es Internet para todos.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.6/33 - Release Date: 28/06/2005
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.323 / Virus Database: 267.8.6/33 - Release Date: 28/06/2005
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]