Cómo cerrar un cuadro de diálogo usando macros

Hola, he creado un cuadro de diálogo y he asignado a un botón el macro Cerrar_Dialogo(). (muestro el código abajo). Sin embargo, cuando pulso el botón, muestra el mensaje, pero no se cierra el diálogo.

Si en lugar de el código que muestro abajo en Cerrar_Dialogo() sólo escribo “oDiaologo.EndExecute”, me aparece el siguiente mensaje de error: “Error de Ejecución de Basic. Variable de Objeto no establecida”


Sub Mostrar_Dialogo ()
Dim oDialogo As Object

 DialogLibraries.LoadLibrary( "Standard" )
 oDialogo = CreateUnoDialog( DialogLibraries.Standard.getByName("input") )
 oDialogo.execute()
 oDialogo.dispose()

End Sub

Sub Cerrar_Dialogo()

msgbox ("HOLA")
Dim oDialogo As Object
oDialogo = CreateUnoDialog(DialogLibraries.getByName("Standard").getByName("input"))

If Not IsNull(oDialogo) Then
    oDialogo.EndExecute()
End If

End Sub

Dim dlg As Object

Sub Main()
	 dlg = CreateUnoDialog(DialogLibraries.Standard.getByName("Dialog1"))
	 dlg.execute()
	 dlg.dispose()
End Sub

Sub close_dialog()
	dlg.endExecute()
End Sub
1 Like

Funciona, y veo que tiene que ver con el lugar donde se declara el objeto. Muchas gracias por la respuesta. Me ha sido de gran ayuda

hola mi problema es un poco más grande y no sé dónde voy a acudir porque las IAs no e han dado y digos LAS porque he usado más de una. He creado un dialogo en un archivo OpenOffice Calc, Su nombre es SportOpenOffice.ods . Eno de los problemas que tengo, de hecho tengo más de uno pero iré al del diálogo. He creado dentro del diálogo llamado PRINCIPAL un botón de comando para SALIR, le he añadido un texto para que me pregunte y el progrma me lo hace pero cuando le doy a SALIR , no hace nada, con otras macros se cierra mándadome un mensaje de recuperación de archivo ,diciendo que el programa no se ha cerrado y se ha recuperado el archivo. Creo que es un problema de seguridad pero me tiene loco tanto a mi como a las IAs. La macro que no hace nada es:
’ 1. ESTA LÍNEA ES LA CLAVE: Debe estar arriba del todo, fuera de los Sub
Public oDialogoPrincipalGlobal As Object

Sub ConfirmarSalida
Dim nRespuesta As Integer

' 1. Preguntamos si quiere salir
nRespuesta = MsgBox("¿Deseas salir del documento?", 36, "Confirmar Salida")

' 2. Si responde que SÍ (el código es 6)
If nRespuesta = 6 Then
    On Error Resume Next
    
    ' 3. Cerramos el diálogo PRINCIPAL
    ' Usamos la variable que ya tienes para el diálogo
    If Not IsNull(oDialogoPrincipalGlobal) Then
        oDialogoPrincipalGlobal.endExecute()
    End If
    
    ' 4. Mensaje de despedida
    MsgBox "¡Hasta pronto!", 64, "Adiós"
    
    ' 5. CERRAMOS EL ARCHIVO Y LA APLICACIÓN
    ThisComponent.close(True)
    StarDesktop.terminate()
End If

End Sub

Salvo declaraciones de variables, no puedes tener código fuera de Sub…End Sub.

Dado que este tema ha sido dado como resuelto, abre un nuevo tema, si quieres enlazando a este y anexa tu archivo donde tengas el código para verlo.

1 Like