Hola amigos:
Os agradecería que me indicaseis cómo abordar el problema que os indico a continuación, o bien, me indiquéis dónde puedo encontrar información referente a él.
Lo que pretendo es: Desde un libro de CALC quiero desarrollar una macro que abra otro libro e introduzca en él
1. una macro cuyas líneas de código tengo almacenadas en una cadena de texto
2. insertar una imagen concreta que tengo en un fichero gif
3. asignar a esa imagen la macro introducida
Muchas gracias por vuestra atención
[RESUELTO]Introducir macros en libros
[RESUELTO]Introducir macros en libros
Última edición por eltete el Jue Ago 22, 2013 5:05 pm, editado 1 vez en total.
Win XP SP3 OpenOffice 3.2.1
Re: Introducir macros en libros
Código: Seleccionar todo
REM Abrir Documento
Folder = "C:\Users\nombre\Desktop\"
Archivo = "Target.ods"
URL = convertToURL(Folder & Archivo)
Dim MediaDesc(0) as New com.sun.star.beans.PropertyValue
MediaDesc(0).Name = "MacroExecutionMode"
MediaDesc(0).Value = com.sun.star.document.MacroExecMode.USE_CONFIG
oDoc = StarDesktop.loadComponentFromURL(URL, "_blank",0, MediaDesc)
REM Insertar una Macro
BLib = oDoc.BasicLibraries
NewLib = BLib.createLibrary("Nueva")
MacroString = "Sub Mi_Sub" & CHR(13) & "PRINT ""Hello"" " & CHR(13) & "End Sub"
NewLib.insertByName("ModuleA", MacroString)
REM Preparar la imagen
imagen = "foto.gif"
ImagenURL = convertToURL(Folder & imagen)
oImagen_obj = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
oImagen_obj.GraphicURL = ImagenURL
oSize = oImagen_obj.Size
oSize.Height = 2000
oSize.Width = 2000
oImagen_obj.Size = oSize
oPos = oImagen_obj.Position
oPos.X = 2000
oPos.Y = 3000
oImagen_obj.Position = oPos
REM asignar la macro a la imagen
Dim oPropVal(1) as New com.sun.star.beans.PropertyValue
oPropVal(0).Name = "EventType"
oPropVal(0).Value = "Script"
oPropVal(1).Name = "Script"
oPropVal(1).Value = "vnd.sun.star.script:Nueva.ModuleA.Mi_Sub?language=Basic&location=document"
REM Insertar la imagen
oDP = oDoc.DrawPages.getByIndex(0)
oDP.add(oImagen_obj)
oEvents = oImagen_obj.Events
oEvents.replaceByName("OnClick", oPropVal())
Re: Introducir macros en libros
Muchas gracias por tu aportación
Lo pruebo y digo algo
Lo pruebo y digo algo
Win XP SP3 OpenOffice 3.2.1
Re: Introducir macros en libros
He probado la macro y funciona perfectamente. Muchas gracias por la aportación
Una última aclaración:
La línea: NewLib = BLib.createLibrary("Nueva") crea una nueva libreria
¿cómo se ha de modificar para que utilice una ya existente?
(He intentado UseLibrary pero no es correcto)
Una última aclaración:
La línea: NewLib = BLib.createLibrary("Nueva") crea una nueva libreria
¿cómo se ha de modificar para que utilice una ya existente?
(He intentado UseLibrary pero no es correcto)
Win XP SP3 OpenOffice 3.2.1
Re: Introducir macros en libros
Pude usar código como
El método Library.insertByName() funciona como un método replaceBy (reemplazar) por que, si ya existe un módulo, lo borra.
Código: Seleccionar todo
BLib = oDoc.BasicLibraries
IF BLib.hasByName("Nueva") Then
BLib.loadLibrary("Nueva")
Library = BLib.getByName("Nueva")
Else
Library = BLib.createLibrary("Nueva")
End If
MacroString = "Sub Mi_Sub" & CHR(13) & "PRINT ""Hello"" " & CHR(13) & "End Sub"
Library.insertByName("ModuleE", MacroString)