Página 1 de 1

Problemas con función personalizada en Calc

Publicado: Jue Sep 17, 2009 7:23 pm
por kamikaze55
Hola amigos, encontré por internet un marco para openoffice que promete transformar un digito en el texto correspondiente. lo que pasa es que no tengo idea de como hacerlo funcionar
si alguien me pudiera orientar para poder usarlo ya que me seria de mucha ayuda.-

como siempre de antemano gracias.-

esto encontré:

--------

REM ** Función que convierte una cantidad pasada como parámetro en su NOMINACION textual
REM ** Autor: Ing. Mauricio Flores Olmos - 2000-2004
REM ** email: mfolmos@prodigy.net.mx
REM ** Se permite la distribución siempre que se mantenga la referencia anterior al Autor.
REM *************************
REM ** Forma de Uso:
REM ** Abra la hoja de Cálculo de OpenOffice.org
REM ** Vaya al menu Herramientas y luego a Macro
REM ** Presione el botón Nuevo
REM ** Le aparecerá el editor de StarBasic, elimine las lineas de código que aparecen
REM ** Luego elija el botón "Insertar texto fuente" de la barra de herramientas (icono de carpeta gris con flecha)
REM ** Presione el botón "Compilar" de la misma barra, si no marca ningun error, significa que
REM ** la macro la insertó correctamente.
REM ** Ahora ya se puede usar la macro en la hoja de calculo (y probablemente en otras partes de OpenOffice)
REM ** Elija el menú "Archivo" y luego "Cerrar"
REM ** Ahora probemos la macro de dos formas:
REM ** 1.- Teclee un valor en alguna celda, ej. 1253.21 en la celda A1 y presione ENTER
REM ** luego en la celda en que estemos (A2) teclee: =aletra(A1) y presione ENTER
REM ** aparecerá: UN MIL DOSCIENTOS CINCUENTA PESOS 21/100 M.N.
REM ** 2.- Teclee lo sigueinte en una celda (Ej. C1): =aletra(563.88) y presione ENTER
REM ** aparecerá: QUINIENTOS SESENTA Y TRES PESOS 88/100 M. N.
REM ** eso es todo...

REM ** CUERPO PRINCIPAL DEL MACRO:
REM ** NO CAMBIA NADA DEL código PARA QUE FUNCIONE
REM ** UNA VEZ PEGADO EL código DA GUARDAR
REM ** CIERRE EL MACRO

Public Function NumLet(ByVal Numero As Double) As String
Dim NumTmp As String
Dim co1 As Integer
Dim co2 As Integer
Dim pos As Integer
Dim dig As Integer
Dim cen As Integer
Dim dec As Integer
Dim uni As Integer
Dim letra1 As String
Dim letra2 As String
Dim letra3 As String
Dim Leyenda As String
Dim TFNumero As String

NumTmp = Format(Numero, "000000000000000") 'Le da un formato fijo
co1 = 1
pos = 1
TFNumero = ""
'Para extraer tres digitos cada vez
Do While co1 <= 5
co2 = 1
Do While co2 <= 3
'Extrae un digito cada vez de izquierda a derecha
dig = Val(Mid(NumTmp, pos, 1))
Select Case co2
Case 1: cen = dig
Case 2: dec = dig
Case 3: uni = dig
End Select
co2 = co2 + 1
pos = pos + 1
Loop
letra3 = Centena(uni, dec, cen)
letra2 = Decena(uni, dec)
letra1 = Unidad(uni, dec)

Select Case co1
Case 1
If cen + dec + uni = 1 Then
Leyenda = "billon "
ElseIf cen + dec + uni > 1 Then
Leyenda = "billones "
End If
Case 2
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then
Leyenda = "mil millones "
ElseIf cen + dec + uni >= 1 Then
Leyenda = "mil "
End If
Case 3
If cen + dec = 0 And uni = 1 Then
Leyenda = "millon "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then
Leyenda = "millones "
End If
Case 4
If cen + dec + uni >= 1 Then
Leyenda = "mil "
End If
Case 5
If cen + dec + uni >= 1 Then
Leyenda = ""
End If
End Select

co1 = co1 + 1
TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda
Leyenda = ""
letra1 = ""
letra2 = ""
letra3 = ""
Loop

NumLet = TFNumero

End Function



Private Function Centena(ByVal uni As Integer, ByVal dec As Integer, _
ByVal cen As Integer) As String
Dim cTexto As String

Select Case cen
Case 1
If dec + uni = 0 Then
cTexto = "cien "
Else
cTexto = "ciento "
End If
Case 2: cTexto = "doscientos "
Case 3: cTexto = "trescientos "
Case 4: cTexto = "cuatrocientos "
Case 5: cTexto = "quinientos "
Case 6: cTexto = "seiscientos "
Case 7: cTexto = "setecientos "
Case 8: cTexto = "ochocientos "
Case 9: cTexto = "novecientos "
Case Else: cTexto = ""
End Select
Centena = cTexto

End Function



Private Function Decena(ByVal uni As Integer, ByVal dec As Integer) As String
Dim cTexto As String

Select Case dec
Case 1:
Select Case uni
Case 0: cTexto = "diez "
Case 1: cTexto = "once "
Case 2: cTexto = "doce "
Case 3: cTexto = "trece "
Case 4: cTexto = "catorce "
Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
End Select
Case 2:
If uni = 0 Then
cTexto = "veinte "
ElseIf uni > 0 Then
cTexto = "veinti"
End If
Case 3: cTexto = "treinta "
Case 4: cTexto = "cuarenta "
Case 5: cTexto = "cincuenta "
Case 6: cTexto = "sesenta "
Case 7: cTexto = "setenta "
Case 8: cTexto = "ochenta "
Case 9: cTexto = "noventa "
Case Else: cTexto = ""
End Select

If uni > 0 And dec > 2 Then cTexto = cTexto + "y "

Decena = cTexto

End Function



Private Function Unidad(ByVal uni As Integer, ByVal dec As Integer) As String
Dim cTexto As String

If dec <> 1 Then
Select Case uni
Case 1: cTexto = "un "
Case 2: cTexto = "dos "
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco "
End Select
End If
Select Case uni
Case 6: cTexto = "seis "
Case 7: cTexto = "siete "
Case 8: cTexto = "ocho "
Case 9: cTexto = "nueve "
End Select

Unidad = cTexto

End Function



'Funcion que convierte al plural el argumento pasado
Private Function Plural(ByVal Palabra As String) As String
Dim pos As Integer
Dim strPal As String

If Len(Trim(Palabra)) > 0 Then
pos = InStr(1, "aeiou", Right(Palabra, 1), vbTextCompare)
If pos > 0 Then
strPal = Palabra & "s"
Else
strPal = Palabra & "es"
End If
End If
Plural = strPal

End Function


------

y al direccion en donde lo encontre es esta:

hxxp:77snipplr.com/view.php?codeview&id=4244


_______________________________________
Editado por el moderador (valedor74) para cambiar el "todo mayúsculas" / un título claro ayuda a quienes pueden ayudarte. Si no lo has hecho aún por favor lee la Guía de supervivencia

Re: Pregunta de función

Publicado: Jue Sep 17, 2009 8:01 pm
por mauricio
Hola...

Anexo al presente, encontrara la función original que muestras, con algunos ejemplos de su uso, esa función que dice:

REM ** Función que convierte una cantidad pasada como parámetro en su NOMINACION textual
REM ** Autor: Ing. Mauricio Flores Olmos - 2000-2004
REM ** email: mfolmos@prodigy.net.mx
REM ** Se permite la distribución siempre que se mantenga la referencia anterior al Autor.

NO es del Sr. Mauricio Flores, si no original mía, tiene años que el Sr. Flores, se la adjudica, pero puedo demostrar fácilmente que no es así.

Saludos

Mauricio Baeza

Re: Problemas con función personalizada en Calc

Publicado: Lun Sep 21, 2009 3:48 pm
por kamikaze55
Mauricio, lamento mucho que plagiaran tu funcion, por lo que veo debió tomarte trabajo hacerla, volviendo a mi pregunta el hecho es que no puedo usarla, el ejemplo que tu adjuntaste me da resultado de valores solamente y no de la transformación a letras, en un principio pence que era porque los nombres de las funciones son diferentes, pero cambie el nombre de la formula a como la que te plagiaron pero tampoco resulta, entonces sigo con la pregunta como hago para usar este marco.-


agradecería una respuesta, nuevamente.-

Re: Problemas con función personalizada en Calc

Publicado: Mar Sep 22, 2009 5:59 am
por mauricio
Vamos por partes...

¿El archivo que te anexe, no te muestra los valores en letras?, lo he vuelto ha abrir y lo hace correctamente, claro, siempre y cuando actives las macros, puesto que la función tiene código, si tienes tu nivel de seguridad en bajo, no te mostrará el mensaje y no se activarán las macros, todo estos temas y como usar cualquier macro y función de OOo Basic, esta explicado en mi libro, para no repetir temas, te remito a el...

http://www.universolibre.org/?q=node/2

Te adjunto una imagen del archivo que te envíe, donde se ve el resultado en letras...

Saludos

Mauricio

Re: Problemas con función personalizada en Calc

Publicado: Mié Sep 23, 2009 4:12 pm
por kamikaze55
Active los marcos y si funciona, ahora quisiera saber si hay alguna forma de obviar la inclucion de tantos datos y dejar que solo de la converción a texto, o rrellenar los datos a mano, ya que cuando trato me da textos que no corresponden a la sifre que tengo.



gracias.-

Re: Problemas con función personalizada en Calc

Publicado: Mié Sep 23, 2009 5:41 pm
por mauricio
Lo mejor, casi siempre, es que muestres que es lo que "realmente" quieres, esto es por que cada quien tiene necesidades diferentes, la función como esta es útil para algunos para otro como tu, vemos que no, un ejemplo hubiese servido de mucho, ¿vale?

En el mismo código que te envíe, viene otra función que solo se llama NUMLET y solo tienes que pasarle el número a convertir a letras, por favor, verifica si te sirve esa función, te muestro una imagen donde la he usado, en la columna B, se usa la función mostrada en la columna E

Saludos

Re: Problemas con función personalizada en Calc

Publicado: Jue Sep 24, 2009 10:34 pm
por kamikaze55
agradezco grandemente la disposición de tus respuestas, la función que me mostraste, me sirve 100%, si no fuí mas especifico es que no pensé la diversidad que se podía lograr, trataré de darme el tiempo de leer todo el manual que me ofreciste un par de post a tras, para finalizar con esto, como puedo rescatar estas funciones ente un formateo o simplemente ante un upgrade de versión de la 3.1 a 3.1.1


gracias otra vez.
------

edito porque se me presento un problema al usar la primera función que me mostraste. adjunto imagen.

Imagen
PRUEBA 1.xls
(8 KiB) Descargado 190 veces

Re: Problemas con función personalizada en Calc

Publicado: Vie Sep 25, 2009 4:09 am
por mauricio
Hola...

Lo más probable es que no encuentre la macro, ¿donde la pusiste?, el archivo que anexos es XLS, no ODS y no trae ningún código, en el libro esta especificado donde y como usar los códigos de OOo Basic.

Ante un formateo, tienes que tener respaldo de tus archivos y ante una actualización, "generalmente" al actualizar no "debería" modificar tus archivos de usuario, pero siempre, es mejor, tener un respaldo...

Saludos

Mauricio

Re: Problemas con función personalizada en Calc

Publicado: Lun Sep 28, 2009 3:21 pm
por kamikaze55
valedor74 escribió:Hola...

Lo más probable es que no encuentre la macro, ¿donde la pusiste?, el archivo que anexos es XLS, no ODS y no trae ningún código, en el libro esta especificado donde y como usar los códigos de OOo Basic.

Ante un formateo, tienes que tener respaldo de tus archivos y ante una actualización, "generalmente" al actualizar no "debería" modificar tus archivos de usuario, pero siempre, es mejor, tener un respaldo...

Saludos

Mauricio
Si, guardo los archivos en xls porque soy el único en la oficina que usa openoffice, y si el tiempo me acompaña seré el único que use linux (kubuntu), por lo que si les paso los archivos en ods. no los pueden leer, asi que los guardo por defecto en ese formato.

cuando tenga un tiempo leeré el manual a cabalidad; ahora estoy muy atareado en el trabajo.-

pero en cada tiempo que tenga tratare de entender esta manco. gracias

no lo daré por resuelto el tema ya que lo tomare con un poco mas de calma para entender a cabalidad, por mi carga de trabajo no puedo dedicarle el tiempo que quisiera.


doy las gracias y pido un poco de paciencia.