Inicio de sesión

Quién está conectado

Actualmente hay 0 usuarios y 2 invitados en línea.

Sindicar

Distribuir contenido

Incremento automático del contenido de una celda en una tabla de texto

Esta pequeña macro ha sido inspirada por Joan Martinez Seres (Linux BCN), en un mensaje a la lista de correo de Badopi en el que solicitaba la manera de crear una plantilla para facturas en OpenOffice.org que incrementase automáticamente el número de factura.

De paso, me ha servido para repasar un poco eso de las macros en el Basic de OpenOffice.org, que tengo muy olvidadas a causa de mi falta de tiempo.

El documento autoincremento.odt con la macro creada puedes descargarla al pie del artículo donde aparece como anexo

Creación de la tabla

He optado por crear una tabla a la que he denominado encabezado, en cuya celda B3 (columna 2, fila 3) he ubicado el número de factura. Pasos seguidos:

  • en menú Insertar -> Tabla:
    • Nombre: encabezado
    • Filas: 4
    • Columnas: 2
  • Combinar las dos celdas de la fila 1
  • Escribir contenido.

La apariencia final de la tabla:

fralinuxbcn


Código de la macro

La forma de abordar la tarea ha sido crear una macro que obtenga el contenido de esa celda y lo incremente. Éste es el código:

Sub incrementa

Dim oTablas As Object
Dim oTabla As Object
Dim oCelda As Object
Dim numfra As String

' localiza celda
oTablas = ThisComponent.getTextTables()
oTabla = oTablas.getByName("encabezado")
oCelda = oTabla.getCellByName("B3")

' obtiene numfra
numfra = oCelda.getString

' incrementa numfra
numfra = str$(val(numfra) + 1)

' escribe numfra
oCelda.setString(numfra)

End Sub

Pasos seguidos para crear la macro:

Abre el menú Herramientas -> Macros -> Organizar macros -> OpenOffice.org Basic, y en el diálgo que aparece:

  • Macro desde: nombre del documento, biblioteca Standard , módulo Module1
  • Nombre de la macro: incrementa
  • pulsar botón Editar
  • en el editor de Basic, escribir el código anterior.

Creación de un botón que activa la macro

Para comprobar el funcionamiento de la macro, he creado un botón en el documento, siguiendo estos pasos:

  • menú Ver -> Barras de Herramientas -> Campos de control de formulario
  • activar Modo Diseño boton diseño
  • activar Botón boton boton y dibujar un botón en el documento.
  • seleccionar botón dibujado y pulsar clic derecho -> Campo de control; modificar las siguientes propiedades:
    • pestaña General -> Título: Incrementa factura
    • en la pestaña Acontecimientos -> Botón del ratón pulsado asignar la macro incrementa
  • en la barra de Campos de control, desactivar el botón Modo Diseño

Ahora, ya podemos comprobar como pulsando el botón que hemos creado, el contenido de la celda con el número de factura se incrementa automáticamente. Si borramos el contenido de la celda, la siguiente pulsación del botón nos mostrará el número 1.

Ejecutar la macro cada vez que se guarda el documento

Si deseamos que la macro se ejecute cada vez que guardamos el documento, tan sólo debemos seguir estos pasos:

  • menú Herramientas -> Personalizar
  • pestaña Eventos
  • seleccionar el evento Guardar documento y pulsar el botón Asignar macro.

Ahora comprobemos que cada vez que modificamos y guardamos el documento, el número también se incrementa automágicamente.

Habría otras maneras de abordar la tarea; por ejemplo, el número podría estar fuera de una tabla, en cuyo caso podríamos asignarle un marcador y en el código deberíamos usar el método apropiado (¿getTextBookmarks?) en vez de getTextTables. Me ha parecido, dada mi bisoñez con estas macros, que usar una tabla sería lo más facil de manejar, además de que para el caso que se trata (un modelo de facturas) es lo más habitual.

por hacer ...

Lo que no he sido capaz de solucionar es como guardar el documento como plantilla, de manera que en la propia plantilla se incremente el número cada vez que se crea un nuevo documento a partir de la plantilla. Queda como proyecto para cuando haya más tiempo para estudiar. ;-)

AdjuntoTamaño
autoincremento.odt32.36 KB

Sin suscripción


Documentación LibreOffice en español

Comentarios recientes

Encuesta

¿Sobre qué programas esperas encontrar tutoriales y ejercicios en SuperAlumnos.net? :