Macro básica que oculta/visualiza campos para un formulario en writer

Hola a tod@s.

He creado un documento de prueba donde tengo 3 elementos, configurados de la siguiente forma:

  • Botón de opción 1
  • Botón de opción 2
  • Cuadro de texto 1

Botón de opción 1 y Botón de opción 2, están agrupados mediante la propiedad “Nombre de grupo” → “grupobtn12”. Mientras que el cuadro de texto se ha dejado con su configuración por defecto.

La funcionalidad que he implementado es la siguiente:
Cuando el botón “Activar” se pulsa, queda marcado y el cuadro de texto se vuelve visible
Cuando el botón “Desactivar” se pulsa, queda marcado y el cuadro de texto se vuelve invisible

Para ello, he creado 2 macros:

REM  *****  BASIC  *****

Sub Mostrar_ctxt1
    Dim oForm As Object
    Dim oButton As Object
    Dim oTextField As Object

    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    oButton = oForm.getByName("btn1")
    oTextField = oForm.getByName("ctxt1")

    If oButton.State = 1 Then
        oTextField.EnableVisible = True
    End If
End Sub

Sub Ocultar_ctxt1
    Dim oForm As Object
    Dim oButton As Object
    Dim oTextField As Object

    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    oButton = oForm.getByName("btn1")
    oTextField = oForm.getByName("ctxt1")

    If oButton.State = 0 Then
        oTextField.EnableVisible = False
    End If
End Sub

La macro “Mostrar_ctxt1” la he asociado al evento “Estado modificado” del botón “Activar”
La macro “Ocultar_ctxt1” la he asociado al evento “Estado modificado” del botón “Desactivar”

No logro que el comportamiento esperado funcione correctamente, sin embargo creo que está todo configurado bien.

¿Hay algo que esté haciendo mal? No consigo localizar el error.

Gracias.

Adjunto el fichero:
prueba_formulario_avanzado.odt (10.4 KB)
Versión 7.6.2.1 (x64)
SO Windows 10 Pro

Las macros que van a responder a eventos tienen que tener obligatoriamente un parámetro que será el evento que llamó a la macro. así que las macros deberían ser:

Sub Mostrar_ctxt1 (oEvent As Object)
    Dim oForm As Object
    Dim oButton As Object
    Dim oTextField As Object

    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    oButton = oForm.getByName("btn1")
    oTextField = oForm.getByName("ctxt1")

    If oButton.State = 1 Then
        oTextField.EnableVisible = True
    End If
End Sub

Sub Ocultar_ctxt1(oEvent As Object)
    Dim oForm As Object
    Dim oButton As Object
    Dim oTextField As Object

    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    oButton = oForm.getByName("btn1")
    oTextField = oForm.getByName("ctxt1")

    If oButton.State = 0 Then
        oTextField.EnableVisible = False
    End If
End Sub

[Nota] El archivo que has mandado solamente incluye el formulario y no incluye las macros. Cuando se pregunta sobre macros, lo conveniente es añadir las macros al archivo adjunto, para que quien quiera ayudarte no tenga que escribirlas de nuevo.

prueba_formulario_avanzado.odt (12,0 KB)

1 Like

Gracias por la respuesta.

Es posible que no tenga claro los conceptos a la hora de crear macros, acabo de empezar a meterme con este tema.

El fichero que he subido, está configurado con las macros de la siguiente manera.

Sin embargo, me dices que el fichero enviado no contiene la macro. No entiendo muy bien esto, ya que yo sí que las veo.

Yo usaría una casilla de verificación en vez de botones de opción.

Sub chk_mostrar_action(event)
    oForm = ThisComponent.DrawPage.Forms.getByName("Formulario")
    oTextField = oForm.getByName("ctxt1")
	oTextField.EnableVisible = event.Source.State
End Sub

foro

2 Likes

Gracias por la respuesta.

Voy a intentar probar con tu solución, me parece más eficiente que la mia.

Lo he dejado finalmente con una casilla de tipo check, me parece más intuitivo especialmente hacia el usuario final.
Aunque me guardo también la opción inicial, corregida por @jucasaca, por si tuviera que implementar algo similar mediante botones de opción.

Agradezco ambas respuestas.

Las macros que están en Mis macros y diálogos > Standard Module1 están solo en tu equipo y no se distribuyen con el documento.
Para que las macros estén y se distribuyan con el documento, deben estar en Nombre del documento > Biblioteca > Módulo, en tu caso concreto en prueba_formulario_avanzad.odt > Standard > Module1 (mira en el documento que yo he adjuntado)

Organizar bibliotecas y módulos (libreoffice.org)

1 Like

Esto no lo sabía.

Aplicaré esto en aquellos documentos que me interese distribuir en mi trabajo.

¡Gracias de nuevo!