Argel Gastélum Arellánez escribió:


Juan Maureira escribió:
Holas

Puede que el problema sea que la función que escribiste recibe el parámetro Event de tipo Object, este lo ocupas en la línea que te señala el error con la instruccion Form = *Event.*Source.Model.Parent. Cuando ejecutas la Macro desde un botón en un formulario "Event" es el boton que se activó y loq eu hace la instrucción es obtener el formulario en el cual el boton está, por
lo tanto cuando lo ejecutas desde el Editor Basic "no sabe" cual es el
"Event" que se activó y por lo tanto no puede ejecutar el código.

Te dice que el parámetro no es opcional (lo dá el mismo botón al ejecutarse desde el formulario) pues en Basic puedes tener parámetros opcionales en una
función

Suerte ^_^
JuanFraMaureira

Hola Juan, buenos días. Muchas gracias por tu explicación. Aunque no conozco mucho sobre basic (apenas estoy tratando de aprender y este código lo copié tal cual de un post en el foro de openoffice), ahora me queda más claro el porqué del error cuando lo intento ejecutar desde el editor de basic en base, o desde "herramienas/macros/ejecutar macro", y de por qué funciona bien cuando lo ejecuto desde el formulario en cuestión, asignado a un botón.

En este post mencionan que se puede hacer también adaptar para abrir un informe, cambiando la parte de "FormDocuments" a "ReportDocuments" y dejando el resto es igual. ¿Sería posible también adaptarlo para llamar una consulta o una tabla? ¿qué tendría que poner en vez de "FormDocuments" o "ReportDocuments"? Por si las dudas, vuelvo a copiar el código más abajo.

   Muchas gracias por tu atención.

   Saludos.

--
   Argel.


Código:
---------------------------------------------------------------
   Sub OpenForm(Event As Object)
      Dim Form As Object
      Dim FormDoc As Object
      Dim Forms As Object
      Dim DBDoc As Object
      Dim Args(1) As New com.sun.star.beans.PropertyValue
      Dim FormName As String
                Form=Event.Source.Model.Parent
      Forms=Form.Parent
      FormDoc=Forms.Parent
      DBDoc=FormDoc.Parent
Args(0).Name="ActiveConnection" : Args(0).Value=Form.ActiveConnection
      Args(1).Name="OpenMode" : Args(1).Value="open"
           FormName="Nombre_del_formulario"
DBDoc.FormDocuments.loadComponentFromURL(FormName,"_blank",0,Args)
        End Sub
---------------------------------------------------------------


Hola a todos, buenas tardes. Bueno, pues navegando de nuevo por la web me econtré esto en un post de openoffice en inglés:

- Primero hay que escribir el siguiente código, que será lo que creo es una especie de macro general o una especie de función (corríjanme por favor si me equivoco):

------------------------------------------------------------------------------
sub OpenQueryDataView( aQueryName as string, aConnection as variant )

   oDesktop = createUnoService("com.sun.star.frame.Desktop")
Dim aURL as New com.sun.star.util.URL
   aURL.Complete = ".component:DB/DataSourceBrowser"
oDispatchObject = oDesktop.queryDispatch(_
                     aURL, _
                     "_Blank",_
                     com.sun.star.frame.FrameSearchFlag.CREATE)
Dim aProps(5) as New com.sun.star.beans.PropertyValue
   aProps(0).Name = "ActiveConnection"
   aProps(0).Value = aConnection
   aProps(1).Name = "CommandType"
   aProps(1).Value = com.sun.star.sdb.CommandType.QUERY
   aProps(2).Name = "Command"
   aProps(2).Value = aQueryName
   aProps(3).Name = "ShowMenu"
   aProps(3).Value = True
   aProps(4).Name = "ShowTreeView"
   aProps(4).Value = FALSE
   aProps(5).Name = "ShowTreeViewButton"
aProps(5).Value = FALSE oDispatchObject.dispatch(aURL, aProps)

End Sub
------------------------------------------------------------------------------


- Y después, asignar la siguiente macro para cada botón que vaya a abrir una consulta específica:

------------------------------------------------------------------------------
sub onClickButton_Nombre_de_esta_macro( oEvent as object )
openQueryDataView( "Nombre de la consulta", oEvent.Source.Model.Parent.ActiveConnection )
end sub
------------------------------------------------------------------------------

Aquí, sólo habría que cambiar el <onClickButton_Nombre_de_esta_macro> y el "<Nombre de la consulta>". Habría que crear una macro como esta para cada consulta que se desee abrir con un botón de formulario, y asignarla a dicho botón en "Propiedades/Acontecimientos/Botón del ratón pulsado/Clic de ratón/Macro/Macro deseada".

Espero sus comentarios y sugerencias. Muchas gracias de antemano por la ayuda.

   Saludos.

--
   Argel.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Responder a