[Resuelto]Ayuda con una macro de VisualBasic

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
dr_cerebro
Mensajes: 4
Registrado: Dom Abr 19, 2009 6:57 pm

[Resuelto]Ayuda con una macro de VisualBasic

Mensaje por dr_cerebro »

Anteriormente utilizaba Excel 2003, y tengo una macro que copie de internet para transformar numeros a letras, que queda perfecto para mi facturacion, asi la cantidad: 125.55 la transforma a CIENTO VEINTE Y CINCO PESOS 55/100 M.N.

Quiero utilizar esta macro en Openoffice, pero no se nada de programacion en VisualBasic, la instale como macro, pero me marca errores de Syntaxis.

El codigo es:
FUNCTION CONVIERTENUMLETRA(NUMERO)
DIM TEXTO
DIM MILLONES
DIM MILES
DIM CIENTOS
DIM DECIMALES
DIM CADENA
DIM CADMILLONES
DIM CADMILES
DIM CADCIENTOS
TEXTO = NUMERO
TEXTO = FORMATNUMBER(TEXTO, 2)
TEXTO = RIGHT(SPACE(14) & TEXTO, 14)
MILLONES = MID(TEXTO, 1, 3)
MILES = MID(TEXTO, 5, 3)
CIENTOS = MID(TEXTO, 9, 3)
DECIMALES = MID(TEXTO, 13, 2)
CADMILLONES = CONVIERTECIFRA(MILLONES, 1)
CADMILES = CONVIERTECIFRA(MILES, 1)
CADCIENTOS = CONVIERTECIFRA(CIENTOS, 0)
IF TRIM(CADMILLONES) > "" THEN
IF TRIM(CADMILLONES) = "UN" THEN
CADENA = CADMILLONES & " MILLON"
ELSE
CADENA = CADMILLONES & " MILLONES"
END IF
END IF
IF TRIM(CADMILES) > "" THEN
CADENA = CADENA & " " & CADMILES & " MIL"
END IF


IF TRIM(CADMILES & CADCIENTOS) = "UN" THEN
CADENA = CADENA & "UNO PESOS" & DECIMALES & "/100" & " M.N. "
ELSE
IF MILES & CIENTOS = "000000" THEN
CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. "
ELSE
CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. "
END IF
END IF
CONVIERTENUMLETRA = TRIM(CADENA)
END FUNCTION

FUNCTION CONVIERTECIFRA(TEXTO, SW)
DIM CENTENA
DIM DECENA
DIM UNIDAD
DIM TXTCENTENA
DIM TXTDECENA
DIM TXTUNIDAD
CENTENA = MID(TEXTO, 1, 1)
DECENA = MID(TEXTO, 2, 1)
UNIDAD = MID(TEXTO, 3, 1)
SELECT CASE CENTENA
CASE "1"
TXTCENTENA = "CIEN"
IF DECENA & UNIDAD <> "00" THEN
TXTCENTENA = "CIENTO"
END IF
CASE "2"
TXTCENTENA = "DOSCIENTOS"
CASE "3"
TXTCENTENA = "TRESCIENTOS"
CASE "4"
TXTCENTENA = "CUATROCIENTOS"
CASE "5"
TXTCENTENA = "QUINIENTOS"
CASE "6"
TXTCENTENA = "SEISCIENTOS"
CASE "7"
TXTCENTENA = "SETECIENTOS"
CASE "8"
TXTCENTENA = "OCHOCIENTOS"
CASE "9"
TXTCENTENA = "NOVECIENTOS"
END SELECT

SELECT CASE DECENA
CASE "1"
TXTDECENA = "DIEZ"
SELECT CASE UNIDAD
CASE "1"
TXTDECENA = "ONCE"
CASE "2"
TXTDECENA = "DOCE"
CASE "3"
TXTDECENA = "TRECE"
CASE "4"
TXTDECENA = "CATORCE"
CASE "5"
TXTDECENA = "QUINCE"
CASE "6"
TXTDECENA = "DIECISEIS"
CASE "7"
TXTDECENA = "DIECISIETE"
CASE "8"
TXTDECENA = "DIECIOCHO"
CASE "9"
TXTDECENA = "DIECINUEVE"
END SELECT
CASE "2"
TXTDECENA = "VEINTE"
IF UNIDAD <> "0" THEN
TXTDECENA = "VEINTI"
END IF
CASE "3"
TXTDECENA = "TREINTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "TREINTA Y "
END IF
CASE "4"
TXTDECENA = "CUARENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "CUARENTA Y "
END IF
CASE "5"
TXTDECENA = "CINCUENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "CINCUENTA Y "
END IF
CASE "6"
TXTDECENA = "SESENTA"

IF UNIDAD <> "0" THEN
TXTDECENA = "SESENTA Y "
END IF
CASE "7"
TXTDECENA = "SETENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "SETENTA Y "
END IF
CASE "8"
TXTDECENA = "OCHENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "OCHENTA Y "
END IF
CASE "9"
TXTDECENA = "NOVENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "NOVENTA Y "
END IF
END SELECT

IF DECENA <> "1" THEN
SELECT CASE UNIDAD
CASE "1"
IF SW THEN
TXTUNIDAD = "UN"
ELSE
TXTUNIDAD = "UNO"
END IF
CASE "2"
TXTUNIDAD = "DOS"
CASE "3"
TXTUNIDAD = "TRES"
CASE "4"
TXTUNIDAD = "CUATRO"
CASE "5"
TXTUNIDAD = "CINCO"
CASE "6"
TXTUNIDAD = "SEIS"
CASE "7"
TXTUNIDAD = "SIETE"
CASE "8"
TXTUNIDAD = "OCHO"
CASE "9"
TXTUNIDAD = "NUEVE"
END SELECT
END IF
CONVIERTECIFRA = TXTCENTENA & " " & TXTDECENA & TXTUNIDAD
END FUNCTION
Podria alguien ayudarme a hacer que esta macro funcione en Openoffice Calc ?

Gracias
Última edición por RGB-es el Mar Abr 21, 2009 9:37 am, editado 1 vez en total.
Razón: Marcar como resuelto
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con una macro de VisualBasic

Mensaje por FJCC-ES »

Cambié él código en un sitio.
Probé 4 982 267.90 = CUATRO MILLONES NOVECIENTOS OCHENTA Y DOS MIL DOSCIENTOS SESENTA Y SIETE PESOS 90/100 M.N.

Código: Seleccionar todo

FUNCTION CONVIERTENUMLETRA(NUMERO)
DIM TEXTO
DIM MILLONES
DIM MILES
DIM CIENTOS
DIM DECIMALES
DIM CADENA
DIM CADMILLONES
DIM CADMILES
DIM CADCIENTOS
TEXTO = NUMERO
TEXTO = CStr(Texto)  'Cambiado de  FORMATNUMBER(TEXTO, 2)
TEXTO = RIGHT(SPACE(14) & TEXTO, 14)
MILLONES = MID(TEXTO, 1, 3)
MILES = MID(TEXTO, 5, 3)
CIENTOS = MID(TEXTO, 9, 3)
DECIMALES = MID(TEXTO, 13, 2)
CADMILLONES = CONVIERTECIFRA(MILLONES, 1)
CADMILES = CONVIERTECIFRA(MILES, 1)
CADCIENTOS = CONVIERTECIFRA(CIENTOS, 0)
IF TRIM(CADMILLONES) > "" THEN
IF TRIM(CADMILLONES) = "UN" THEN
CADENA = CADMILLONES & " MILLON"
ELSE
CADENA = CADMILLONES & " MILLONES"
END IF
END IF
IF TRIM(CADMILES) > "" THEN
CADENA = CADENA & " " & CADMILES & " MIL"
END IF


IF TRIM(CADMILES & CADCIENTOS) = "UN" THEN
CADENA = CADENA & "UNO PESOS" & DECIMALES & "/100" & " M.N. "
ELSE
IF MILES & CIENTOS = "000000" THEN
CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. "
ELSE
CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. "
END IF
END IF
CONVIERTENUMLETRA = TRIM(CADENA)
END FUNCTION

FUNCTION CONVIERTECIFRA(TEXTO, SW)
DIM CENTENA
DIM DECENA
DIM UNIDAD
DIM TXTCENTENA
DIM TXTDECENA
DIM TXTUNIDAD
CENTENA = MID(TEXTO, 1, 1)
DECENA = MID(TEXTO, 2, 1)
UNIDAD = MID(TEXTO, 3, 1)
SELECT CASE CENTENA
CASE "1"
TXTCENTENA = "CIEN"
IF DECENA & UNIDAD <> "00" THEN
TXTCENTENA = "CIENTO"
END IF
CASE "2"
TXTCENTENA = "DOSCIENTOS"
CASE "3"
TXTCENTENA = "TRESCIENTOS"
CASE "4"
TXTCENTENA = "CUATROCIENTOS"
CASE "5"
TXTCENTENA = "QUINIENTOS"
CASE "6"
TXTCENTENA = "SEISCIENTOS"
CASE "7"
TXTCENTENA = "SETECIENTOS"
CASE "8"
TXTCENTENA = "OCHOCIENTOS"
CASE "9"
TXTCENTENA = "NOVECIENTOS"
END SELECT

SELECT CASE DECENA
CASE "1"
TXTDECENA = "DIEZ"
SELECT CASE UNIDAD
CASE "1"
TXTDECENA = "ONCE"
CASE "2"
TXTDECENA = "DOCE"
CASE "3"
TXTDECENA = "TRECE"
CASE "4"
TXTDECENA = "CATORCE"
CASE "5"
TXTDECENA = "QUINCE"
CASE "6"
TXTDECENA = "DIECISEIS"
CASE "7"
TXTDECENA = "DIECISIETE"
CASE "8"
TXTDECENA = "DIECIOCHO"
CASE "9"
TXTDECENA = "DIECINUEVE"
END SELECT
CASE "2"
TXTDECENA = "VEINTE"
IF UNIDAD <> "0" THEN
TXTDECENA = "VEINTI"
END IF
CASE "3"
TXTDECENA = "TREINTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "TREINTA Y "
END IF
CASE "4"
TXTDECENA = "CUARENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "CUARENTA Y "
END IF
CASE "5"
TXTDECENA = "CINCUENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "CINCUENTA Y "
END IF
CASE "6"
TXTDECENA = "SESENTA"

IF UNIDAD <> "0" THEN
TXTDECENA = "SESENTA Y "
END IF
CASE "7"
TXTDECENA = "SETENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "SETENTA Y "
END IF
CASE "8"
TXTDECENA = "OCHENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "OCHENTA Y "
END IF
CASE "9"
TXTDECENA = "NOVENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "NOVENTA Y "
END IF
END SELECT

IF DECENA <> "1" THEN
SELECT CASE UNIDAD
CASE "1"
IF SW THEN
TXTUNIDAD = "UN"
ELSE
TXTUNIDAD = "UNO"
END IF
CASE "2"
TXTUNIDAD = "DOS"
CASE "3"
TXTUNIDAD = "TRES"
CASE "4"
TXTUNIDAD = "CUATRO"
CASE "5"
TXTUNIDAD = "CINCO"
CASE "6"
TXTUNIDAD = "SEIS"
CASE "7"
TXTUNIDAD = "SIETE"
CASE "8"
TXTUNIDAD = "OCHO"
CASE "9"
TXTUNIDAD = "NUEVE"
END SELECT
END IF
CONVIERTECIFRA = TXTCENTENA & " " & TXTDECENA & TXTUNIDAD
END FUNCTION
dr_cerebro
Mensajes: 4
Registrado: Dom Abr 19, 2009 6:57 pm

Re: Ayuda con una macro de VisualBasic

Mensaje por dr_cerebro »

Gracias por tu respuesta.

Ya hice el cambio de esta linea:

Código: Seleccionar todo

TEXTO = CStr(Texto)  'Cambiado de  FORMATNUMBER(TEXTO, 2)
y la deje asi:

Código: Seleccionar todo

TEXTO = CStr(Texto)
Pero ahora, si pongo la cifra 1000 la respuesta es: UNO PESOS 00/100 M.N

4956.10: CUATROCIENTOS NOVENTA Y CINCO PESOS .1/100 M.N.

Tal vez hice algo mal?
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con una macro de VisualBasic

Mensaje por FJCC-ES »

Pruebe esta versión. "Numero" tiene que tener el formato Texto

1,000.00 = UN MIL PESOS 00/100 M.N.
Error: 1000.00 = PESOS 00/100 M.N.
Error: 1000 = UNO PESOS 00/100 M.N.
Error: 1,000 = DIEZ PESOS 00/100 M.N.
Error: 5467.10 = CUATROCIENTOS SESENTA Y SIETE PESOS 10/100 M.N.
5,467.10 = CINCO MIL CUATROCIENTOS SESENTA Y SIETE PESOS 10/100 M.N.

Código: Seleccionar todo

FUNCTION CONVIERTENUMLETRA(NUMERO)
DIM TEXTO
DIM MILLONES
DIM MILES
DIM CIENTOS
DIM DECIMALES
DIM CADENA
DIM CADMILLONES
DIM CADMILES
DIM CADCIENTOS
TEXTO = NUMERO
'TEXTO = CStr(Texto)  'Cambiado de  FORMATNUMBER(TEXTO, 2)
TEXTO = RIGHT(SPACE(14) & TEXTO, 14)
'Print Texto
MILLONES = MID(TEXTO, 1, 3)
MILES = MID(TEXTO, 5, 3)
CIENTOS = MID(TEXTO, 9, 3)
DECIMALES = MID(TEXTO, 13, 2)

CADMILLONES = CONVIERTECIFRA(MILLONES, 1)
CADMILES = CONVIERTECIFRA(MILES, 1)
CADCIENTOS = CONVIERTECIFRA(CIENTOS, 0)
IF TRIM(CADMILLONES) > "" THEN
	IF TRIM(CADMILLONES) = "UN" THEN
		CADENA = CADMILLONES & " MILLON"
	ELSE
	CADENA = CADMILLONES & " MILLONES"
	END IF
END IF
IF TRIM(CADMILES) > "" THEN
	CADENA = CADENA & " " & CADMILES & " MIL"
END IF

IF (TRIM(CADMILES & CADCIENTOS) = "UN") AND (TRIM(CADCIENTOS) <> "") THEN
	CADENA = CADENA & "UNO PESOS" & DECIMALES & "/100" & " M.N. "
ELSE
	IF MILES & CIENTOS = "000000" THEN
		CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. "
	ELSE
		CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. "
	END IF
END IF
CONVIERTENUMLETRA = TRIM(CADENA)
END FUNCTION

FUNCTION CONVIERTECIFRA(TEXTO, SW)
DIM CENTENA
DIM DECENA
DIM UNIDAD
DIM TXTCENTENA
DIM TXTDECENA
DIM TXTUNIDAD

CENTENA = MID(TEXTO, 1, 1)
DECENA = MID(TEXTO, 2, 1)
UNIDAD = MID(TEXTO, 3, 1)
SELECT CASE CENTENA
CASE "1"
TXTCENTENA = "CIEN"
IF DECENA & UNIDAD <> "00" THEN
	TXTCENTENA = "CIENTO"
END IF
CASE "2"
TXTCENTENA = "DOSCIENTOS"
CASE "3"
TXTCENTENA = "TRESCIENTOS"
CASE "4"
TXTCENTENA = "CUATROCIENTOS"
CASE "5"
TXTCENTENA = "QUINIENTOS"
CASE "6"
TXTCENTENA = "SEISCIENTOS"
CASE "7"
TXTCENTENA = "SETECIENTOS"
CASE "8"
TXTCENTENA = "OCHOCIENTOS"
CASE "9"
TXTCENTENA = "NOVECIENTOS"
'CASE "0"   'ADDED
'TXTCENTENA = ""
END SELECT

SELECT CASE DECENA
CASE "1"
TXTDECENA = "DIEZ"
SELECT CASE UNIDAD
CASE "1"
TXTDECENA = "ONCE"
CASE "2"
TXTDECENA = "DOCE"
CASE "3"
TXTDECENA = "TRECE"
CASE "4"
TXTDECENA = "CATORCE"
CASE "5"
TXTDECENA = "QUINCE"
CASE "6"
TXTDECENA = "DIECISEIS"
CASE "7"
TXTDECENA = "DIECISIETE"
CASE "8"
TXTDECENA = "DIECIOCHO"
CASE "9"
TXTDECENA = "DIECINUEVE"
END SELECT
CASE "2"
TXTDECENA = "VEINTE"
IF UNIDAD <> "0" THEN
TXTDECENA = "VEINTI"
END IF
CASE "3"
TXTDECENA = "TREINTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "TREINTA Y "
END IF
CASE "4"
TXTDECENA = "CUARENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "CUARENTA Y "
END IF
CASE "5"
TXTDECENA = "CINCUENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "CINCUENTA Y "
END IF
CASE "6"
TXTDECENA = "SESENTA"

IF UNIDAD <> "0" THEN
TXTDECENA = "SESENTA Y "
END IF
CASE "7"
TXTDECENA = "SETENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "SETENTA Y "
END IF
CASE "8"
TXTDECENA = "OCHENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "OCHENTA Y "
END IF
CASE "9"
TXTDECENA = "NOVENTA"
IF UNIDAD <> "0" THEN
TXTDECENA = "NOVENTA Y "
END IF
'CASE "0" 'Added
'TXTDECENA = ""
END SELECT
IF DECENA <> "1" THEN
SELECT CASE UNIDAD
'Case "0"        'Added
'TXTUNIDAD = ""

CASE "1"
	IF SW THEN
		TXTUNIDAD = "UN"
		
	ELSE
		TXTUNIDAD = "UNO"
		
	END IF
CASE "2"
TXTUNIDAD = "DOS"
CASE "3"
TXTUNIDAD = "TRES"
CASE "4"
TXTUNIDAD = "CUATRO"
CASE "5"
TXTUNIDAD = "CINCO"
CASE "6"
TXTUNIDAD = "SEIS"
CASE "7"
TXTUNIDAD = "SIETE"
CASE "8"
TXTUNIDAD = "OCHO"
CASE "9"
TXTUNIDAD = "NUEVE"

END SELECT
END IF
CONVIERTECIFRA = TXTCENTENA & " " & TXTDECENA & TXTUNIDAD
END FUNCTION
dr_cerebro
Mensajes: 4
Registrado: Dom Abr 19, 2009 6:57 pm

Re: Ayuda con una macro de VisualBasic

Mensaje por dr_cerebro »

Gracias por su respuesta.

Aun el mismo error. Copie el codigo de su ultimo post, y reemplace el previo, pero aun las cifras son equivocadas.

Si la celda la formateo en numero, en texto o en moneda:

320= PESOS 20/100 M.N
1765.12= SETECIENTOS SESENTA Y CINCO PESOS 12/100 M.N.
4,567,853.14= CUATROCIENTOS CINCUENTA Y SEIS MIL OCHOCIENTOS CINCUENTA Y TRES PESOS 14/100 M.N.

Alguna idea de que puedo estar haciendo mal?
FJCC-ES
Mensajes: 915
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Ayuda con una macro de VisualBasic

Mensaje por FJCC-ES »

Es necesario incluir las cifras decimales y las comas en cada numero

CUATRO MIL QUINIENTOS SESENTA Y SIETE PESOS 00/100 M.N.= 4,567.00
TRESCIENTOS VEINTE PESOS 00/100 M.N. = 320.00
UN MIL SETECIENTOS SESENTA Y CINCO PESOS 12/100 M.N. = 1,765.12
CUATRO MILLONES QUINIENTOS SESENTA Y SIETE MIL OCHOCIENTOS CINCUENTA Y TRES PESOS 14/100 M.N.= 4,567,853.14

Errores:
PESOS 20/100 M.N. = 320
SETECIENTOS SESENTA Y CINCO PESOS 12/100 M.N. = 1765.12


En mi archivo 4,567,853.14 sale bien.
dr_cerebro
Mensajes: 4
Registrado: Dom Abr 19, 2009 6:57 pm

Re: Ayuda con una macro de VisualBasic

Mensaje por dr_cerebro »

Muchas gracias por tu respuesta y por tu ayuda.

Efectivamente, me faltaba incluir las comas, por eso interpretaba las cifras en forma incorrecta.

Ya funciona a la perfeccion en todas las pruebas que hice.

Gracias de nuevo.

Saludos.
Responder