Página 1 de 1

[RESUELTO] Mudar Macro de Excel a Libreoffice

Publicado: Vie May 31, 2019 9:17 pm
por nicodavid
Buenas tardes, me gustaria saber si ¿hay alguna forma de pasar una macro de Excel a Libreoffice?.
El tema es que al abrir el archivo que tiene la macro por primera vez en LibO, la macro funciona (aparentemente). Pero al cerrarlo y volverlo a abrir , deja de funcionar y da errores por todos lados.
lo que hace la macro es: si identifica que en la columna (2) de la Hoja("Demo") hay una "I", Entonces copia los valores de las columnas siguientes, en una planilla del mismo libro llamada "VALE2" (esta planilla es similar a un remito).
Al copiar todos los datos, imprime el rango de impresion seleccionado de la Hoja "VALE2".
una vez impreso, Los datos de "VALE2" quedan en vacio , para que se copie otra columna que contenga "I", y asi sucesivamente, hasta encontrarse con vacio en la columna (2) de la Hoja "Demo".
Una vez finalizado todo, todas las columnas que tenian la letra "I", Cambian su Valor por la Letra "P" (para que cuando se vuelva a ejecutar la macro, no vuelva a imprimir lo que ya esta impreso).
Dejo el Codigo pegado abajo.(vale aclarar que fue una de las primeras macro que realice y como funciono, nunca mas la volvi a mejorar).

Sub VALE()
'
' VALE Macro
' IMPRESION DE VALES
'
' Acceso directo: Ctrl+Mayús+O
With Application
.Calculation = xlAutomatic

End With
i = 5
u_STOP = 0
Do While u_STOP = 0
If Sheets("Demo").Cells(i, 2) = "I" Then
Sheets("VALE2").Cells(1, 9) = Sheets("Demo").Cells(i, 1)
Sheets("VALE2").Cells(2, 9) = Sheets("Demo").Cells(i, 5)
Sheets("VALE2").Cells(3, 9) = Sheets("Demo").Cells(i, 6)
Sheets("VALE2").Cells(4, 2) = Sheets("Demo").Cells(i, 8)
Sheets("VALE2").Cells(4, 6) = Sheets("Demo").Cells(i, 9)
Sheets("VALE2").Cells(4, 9) = Sheets("Demo").Cells(i, 7)
Sheets("VALE2").Cells(5, 2) = Sheets("Demo").Cells(i, 10)
Sheets("VALE2").Cells(5, 6) = Sheets("Demo").Cells(i, 11)
Sheets("VALE2").Cells(5, 9) = Sheets("Demo").Cells(i, 12)
Sheets("VALE2").Cells(8, 2) = Sheets("Demo").Cells(i, 13)
Sheets("VALE2").Cells(8, 4) = Sheets("Demo").Cells(i, 14)
Sheets("VALE2").Cells(8, 8) = Sheets("Demo").Cells(i, 15)
Sheets("VALE2").Cells(9, 9) = Sheets("Demo").Cells(i, 29)
Sheets("VALE2").Cells(8, 9) = Sheets("Demo").Cells(i, 17)
Sheets("VALE2").Cells(10, 2) = Sheets("Demo").Cells(i, 19)
Sheets("VALE2").Cells(11, 2) = Sheets("Demo").Cells(i, 20)
Sheets("VALE2").Cells(10, 4) = Sheets("Demo").Cells(i, 3)
Sheets("VALE2").Cells(12, 2) = Sheets("Demo").Cells(i, 21)
Sheets("VALE2").Cells(13, 2) = Sheets("Demo").Cells(i, 22)
Sheets("VALE2").Cells(14, 2) = Sheets("Demo").Cells(i, 23)
Sheets("VALE2").Cells(15, 2) = Sheets("Demo").Cells(i, 24)
Sheets("VALE2").Cells(15, 5) = Sheets("Demo").Cells(i, 27)
Sheets("VALE2").Cells(15, 9) = Sheets("Demo").Cells(i, 28)
Sheets("VALE2").Select

Range("A1 : D5").Select
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("VALE2").Cells(1, 9) = ""
Sheets("VALE2").Cells(2, 9) = ""
Sheets("VALE2").Cells(3, 9) = ""
Sheets("VALE2").Cells(4, 2) = ""
Sheets("VALE2").Cells(4, 6) = ""
Sheets("VALE2").Cells(4, 9) = ""
Sheets("VALE2").Cells(5, 2) = ""
Sheets("VALE2").Cells(5, 6) = ""
Sheets("VALE2").Cells(5, 9) = ""
Sheets("VALE2").Cells(8, 2) = ""
Sheets("VALE2").Cells(8, 4) = ""
Sheets("VALE2").Cells(8, 8) = ""
Sheets("VALE2").Cells(8, 9) = ""
Sheets("VALE2").Cells(9, 9) = ""
Sheets("VALE2").Cells(10, 2) = ""
Sheets("VALE2").Cells(11, 2) = ""
Sheets("VALE2").Cells(10, 4) = ""
Sheets("VALE2").Cells(12, 2) = ""
Sheets("VALE2").Cells(13, 2) = ""
Sheets("VALE2").Cells(14, 2) = ""
Sheets("VALE2").Cells(15, 2) = ""
Sheets("VALE2").Cells(15, 5) = ""
Sheets("VALE2").Cells(16, 9) = ""
Sheets("Demo").Select

End If


If Sheets("Demo").Cells(i, 2) = "" Then u_STOP = 1

i = i + 1
Loop
Sheets("Demo").Select
E = 5
u_STOP = 0
Do While u_STOP = 0
If Cells(E, 2) = "I" Then Cells(E, 2) = "P"
If Cells(E, 2) = "" Then u_STOP = 1
E = E + 1
Loop
Sheets("Demo").Select





End Sub

Re: Mudar Macro de Excel a Libreoffice

Publicado: Lun Jun 03, 2019 9:01 pm
por fornelasa
Hice pruebas con tu macro en LibreOffice y no me dio problema ni marcó error alguno.
Obviamente al inicio del modulo donde esta la macro VALE() debe colocarse

Código: Seleccionar todo

Option VBASupport 1
Sub VALE()
-------
-------
End Sub
Saludos, Federico.

Re: [RESUELTO] Mudar Macro de Excel a Libreoffice

Publicado: Mié Jun 05, 2019 10:34 pm
por fornelasa
Esta macro parece ser una traducción aproximada de tu macro Excel.

Código: Seleccionar todo

Sub VALE()
' VALE Macro
' IMPRESION DE VALES

     docto = ThisComponent
      Demo = docto.Sheets.getByName("Demo")
     VALE2 = docto.Sheets.getByName("VALE2")
    

  document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 dim args1(0) as new com.sun.star.beans.PropertyValue
     args1(0).Name = "AutomaticCalculation"
     args1(0).Value = true
 dispatcher.executeDispatch(document, ".uno:AutomaticCalculation", "", 0, args1())

        i = 4
   u_STOP = 0
   Do While u_STOP = 0
   If Demo.getCellByPosition(1, i).String = "I" Then

VALE2.getCellByPosition(8,0).Formula = Demo.getCellByPosition(0,i).Formula
VALE2.getCellByPosition(8,1).Formula = Demo.getCellByPosition(4,i).Formula
VALE2.getCellByPosition(8,2).Formula = Demo.getCellByPosition(5,i).Formula
VALE2.getCellByPosition(1,3).Formula = Demo.getCellByPosition(7,i).Formula
VALE2.getCellByPosition(5,3).Formula = Demo.getCellByPosition(8,i).Formula
VALE2.getCellByPosition(8,3).Formula = Demo.getCellByPosition(6,i).Formula
VALE2.getCellByPosition(1,4).Formula = Demo.getCellByPosition(9,i).Formula
VALE2.getCellByPosition(5,4).Formula = Demo.getCellByPosition(10,i).Formula
VALE2.getCellByPosition(8,4).Formula = Demo.getCellByPosition(11,i).Formula
VALE2.getCellByPosition(1,7).Formula = Demo.getCellByPosition(12,i).Formula
VALE2.getCellByPosition(3,7).Formula = Demo.getCellByPosition(13,i).Formula
VALE2.getCellByPosition(7,7).Formula = Demo.getCellByPosition(14,i).Formula
VALE2.getCellByPosition(8,8).Formula = Demo.getCellByPosition(28,i).Formula
VALE2.getCellByPosition(8,7).Formula = Demo.getCellByPosition(16,i).Formula
VALE2.getCellByPosition(1,9).Formula = Demo.getCellByPosition(18,i).Formula
VALE2.getCellByPosition(1,10).Formula = Demo.getCellByPosition(19,i).Formula
VALE2.getCellByPosition(3,9).Formula = Demo.getCellByPosition(2,i).Formula
VALE2.getCellByPosition(1,11).Formula = Demo.getCellByPosition(20,i).Formula
VALE2.getCellByPosition(1,12).Formula = Demo.getCellByPosition(21,i).Formula
VALE2.getCellByPosition(1,13).Formula = Demo.getCellByPosition(22,i).Formula
VALE2.getCellByPosition(1,14).Formula = Demo.getCellByPosition(23,i).Formula
VALE2.getCellByPosition(4,14).Formula = Demo.getCellByPosition(26,i).Formula
VALE2.getCellByPosition(8,14).Formula = Demo.getCellByPosition(27,i).Formula

docto.CurrentController.Select(VALE2.getCellRangeByName("A1:D5"))

dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())

VALE2.getCellByPosition(8,0).String = ""
VALE2.getCellByPosition(8,1).String = ""
VALE2.getCellByPosition(8,2).String = ""
VALE2.getCellByPosition(1,3).String = ""
VALE2.getCellByPosition(5,3).String = ""
VALE2.getCellByPosition(8,3).String = ""
VALE2.getCellByPosition(1,4).String = ""
VALE2.getCellByPosition(5,4).String = ""
VALE2.getCellByPosition(8,4).String = ""
VALE2.getCellByPosition(1,7).String = ""
VALE2.getCellByPosition(3,7).String = ""
VALE2.getCellByPosition(7,7).String = ""
VALE2.getCellByPosition(8,7).String = ""
VALE2.getCellByPosition(8,8).String = ""
VALE2.getCellByPosition(1,9).String = ""
VALE2.getCellByPosition(1,10).String = ""
VALE2.getCellByPosition(3,9).String = ""
VALE2.getCellByPosition(1,11).String = ""
VALE2.getCellByPosition(1,12).String = ""
VALE2.getCellByPosition(1,13).String = ""
VALE2.getCellByPosition(1,14).String = ""
VALE2.getCellByPosition(4,14).String = ""
VALE2.getCellByPosition(8,15).String = ""
docto.CurrentController.Select(Demo.getCellRangeByName("A1"))
End If


If Demo.getCellByPosition(i, 1).String = "" Then u_STOP = 1

i = i + 1
Loop
docto.CurrentController.Select(Demo.getCellRangeByName("A1"))
E = 4
u_STOP = 0
Do While u_STOP = 0
If Demo.getCellByPosition(1,E).String = "I" Then Demo.getCellByPosition(1,E).String = "P"
If Demo.getCellByPosition(1,E).String = "" Then u_STOP = 1
E = E + 1
Loop
docto.CurrentController.Select(Demo.getCellRangeByName("A1"))
End Sub