[RESUELTO] convertir macro de excel a libre office

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
senda678
Mensajes: 21
Registrado: Mié Jul 15, 2020 3:57 pm

[RESUELTO] convertir macro de excel a libre office

Mensaje por senda678 »

Hola buenas tardes, lo primero de todo MIL GRACIAS ya solo por leerme.
En el trabajo teníamos excel y ahora nos estan cambiando a libreoffice, y necesitaria ayuda para poder hacer que esa macro funcione en libreoffice.
No tengo mucha idea de macros, pero según lo que iba leyendo por internet iba probando pero no hay manera.
Estoy un poco desesperado porque esto tengo que ponerlo en marcha a primeros de septiembre y si no lo consigo tendria que mandar todos los dias unos 30 correos de manera individual.
De nuevo muchas gracias.
Espero vuestra respuesta.
Un saludo.

Código: Seleccionar todo

Sub EnviarEmail()
	' Declaramos variables
	Dim OutlookApp As Outlook.Application
	Dim MItem As Outlook.MailItem
	Dim cell As Range
	Dim Asunto As String
	Dim Correo As String
	Dim Destinatario As String
	Dim Clave As String
	Dim Msg As String

	Set OutlookApp = New Outlook.Application
	'Recorremos la columna EMAIL
	For Each cell In Range("B11:B40")
		'Asignamos valor a las variables
		Asunto = "Contraseña"
		Destinatario = cell.Offset(0, -1).Value
		Correo = cell.Value
		Clave= Format(cell.Offset(0, 1).Value, "###0")
		Fecha = Format(cell.Offset(0, 2).Value, "dd/mmm/yyyy")
		'Cuerpo del mensaje
		Msg = "Buenos días" & Destinatario & vbNewLine & vbNewLine
		Msg = Msg & "Su nueva contraseña es..... "
		Msg = Msg & Clave & vbNewLine & vbNewLine
		Msg = Msg & "Nota:" & vbNewLine
		Msg = Msg & "Las claves se generan de forma aleatoria."
		Set MItem = OutlookApp.CreateItem(olMailItem)
		With MItem
			.To = Correo
			.Subject = Asunto
			.Body = Msg
			.Send
		End With
	Next
End Sub
Última edición por senda678 el Jue Jul 30, 2020 1:36 pm, editado 2 veces en total.
Libreoffice Versi??n: 6.4.4.2 (x64)
windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: convertir macro de excel a libre office

Mensaje por PepeOooSevilla »

Hola.
Te damos la bienvenida al Foro y, por favor, no dejes de leer la Guía de supervivencia.
No aseguro que la macro siguiente funcione. No trabajo ni tengo Outlook. Tienes que hacer pruebas y consultar los enlaces que escribo más adelante.

Código: Seleccionar todo

Option Explicit
' >>>>>> ¡ATENCIÓN! NO HAY CONTROL DE ERRORES <<<<<<<<
Const NUEVA_LINEA As Integer = 13

Sub EnviarCorreoOutlook()
	Dim DocCalc As Object
	Dim HojaActiva As Object
	Dim oOLEService As Object
	Dim oOutlookApp As Object
	Dim oOutlookMail As Object
	Dim Fila As Long
	Dim Asunto As String
	Dim Correo As String
	Dim Destinatario As String
	Dim Clave As String
	Dim Msg As String

	DocCalc = ThisComponent
	HojaActiva = DocCalc.getCurrentController().getActiveSheet()
	oOLEService = createUnoService("com.sun.star.bridge.OleObjectFactory")
	oOutlookApp = oOLEService.createInstance("Outlook.Application")
	'Las FILAS comienzan por 0 (cero)
	For Fila = 10 To 39
		Asunto = "Contraseña"
		With HojaActiva
			Destinatario = .getCellRangeByName("A" & CStr(Fila)).getString()
			Correo = .getCellRangeByName("B" & CStr(Fila)).getString()
			Clave = Format(.getCellRangeByName("C" & CStr(Fila)).getValue(), "###0")
			Fecha = Format(.getCellRangeByName("D" & CStr(Fila)).getValue(), "dd/mmm/yyyy")
		End With
		'Cuerpo del mensaje
		Msg = "Buenos días" & Destinatario & Chr(NUEVA_LINEA)) & Chr(NUEVA_LINEA))
		Msg = Msg & "Su nueva contraseña es..... "
		Msg = Msg & Clave & Chr(NUEVA_LINEA)) & Chr(NUEVA_LINEA))
		Msg = Msg & "Nota:" & Chr(NUEVA_LINEA))
		Msg = Msg & "Las claves se generan de forma aleatoria."
		oOutlookMail = oOutlookApp.CreateItem(0)
		With oOutlookMail
			.To = Correo
			.Subject = Asunto
			.Body = Msg
			'Se puede adjuntar un archivo
			'.Attachments.Add("C:\ARCHIVO_ADJUNTO.TXT")
			'Se envía
			.Send()
		End With
	Next Fila
End Sub
La parte de enviar un correo la he extraído del apartado 5.28. Sending Email del libro de Andrew Pitonyak Useful Macro Information For OpenOffice.org (en formato ODT) y más concretamente de la página 113 Listing 5.78: Send email using Microsoft Outlook.

Para aprender a programar en OpenOffice/LibreOffice tienes que leer y estudiar el libro Aprendiendo OOo Basic de nuestro compañero mauricio. También lo puedes consultar aquí: Guía de introducción al uso de Apache OpenOffice > Temas Avanzados > Macros > StarBasic.

Además en las páginas Manuales de Apache OpenOffice en español: Basic y, Basic OpenOffice: Apache OpenOffice Basic en español de nuestro compañero SLV-es, encontrarás muy buena información.

Y, obviamente, en la página de Andrew Pitonyak.
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
senda678
Mensajes: 21
Registrado: Mié Jul 15, 2020 3:57 pm

Re: convertir macro de excel a libre office

Mensaje por senda678 »

Muchisimas gracias, no funciona del todo, pero esta muy bien, le doy a dar unas vueltas y a ver si consigo que corra bien.

Un saludo
Libreoffice Versi??n: 6.4.4.2 (x64)
windows 10
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: convertir macro de excel a libre office

Mensaje por PepeOooSevilla »

Hola.
Ahora soy yo quien pide algo.
Por favor, si encuentras la solución publícala en este Foro para que le pueda servir a otras personas en tu misma situación, y después, ¿Cómo marcar como RESUELTO un tema?.
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
senda678
Mensajes: 21
Registrado: Mié Jul 15, 2020 3:57 pm

Re: (RESUELTO)convertir macro de excel a libre office

Mensaje por senda678 »

Hola al final haciendo mil pruebas he conseguido que funcione pero el código es totalmente distinto.
De todas formas MIl GRACIAS por la ayuda.

Código: Seleccionar todo

Sub CreerMail_SystemShellExecute()  
  Dim oShell As Object 
  
  oShell = createUnoService("com.sun.star.system.SystemShellExecute")  
  
  '%0D%0A te permite dar un salto de linea en el cuerpo del mensaje. 
  oShell.Execute("mailto:xxx@xxxxx.com" & _ 
    "?subject=prueba" & _ 
    "&Body=" & _ 
    "%0D%0A" & Environ("") , "", 0) 
End Sub
Última edición por PepeOooSevilla el Sab Ago 15, 2020 4:28 pm, editado 1 vez en total.
Razón: Etiquetas [code]
Libreoffice Versi??n: 6.4.4.2 (x64)
windows 10
DiegoGuio
Mensajes: 2
Registrado: Jue Ago 13, 2020 9:26 pm

Re: [RESUELTO] convertir macro de excel a libre office

Mensaje por DiegoGuio »

Buenas tardes,

su apoyo tengo la siguiente macro en Excel y la verdad no se nada de OpenOffice, es posible que alguno me pueda guiar en como migrar el siguiente código, mil gracias.

Código: Seleccionar todo

Sub Iterar()
'
' Valor de Cuota para interes deudor
' Macro1 Macro
' Iteracion
'

ActiveWorkbook.Unprotect "DCGN"

'limite es el saldo de capital de la cuota posterior a la ingresada

Limite = Cells(6, 10).Value
Delta = Cells(10, 5).Value

'1ro
    If Limite > 1000000 Then

        While Limite > 1000000
            Delta = Delta + 10000
            Cells(10, 5).Value = Delta
            Limite = Cells(6, 10).Value
        Wend
    ElseIf Limite < -1000000 Then
        While Limite < -1000000
            Delta = Delta - 10000
            Cells(10, 5).Value = Delta
            Limite = Cells(6, 10).Value
        Wend
    Else
        Delta = Delta
    End If
'2do
    If Limite > 10000 Then

        While Limite > 1000
            Delta = Delta + 100
            Cells(10, 5).Value = Delta
            Limite = Cells(6, 10).Value
        Wend
    ElseIf Limite < -10000 Then
        While Limite < -1000
            Delta = Delta - 100
            Cells(10, 5).Value = Delta
            Limite = Cells(6, 10).Value
        Wend
    Else
        Delta = Delta
    End If
'3ro
    If Limite > 1000 Then

        While Limite > 1000
            Delta = Delta + 1
            Cells(10, 5).Value = Delta
            Limite = Cells(6, 10).Value
        Wend
    ElseIf Limite < -1000 Then
        While Limite < -1000
            Delta = Delta - 1
            Cells(10, 5).Value = Delta
            Limite = Cells(6, 10).Value
        Wend
    Else
        Delta = Delta
    End If


    Cells(10, 5).Value = Delta

MsgBox ("Simulación Terminada - Calculo del valor de la cuota")

ActiveWorkbook.Protect "DCGN"

'
End Sub
Última edición por PepeOooSevilla el Vie Ago 14, 2020 6:20 am, editado 1 vez en total.
Razón: Etiquetas [code]
openoffice 6.3 en windows
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: [RESUELTO] convertir macro de excel a libre office

Mensaje por PepeOooSevilla »

Hola.
Te damos la bienvenida al Foro y, por favor, no dejes de leer la Guía de supervivencia.
Las macros no son fáciles pero si te interesa la programación para OpenOffice/LibreOffice lee los párrafos citados en una respuesta anterior.
...Para aprender a programar en OpenOffice/LibreOffice...
Este es el código para LibreOffice Calc Basic. Si hay algún error es totalmente involuntario. Haz pruebas...

Código: Seleccionar todo

REM ***** BASIC *****
Option Explicit
'En BASIC prefiero declarar las variables explícitamente para prevenir errores

Sub Iterar()
'
' Valor de Cuota para interes deudor
' Macro para LibreOffice Calc
' Iteracion
'
	'Declaración de variables
	Dim HojaActiva As Object
	'Si estas variables no son de Tipo MONEDA modificar por la que corresponda (DOUBLE, LONG, ...)
	Dim Limite As Currency
	Dim Delta As Currency
	
	'Accedemos a la hoja activa
	HojaActiva = ThisComponent.getCurrentController().getActiveSheet()
	'En LibreOffice Calc Basic las variables objeto deben referenciarse siempre
	With HojaActiva
		'ActiveWorkbook.Unprotect "DCGN"
		.unProtect("DCGN")
	
		'limite es el saldo de capital de la cuota posterior a la ingresada
		'Limite = Cells(6, 10).Value
		'En LibreOffice Calc Basic el acceso a celdas por su posición es (columna, fila) y, además,
		'comienzan en 0 (cero), no en 1
		Limite = .getCellByPosition(9, 5).getValue()
		'Delta = Cells(10, 5).Value
		Delta = .getCellByPosition(4, 9).getValue()
	
'1ro	
		If Limite > 1000000 Then
			'Aunque existe "While...Wend" es preferible usar "Do While...Loop"
			Do While Limite > 1000000
				Delta = Delta + 10000
				'Cells(10, 5).Value = Delta
				.getCellByPosition(4, 9).setValue(Delta)
				'Limite = Cells(6, 10).Value
				Limite = .getCellByPosition(9, 5).getValue()
			Loop
		ElseIf Limite < -1000000 Then
			Do While Limite < -1000000
				Delta = Delta - 10000
				'Cells(10, 5).Value = Delta
				.getCellByPosition(4, 9).setValue(Delta)
				'Limite = Cells(6, 10).Value
				Limite = .getCellByPosition(9, 5).getValue()
			Loop
		Else
			Delta = Delta
		End If
'2do	
		If Limite > 10000 Then
	
			Do While Limite > 1000
				Delta = Delta + 100
				'Cells(10, 5).Value = Delta
				.getCellByPosition(4, 9).setValue(Delta)
				'Limite = Cells(6, 10).Value
				Limite = .getCellByPosition(9, 5).getValue()
			Loop
		ElseIf Limite < -10000 Then
			Do While Limite < -1000
				Delta = Delta - 100
				'Cells(10, 5).Value = Delta
				.getCellByPosition(4, 9).setValue(Delta)
				'Limite = Cells(6, 10).Value
				Limite = .getCellByPosition(9, 5).getValue()
			Loop
		Else
			Delta = Delta
		End If
'3ro	
		If Limite > 1000 Then
	
			Do While Limite > 1000
				Delta = Delta + 1
				'Cells(10, 5).Value = Delta
				.getCellByPosition(4, 9).setValue(Delta)
				'Limite = Cells(6, 10).Value
				Limite = .getCellByPosition(9, 5).getValue()
			Loop
		ElseIf Limite < -1000 Then
			Do While Limite < -1000
				Delta = Delta - 1
				'Cells(10, 5).Value = Delta
				.getCellByPosition(4, 9).setValue(Delta)
				'Limite = Cells(6, 10).Value
				Limite = .getCellByPosition(9, 5).getValue()
			Loop
		Else
			Delta = Delta
		End If
	
		'Cells(10, 5).Value = Delta
		.getCellByPosition(4, 9).setValue(Delta)
	
		'MsgBox (Simulación Terminada - Calculo del valor de la cuota)
		MsgBox "Simulación Terminada - Calculo del valor de la cuota", MB_OK + MB_ICONINFORMATION, "¡Atención!"
	
		'ActiveWorkbook.Protect "DCGN"
		.Protect("DCGN")
	End With
'
End Sub
Por cierto, modifica tu firma porque no existe "openoffice 6.3".
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
DiegoGuio
Mensajes: 2
Registrado: Jue Ago 13, 2020 9:26 pm

Re: [RESUELTO] convertir macro de excel a libre office

Mensaje por DiegoGuio »

Pepe muy buen día.

Déjame decirte que eres un genio, definitivamente la practica hace la experiencia, acabo de probar el código y no hay falla alguna funciona correctamente.


Me salvaste la vida, Dios te bendiga y espero poder aprender de los mejores.

Cordialmente,

Diego Guio.
openoffice 6.3 en windows
Responder