76
OpenOffice Basic Fermí Vilà BA-1 Introducción a la programación en OpenOffice.org Basic Fermí Vilà

Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-1

Introducción a la

programación en

OpenOffice.org Basic

Fermí Vilà

Page 2: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-2

1.- Nuestro primer programa

El “OpenOffice Basic” es un lenguaje de programación completo (es una versión de BASIC), que nos permite crear aplicaciones visuales interactivas y completas por medio de nuestro “OpenOffice”.

- Ejecuta el OpenOffice Calc- Asegúrate que el nivel de seguridad está bajo. Es decir:

Menú HerramientasOpciones...

OpenOffice.org: Seguridad[Seguridad de Macros...]

Bajo (no recomendado) ….[Aceptar][Aceptar]

- Graba el libro de cálculo (que de momento está vacío) como Macro01 en TuCarpeta

- Menú HerramientasMacros

Organizar macrosOpenOffice.org Basic ...

• Haz clic en [Editar]• Acabamos de acceder al Module1 de nuestro fichero Macro01, observa la pestaña del

ángulo inferior izquierdo:

Es el lugar donde escribiremos nuestros programas en OpenOffice Basic. Observa que de hecho nos encontramos en una ventana separada del Macro01.ods:

– Borra todo lo que aparece en el Editor del Basic, exceptuando:

Page 3: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-3

Todas las líneas, precedidas por “REM” representan “comentarios” para el programador. Es decir a efectos de “programa” tanto da dejar la línea como ponerla.

- Escribe en el Editor del Basic, el siguiente programa:

- Clic en el icono “Guardar” y cierra la ventana correspondiente al editor de OooBasic (Mis macros y diálogos.Standard – OpenOffice.org Basic)

- Vamos a ejecutar nuestro programa:• Menú Herramientas

MacrosEjecutar macro ...

• Clic en [+] de “Mis macros”• Clic en [+] de “Standard” de Mis macros• Clic en “Module 1”• [Ejecutar]

Si todo funciona correctamente, en la celda D9 de nuestra hoja de cálculo, aparece la frase Hola Mundo

Sitúate en el Editor del Basic para visualizar el programa, es decir:Menú Herramientas

MacrosOrganizar macros

OpenOffice.org Basic ...[Editar]

1º) Básicamente existen dos tipos de “programas”: procedimientos o funciones. Nuestro programa es un procedimiento porque empieza por Sub y acaba por End Sub

2º) Observa la estructura de un procedimiento (llamado también subprocedimiento):Sub NombreDelPrograma

Sentencia 1Sentencia 2Sentencia 3

...

...End Sub

3º) Las primeras líneas de un programa se usan normalmente para declarar los elementos que utilizaremos en el programa. Para ello, en el BASIC, se utiliza la cláusula Dim:

Dim Hoj As ObjectDim Cel As Object

Declaramos dos objetos (nuestro BASIC, permite la POO: programación orientada a objetos), que serán, el primero una hoja de cálculo y el segundo una celda.

Page 4: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-4

4º) Hoj = ThisComponent.Sheets(0)Definimos el objeto “Hoj” como nuestro documento (ThisComponent = este componente), concretamente la Hoja 1 (Sheets(0) = Hoja 1). Se empieza a contar por 0, igual que en las coordenadas que vemos a continuación.

5º) Cel = Hoj.getCellByPosition(3,8)Definimos el objeto “Cel” como la celda de la Hoja de cálculo (Hoj) de coordenadas (3,8).Coordenadas de una celda = (X , Y)

1ª coordenada: X , número de columna = x + 12ª coordenada: Y , número de fila = y + 1

Es decir:Número de columna = 3 + 1 = 4, por lo tanto: A, B, C, DNúmero de fila: 8 + 1 = 9, por lo tanto fila 9

En definitiva, se trata de la ceda : D9

6º) Cel.SetFormula(“Hola Mundo”)En el objeto Cel, construido anteriormente, escribe el texto (SetFormula), que tenemos entre comillas y paréntesis.

2.- Botones

La forma de ejecutar el programa:Menú Herramientas

MacrosEjecutar macro...

Seleccionar el programa y [Ejecutar]es bastante laborioso; veamos otra forma de hacerlo, pero antes ...

- Sitúate en el “Editor del Basic” del Macro01 y escribe (a continuación del Prog01):

- Sitúate en la Hoja 1 del Macro01.ods• Graba el libro de cálculo: clic en “Guardar”• Ejecuta el programa Prog02. Es decir:• Menú Herramientas

MacrosEjecutar macro ...

Selecciona el Prog02 (en Mis macros – Standard – Module 1) y [Ejecutar]Si todo funciona correctamente, en la Hoja2, celda B2 tenemos la frase Hola Mundo

Si comparas nuestro programa Prog02 con el anterior, aparte de la hoja, ahora estamos en la Sheets(1). La sintaxis corresponde a la POO: el operador punto para separar los diferentes objetos hasta llegar a un último objeto, que no es más que una propiedad o un método (acción).Es decir, en nuestro caso:

Objeto1.SubObjetoA.SubObjetoB.MétodoObjeto1 = ThisComponent (este componente, en nuestro caso un libro de cálculo)SubObjetoA = Sheets(1) (la hoja 2 del libro anterior)SubObjetoB = getCellByPosition(1,1) (la celda B2 del objeto anterior)Método = SetFormula(“Hola Mundo”) (acción = escribe en el objeto anterior, “Hola Mundo”)

- Borra el “Hola Mundo” de la Hoja2 y sitúate en la Hoja1

Vamos a ejecutar nuestro Prog02, utilizando un botón ...

– Necesitamos la barra de iconos Campos de control de formulario, en caso de no estar presenteHaz lo siguiente:

Page 5: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-5

• Menú VerBarras de Herramientas ...

• Clic en “Campos de control de formulario”

- Clic en el botón: de la nueva barra.

Según la versión de OpenOffice, la imagen del botón puede ser diferente.

- Marca un recuadro que abarque la celda B2 (estamos en la Hoja1) aproximadamente:

- Con el botón que acabamos de crear seleccionado, accede a su menú contextual.

• Selecciona la opción: Campo de Control...• Solapa: General

Propiedad Título: borra “Botón” y escribe en su lugar Prog02• Solapa: Acontecimientos

Sitúa el cursor de escritura en el campo “Botón del ratón pulsado” y clic en su [...]

• [Asignar]• Mis macros – Standard – Module 1 - Prog02• [Aceptar]• [Aceptar]

• Cierra la ventana Propiedades: Botón (clic en la X de su extremo superior derecho)

Haz clic en el icono “Modo Diseño”:para salir del modo diseño y volver al modo “ejecución”.

Según la versión de OpenOffice, la imagen del botón puede ser diferente.

Vamos a probar el botón:

- Clic en [Prog02]- Si todo funciona correctamente en B2 de Hoja2, tendremos “Hola Mundo”

Borra el texto anterior y vuelvelo a probar.Por último graba la hoja Macro01.ods con el mismo nombre y ciérrala

3.- Cuadros de diálogo estándard

En los programas anteriores, hemos utilizado celdas de una hoja de cálculo, para escribir resultados. Aparte de los cuadros de diálogo personalizados, que veremos más adelante, podemos utilizar los llamados “Cuadros de diálogo estándar”.

- Crea una hoja de cálculo nueva (Menú Archivo – Nuevo – Hoja de Cálculo) y grábala como Macro02.ods en TuCarpeta

- Accede al Editor del Basic del Macro02.ods• Menú Herramientas

MacrosOrganizar macros

OpenOffice.org Basic ...

Page 6: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-6

Si seleccionas: Mis macros – Standard – Module 1 verás que aparecen los programas Prog01 y Prog02. Por defecto, al crear un programa, nos colocamos automáticamente en “Mis macros” y al escribir el o los programas en el “Standard” de Mis macros, éstos serán accesibles desde cualquier documento OOo.A partir de ahora “grabaremos” nuestros programas en el documento correspondiente, es decir:

• Selecciona Standard de Macro02.ods• [Nuevo]• Acepta el nombre Module1

- Escribe los programas:

- Vuelve a la pantalla del Macro02.ods (Hoja1), vamos a crear un botón para ejecutar el Prog03, es decir:

• Con la barra Campos de control de formulario a la vista.

• Clic en el icono “Botón”:

• Marca un recuadro que abarque a la celda B2 (un poco más grande)• Accede al menú contextual del botón acabado de insertar• Haz clic en la opción “Campo de Control...”• Establece como propiedad Título: Prog03 (Solapa: General)• Pestaña: Acontecimientos

En el campo “Botón del ratón pulsado”, asigna el programa Prog03 de Macro02.ods (Standard – Module1)

• Sal del modo diseño: clic en el icono Modo Diseño:

- Prueba el funcionamiento del botón; si todo va bien, tendremos:

- Crea otro botón, pero ahora asociado al Prog04:

En este caso tendremos:

Page 7: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-7

Está claro que el cuadro de diálogo MsgBox tiene muchas posibilidades, ya las estudiaremos más adelante en detalle. Ahora nos interesa un cuadro de diálogo que nos permita “entrar” datos ...

Sitúate en el Editor del Basic del Macro02.ods y escribe el siguiente programa:

- Sitúate en la Hoja1 del Macro02.ods y crea un botón que has de asociar al Prog05:

- Ejecuta el Prog05, es decir, clic en [Prog05].Si todo funciona correctamente, debería pasar algo así:

- Vamos a estudiar el Prog05 (sitúate en el editor del Basic, para visualizarlo):• Dim nom As String, ciudad As StringDeclaramos dos variables (nom y ciudad) de texto (String)• nom = InputBox(“Escribe tu nombre”)“InputBox” es un cuadro de diálogo estándar, que contiene un mensaje (que es lo que escribimos entre comillas y paréntesis) y un campo en blanco; donde el usuario del programa puede escribir lo que quiera. En el momento de hacer clic en el [Aceptar] del InputBox, lo que hemos escrito en el campo que estaba vacío, se entiende como un texto (ya veremos cuando necesitemos un número) y se guarda en la variable de nombre “nom”.• MsgBox “mensaje1” & “variable1 & “mensaje2” & Chr$(13) & variable2 ...Observa en primer lugar, el operador de concanetación (unir), se trata del “ampersand” y lo que hace es unir los diferentes elementos que “opera”; estos elementos pueden ser:

. El texto que sea encerrado entre comillas

. Variables

. Chr$(13): que representa la pulsación de un [Return], o si tú quieres: fuerza a una nueva línea lo que viene a continuación.

Page 8: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-8

Para acabar este apartado, vamos a hacer un programa que mezcle los cuadros de diálogo estándar y los elementos de nuestros documentos “Calc” (celdas en nuestro caso)...

- Sitúate en el “Editor del Basic” y escribe:

- Sitúate en Macro02.ods• Crea un botón asociado a Prog06• Prueba el funcionamiento del programa• Espero que te funcione correctamente• Graba el libro de cálculo con el mismo nombre Macro02.ods

4.- Tipos de Variable

OpenOffice Basic soporta los tipos numéricos, cadenas, booleanos y objetos variables. Los objetos son usados principalmente para referirse a los elementos internos del OpenOffice como documentos, tablas, etc. Con un objeto podremos usar sus correspondientes propiedades y métodos. Si usamos “Dim”:los tipos numéricos son inicializados en cero y las cadenas como la cadena vacía “”

Los tipos más utilizados (no los únicos):- Tipo Boolean: puede tomar los valores True (verdadero = -1) y o False (falso = 0)

- Tipo String: cadena de textoSi escribimos el carácter $ al final del nombre, automáticamente definimos un “String”Es decir: Dim nom$ es equivalente a Dim nom As String

- Tipo Integer: número enteroNúmero de –32.768 a +32.767

Dim x% Es equivalente a Dim x As Integer

- Tipo Long: número largoNúmero entero entre: -2.147.483.648 y +2.147.483.647

- Tipo Double: número decimal

- Crea un nuevo libro de cálculo, que deberás grabar como Macro03.ods en TuCarpeta

- Accede al Editor del Basic (deberás crear un Module1) del Macro03 y escribe el siguiente procedimiento:

- Sitúate en el Macro03.ods y crea un botón de título: Prog07, asociado al procedimiento Prog07.

- Ejecuta el procedimiento “Prog07” de la siguiente forma:

Page 9: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-9

• Clic en [Prog07]• Ante la primera ventana, haz lo que te dice el programa: Escribe lo que quieras y [Aceptar] o

pulsa[Return]• Número de Columna ?, escribe 5 y [Return]• Número de Fila ?, escribe 7 y [Return]• Si todo funciona correctamente, en la celda E7 (quinta columna, septima fila), aparece lo

que has escrito primeramente.

Veamos:

- Sitúate en el Editor del Basic y observa:• Declaramos x e y como “Integer” ya que representarán las coordenadas de una celda• InputBox (“ “) devuelve un texto.• Val(InputBox(“ “)) devuelve un número. Dicho de otra forma: Val es una función que

convierte una cadena que representa números, en dichos números (integer).

- Sitúate en el Editor del Basic de Macro03.ods y escribe el siguiente procedimiento:

- Sitúate en el Macro03.ods y crea un botón de “Título = Prog08”, asociado al procedimiento “Prog08”

- Ejecuta el procedimiento de la siguiente forma:• Clic en [Prog08]• Escribe como base del rectángulo 3,07• Escribe como altura del rectángulo 2,15• Si todo funciona correctamente en la celda B21, tendremos el número 6,6005 (siempre y

cuando aumentemos el número de decimales)

Veamos:- Sitúate en el Editor del Basic y observa:

• Coordenadas = (1,20) = 2ª columna – 21 fila = B21• La base y la altura (bas, alt) se declaran Double, ya que pueden ser decimales.• La función CDbl( ), convierte una cadena de caracteres en número “double”• Cel.SetValue(bas*alt)

bas*alt es un número. La función que escribe un número en una celda es SetValue. De la misma forma que lo hace SetFormula si es un texto.

– Sitúate en el Editor del Basic de Macro03.ods y escribe el siguiente procedimiento:

- Sitúate en Macro03.ods y crea un botón de Titulo = Prog09, asociado al procedimiento Prog09

- Ejecuta el procedimiento de la siguiente manera:• Clic en [Prog09]• Escribe como radio de la circunferencia: 3,5812• Observa que pi = 3,14159265358979

Page 10: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-10

• Si todo va bien en G7 aparece 22,50134322 (deberás aumentar el número de decimales de la celda)

Veamos:- Sitúate en el Editor del Basic y observa:

• Coordenadas = (6,6) = 7ª columna – 7ª fila = G7• longi =2*pi*radi

Asignamos (el operador de asignación es el “=”) a la variable “longi” el resultado del producto 2*pi*radi.

• pi, es una constante incorporada al lenguaje cuyo valor es 3,14159265358979• Observa que &, concatena sin problema texto y números: “pi = “ & pi

- Sitúate en el Editor del Basic de Macro03.ods y escribe el siguiente procedimiento:

- Sitúate en Macro03.ods y crea un botón de Título = Prog10, asociado al procedimiento Prog10

- Ejecuta el procedimiento de la siguiente manera:• Clic en el botón [Prog10]• Base del triángulo = 3,75• Altura del triángulo = 2,17• Si todo funciona correctamente

tendremos:

- Observa el Prog10, el único elemento nuevo es cStr(), función que convierte un número a una cadena de caracteres. En efecto:

• SetFormula(cadena): coloca en la celda correspondiente el texto “cadena”• “bas” es Double, por lo tanto SetFormula(“Base = “ & cStr(bas)), es decir, en la celda

correspondiente se escribirá el texto “Base = “ y a continuación (operador “&”) el texto “bas” ya que la función cStr, lo convierte en texto.

- Para acabar este apartado: sitúate en el “Module1” y escribe el siguiente procedimiento:

Page 11: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-11

- Escribe en la Hoja1:

Siendo en botón [Calcular], el botón de Título= Calcular, asignado al procedimiento Prog11

- Prueba el funcionamiento del procedimiento anterior de la siguiente forma:• Escribe en la celda E3 = 3,4• Clic en [Calcular]• Si todo funciona correctamente, en la celda E5, aparece 36,316811 (=3,4*3,4*pi)

Veamos, es importante porque estamos interactuando con el interface del “Calc” (no estamos utilizando ni el InputBox, ni el MsgBox)...

- Sitúate en el Editor del Basic del Macro.03. para investigar el procedimiento: Prog11• Cel1, representa la celda E3 ya que Cel1 = Hoj.getCellByPosition(4,2): 5ªcolumna, 3ª fila.• Cel2, representa la celda E5 ya que Cel2=Hoj.getCellByPositiuon(4,4): 5ª columna, 5ª fila• En Cel1 nostros escribimos un dato (numèrico): para que el programa lo recoja hacemos

Cel1.getValue,concretamente lo asignamos a la variable radi: radi=Cel1.getValueSi fuera texto, haríamos: Cel1.getFormula

• En Cel2 el programa ha de escribir un número, es decir: Cel2.SetValue(). Si fuera texto, escribiríamos: Cel3.SetF0rmula()

Page 12: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-12

Ejercicios

1) Crea un nuevo libro de cálculo de nombre EjerM01.ods que contenga un procedimiento de nombre EjerM01, que se ejecute con un botón y funcione de la siguiente forma:- El programa nos pregunta nuestro nombre- El programa nos pregunta nuestra edad (en años, claro)- El programa escribe en la hoja de cálculo, nuestro nombre y a continuacion los días que tenemos de vida hasta el momento, de la siguiente forma:

2) Crea un nuevo libro de cálculo de nombre EjerM02.ods que contenga un procedimiento de nombre EjerM02, que se ejecute con un botón y haga lo siguiente:

- El programa nos pide un número entero- El programa nos muestra el doble, el triple y el cuadruple del número que habíamos introducido

de la siguiente forma:

3) Crea un nuevo libro de cálculo de nombre EjerM03.ods, que contenga dos procedimientos de nombre EjerM03 y EjerM03bis que funcionen de la siguiente forma:

El botón [Calcular] está asociado al EjerM03 que calcula el determinante y el botón [Otro], que corresponde al EjerM03bis, lo único que hace es asignar la cadena vacía (“”) a las cuatro celdas. Observa que en nuestro programa no hay ningún InputBox ni MsgBox.

Page 13: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-13

5.- La estructura “If – then – End If”

Crea un nuevo libro de cálculo y grábalo con el nombre Macro04.ods en TuCarpeta

Accede al Editor del Basic (deberás crear el Module1 en Macro04.ods) y escribe el siguiente programa:

- Sitúate en la hoja de cálculo. Crea un botón asociado al procedimiento Prog12 y pruébalo.

- Espero que te funcione correctamente en las dos versiones:• Contestando a la pregunta con la palabra “Pepe”• Contestando cualquier cosa que no sea “Pepe”

- Estudio del Prog12• En la función InputBox, hemos escrito dos parámetros: el primero “Estructura IF – THEN –

ESLSE”, es el que aparece en el interior del cuadro “inputbox” y el segundo no es más que el título de la ventana “InputBox”:

Si escribimos un solo argumento, éste es el mensaje que aparece en el interior del cuadro, y no aparece ningún título en la ventana.

• Observa la estructura de programación “IF – THEN – ELSE”. Constituye la estructura de programación más simple: Si se cumple la condición, entonces haz lo siguiente, si no se cumple, haz esto otro.

Es decir:Si (If) escribo “Pepe” entonces (then) aparecen dos cuadros, el primer cuadro con el

mensaje “Hola Pepe”, el segundo cuadro con el mensaje “No te conozco”. En caso contrario (Else), es decir, si no escribo “Pepe”: aparece el mensaje “Lo siento me he equivocado”.

Básicamente, con la estructura IF – THEN – ELSE, conseguimos una bifurcación del programa: el si entonces o el caso contrario. Veamos, que no únicamente representa una bifurcación, en el siguiente procedimiento (debido a que utilizamos todas las posibilidades de la estructura).

- Sitúate en el Editor del Basic de Macro04 y escribe el siguiente procedimiento:

Page 14: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-14

- Sitúate en la hoja de cálculo (no te olvides de ir grabando los cambios). Crea un botón asociado al procedimiento Prog13 y pruébalo como mínimo tres veces: para un número mayor de 100, para un número menor de 100 y escribiendo precisamente el 100.Espero que te funcione correctamente:

Observa en definitiva, la sintaxis completa de la estructura:If condición1 Then

Sentencia 1Sentencia 2...

ElseIf condición2 ThenSentencia 3Sentencia 4...

ElseIf condición3 ThenSentencia 5Sentencia 6...

...

...Else

Sentencia 7Sentencia 8...

End If

Debes tener en cuenta que las líneas de programa: sentencia 7, sentencia 8, ... sólo se ejecutarán si no se cumple ninguna de las condiciones que hemos considerado en la estructura.

6.- Contadores. Operadores Lógicos

Crea un nuevo libro de cálculo y grábalo con el nombre Macro05.ods en TuCarpeta

Accede al Editor del Basic (deberás crear el Module1 en Macro05) y escribe el siguiente procedimiento:

Page 15: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-15

- Sitúate en la hoja de cálculo (Hoja1). Crea un botón asociado al procedimiento Prog14 y pruébalo:

- Ejecuta varias veces el programa, observando detenidamente su resultado y el mismo programa ya que nos encontramos con elementos nuevos, veamos

• Si al escribir un programa, nos encontramos con una línea demasiado larga, podemos redistribuirla en varias líneas, sin más que escribir el símbolo de subrayado al final de la línea (o cada línea), precedido de un espacio. Es decir: las líneas de programa:

s = s + “Valor de x después de pasar por el contador x=x+3” + Chr(9) + _cStr(x)) + Chr(10)

son en realidad una sóla línea.• Declaramos una cadena: Dim s As String y la inicializamos a nada: s=””. No sería

necesario ya que al declararla, automáticamente se inicializa a “nada”.• x=x+3 es un contador, instrumento muy utilizado en “programación”, que nos permite

añadir al valor de X tres unidades.Si se lee de la siguiente forma, creo que se entiende mejor: “El nuevo valor de X es igual al anterior valor de x + tres unidades.

• La función Chr(9) es equivalente a pulsar la tecla de tabulación: [Tab]• La función Chr(10) es equivalente a pulsar la tecla [Return] o [Intro]. Equivale a Chr$(13)• x=x-2, x=x*3 son dos contadores de “x”, en el primer caso modificará el valor de x

disminuténdolo en 2 unidades y en el segundo lugar multiplicándolo por 3.• El operador “suma” entre “Strings” se comporta como el operador de concatenación “&”. Es

decir: sumar dos textos es equivalente a unirlos: colocarlos uno al lado del otro.• s es una cadena (string) que pasa por diferentes “contadores”: s = s + ... En la práctica,

acumulamos en “s” muchos datos, que al incluir el Chr(9) y el Chr(10) se organizan en diferentes líneas (Chr(10)) y columnas (Chr(91)).

• Observa la técnica que utilizamos en este procedimiento: “Acumulamos en s una serie de datos, durante la ejecución de todo programa y que mostramos al final: MsgBox s”

- Escribe en el Editor de Basic del Macro05.ods, el siguiente procedimiento:

Page 16: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-16

- Sitúate en la hoja de cálculo (Hoja1). Crea un botón asociado al procedimiento Prog15 y ejecútalo varias veces: prueba las diferentes posibilidades: H, h, V, v, cualquier cosa.

- Observa el Prog15:• String*1

Significa “string”, es decir, texto pero de longitud 1, o sea, un solo carácter.• Or

Significa, evidentemento “o”

- Escribe el siguiente procedimiento:

- Crea un botón asociado al programa Prog16 y ejecuta el programa unas cuantas veces, buscando detenidamente lo que sucede: observa qué técnica más sencilla tenemos, para interrumpir un programa o volver a empezar.

Acabamos de ver un programa con el operador lógico “Or”, vamos a ver ahora uno con el operador lógico “And”: utilizaremos este operador cuando sea preciso que para ejecutar un bloque de instrucciones se cumpla más de una condición. Observa que deberán cumplirse todas las condiciones ...

- Escribe en el Macro05.ods el siguiente procedimiento:

- Crea un botón asociado al programa Prog17 y ejecuta el programa unas cuantas veces. Considera el caso: “Patatas” y “Total >50”:

Page 17: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-17

- Estudio del Prog17:• Observa en primer lugar que no declaramos ninguna variable y el programa funciona

exactamente igual. Si no declaramos una variable, por dfecto, el OpenOffice considerará a esta variable tipo Variant, esto es un tipo indefinido de variable que toma el valor correcto cuando adquiere o asignamos un valor. Bajo este punto de vista, podríamos pensar que es mejor no declarar las variables. Pero hay un problema: el tipo Variant es el que consume más memoria. La conclusión, pues, es declarar todas las variables, aunque el “BASIC” no nos lo exija.

• Observa el uso del operador dos puntos “:”, nos permite escribir varias sentencias distintas de un programa en una sola línea. Viene a ser el operador contrario al “carácter de subrayado, precedido de un espacio en blanco”, que nos permitía separar en varias líneas, una única sentencia.

7.- Otras estructuras de programación

Crea un nuevo libro de cálculo y grábalo con el nombre Macro06.ods en TuCarpeta

Accede al Editor de Basic (deberás crear el Module1 en Macro06.ods) y escribe el siguiente procedimiento:

- Crea un botón (en Hoja1), asociado al procedimiento Prog18 y ejecuta el programa unas cuantas veces.

Page 18: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-18

- La estructura de programación “Select Case”

Select Case variableCase a

Sentencia1Sentencia2...

Case bSentencia3Sentencia4...

Case ElseSentencia5Sentencia6...

End Select

Viene a ser una generalización de la estructura If – Then: según el valor de la “variable”, se ejecutarán unas sentencias u otras.

Veamos a continuación una generalización en las condiciones del “Select – Case” ...

Escribe (en Macro06) el siguiente procedimiento:

Sub Prog19Dim num As Integer, notanum As IntegerDim bien As Integer, notacual As String, s As StringDim hoj As Object, Cel1 As Object, Cel2 As ObjectDim Cel3 As Object, Cel4 As Object, Cel5 As ObjectHoj=ThisComponent.Sheets(0)Cel1=Hoj.getCellByPosition(4,4):Cel2=Hoj.getCellByPosition(4,5)Cel3=Hoj.getCellByPosition(4,6):Cel4=Hoj.getCellByPosition(4,7)Cel5=Hoj.getCellByPosition(4,8)num=Val(InputBox("Escribe el número total de preguntas")bien=Val(InputBox("Escribe el número de respuestas acertadas")notanum=10*bien/numSelect Case notanum

Case 0 to 1notacual="Muy Deficiente"

Case 2 to 3notacual="Deficiente"

Case 4notacual="Insuficiente"

Case 5notacual="Suficiente"

Case 6notacual="Bien"

Case 7 to 8notacual="Notable"

Case 9 to 10notacual="Excelente"

End Selects="Nota Cualitativa" & Chr(10) & Chr(10)s=s & "Número de preguntas =" & num & Chr(10)s=s & "Número de correctas = " & bien & Chr(10)s=s & "Nota cualitativa = " & cStr(notanum) & Chr(10)s=s & "Nota cualitativa : " & notacualMsgBox sCel1.SetFormula("Nota Cualitativa")Cel2.SetFormula("Número de preguntas " & cStr(num))Cel3.SetFormula("Número de correctas " & cStr(bien))Cel4.SetFormula("Nota Cuantitativa " & cStr(notanum))

Page 19: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-19

Cel5.SetFormula("Nota Cualitativa " & notacual)End Sub

- Crea en Hoja1 un botón asociado al procedimiento anterior y ejecútalo varias veces, para comprobar su funcionamiento.

Veamos a continuación otra estructura de programación, en esta ocasión de tipo repetitivo.

- Escribe en el “Editor de Basic” del Macro06.ods el siguiente procedimiento:

- Crea en Hoja1 un botón asociado al procedimiento Prog20 y ejecútalo varias veces, para comprobar su funcionamiento.

- Estudio del Prog20• La estructura “For – To – Next”

For indice = número1 To número2Sentencia 1Sentencia 2Sentencia 3...

Next

Page 20: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-20

El bloque de sentencias 1, 2, 3, ... se repiten desde el número1 hasta el número2 de unidad en unidad

• Observa de qué forma “acumulamos” la suma, utilizamos un contador del tipo: Total = Total + Valor. Es decir, el nuevo valor de “Total” es el anterior valor de “Total” más el nuevo número “Valor”.

- Escribe en el “Editor de Basic” de Macro06.ods el procedimiento:

- Crea un botón asociado al procedimiento Prog21y ejecuta el programa.Si todo funciona correctamente, se rellenará el rango H11:H15 de los números pares 2, 4, 6, 8, 10

- Observa: “For i=2 To 10 Step 2”Desde i=2 hasta i=10 de dos en dos (step = paso)

Vamos a hacer un programa que nos permita calcular la media de 5 notas ...

- Escribe en el “Editor de Basic” de Macro06 el procedimiento:

-

Crea un botón asociado al procedimiento Prog22 y ejecuta varias veces el programa.Vamos a por otro ejercicio de “for – to next”: escribe en el “Editor de Basic” del Macro06, el procedimiento:

Page 21: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-21

- Crea un botón asociado al procedimiento Prog23 y ejecuta varias veces el programa.

Vamos a estudiar la estructura repetitiva “Do While ... Loop” ...

- Escribe en el “Editor de Basic” del Macro06.ods el siguiente procedimiento:

- Crea un botón, en la Hoja2 de Macro06.ods, asociado al procedimiento Prog24 y ejecútalo varias veces.

- La estructura de programación Do While - Loop

Do While condiciónSentencia1Sentencia2...

LoopMientras se cumpla la “condición”, se repetirá la ejecución de las sentencias 1, 2, etc.

- Escribe en el “Editor de Basic” del Macro06.ods el siguiente procedimiento:

- Crea un botón, en la Hoja2, asociado al procedimiento Prog25 y ejecútalo.

- En el Prog16 vimos una forma de volver a empezar, pero sólo una vez, en cambio en el Prog25 gracias a la estructura “Do While – Loop”, disponemos de una tècnica para repetir la ejecución de un programa (volver a empezar), tantas veces como queramos.

Vamos a complicar el programa, se trata de crear un procedimiento que sirva para incluir registros en una base de datos. El programa irá pidiendo datos mientras escribamos algún valor en el “InputBox” correspondiente al campo “nombre”, de forma que si al preguntar el “nombre”, no escribimos nada, se terminará la ejecución del bloque correspondiente al Do While – Loop

Page 22: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-22

- Escribe:

- Crea un botón asociado al procedimiento Prog26 y ejecútalo varias veces.Debes tener en cuenta que las celdas de la hoja de cálculo correspondientes a una fecha, deberás formatearlas así: como fechas.

Al introducir una fecha utilizando el InputBox, por defecto, deberás utilizar la notación inglesa: primero el mes y después el día.

– Graba el libro de cálculo Macro06.ods con el mismo nombre.

Crea un nuevo libro de cálculo, que deberás grabar como Macro07.ods en TuCarpeta y crea un “Module1”

Programa que suma todos los números que queramos

- Escribe en el Editor de Basic de Macro07 el siguiente procedimiento:

Page 23: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-23

- Crea un botón, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejecútalo unas quantas veces.

Page 24: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-24

Programa que nos resuelve una equación de 2º grado

- Escribe en el “Editor del Basic” del Macro07 el siguiente programa:Sub Prog28

Dim a As Double, b As Double, c As DoubleDim dis As Double, x1 As Double, x2 As DoubleDim x As Double, Hoj As Objecta=CDbl(InputBox("Coeficiente de x^2"))Hoj=ThisComponent.Sheets(0)Hoj.GetCellByPosition(4,0).SetFormula("Coeficiente de x^2 = " & cStr(a))If a=0 then

Hoj.GetCellByPosition(4,1).SetFormula("No es una ecuación de 2º grado")Else

b=CDbl(InputBox("Coeficiente de x= "))Hoj.GetCellByPosition(4,1).SetFormula("Coeficiente de x = " & cStr(b))c=CDbl(InputBox("Término independiente = "))Hoj.GetCellByPosition(4,2).SetFormula("Término Independiente = " & cStr(c))dis=b^2-4*a*cIf dis=0 then

x=(-b)/(2*a)Hoj.GetCellByPosition(4,4).SetFormula("La ecuación tiene una solución = " &

cStr(x))End IfIf dis<0 then

Hoj.GetCellByPosition(4,4).SetFormula("Las soluciones son imaginarias")End IfIf dis>0 then

x1=(-b+Sqr(dis))/(2*a): x2=(-b-Sqr(dis))/(2*a)Hoj.GetCellByPosition(4,4).SetFormula("x1 = " & cStr(x1))Hoj.GetCellByPosition(4,5).SetFormula("x2 = " & cStr(x2))

End IfEnd If

End Sub

- Crea un botón, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejecútalo para los casos:• a=0• a=1 ; b=1 ; c=1• a=1; b=-4; c=4• a=1; b=1; c=-6• Pruébalo también para valores decimales.

- Nota que la función Sqr(), es una función incorporada al Basic del OpenOffice, que nos permite calcular la raíz cuadrada de un número..

Page 25: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-25

Suma y Producto de los múltiplos de 2 inferiores a 30

- Escribe en el “Editor del Basic” del Macro07 el siguiente procedimiento:

- Crea un botón, en la Hoja1 de Macro07, asociado al procedimiento anterior y ejecútalo para probarlo

Cálculo del factorial de un número

- Escribe en el “Editor del Basic” de Macro07.ods el siguiente procedimiento:

- Crea un botón, en la Hoja2 de Macro07 asociado al Prog30 y pruébalo varias veces.

- Recuerda que el factorial de un número “x” es x! = x(x-1)(x-2)(x-3)...3.2.1

Page 26: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-26

Programa que calcula los 10 primeros múltiplos del número que queramos, por último nos da la suma y el producto de todos ellos.

- Escribe:

- Crea un botón en la Hoja2 de Macro07 asociado al Prog31 y puébalo varias veces

Page 27: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-27

Tabla de valores de la función y = x2 – 5x + 10

- Escribe en el “Editor del Basic” del Macro07.ods, el siguiente procedimiento:

- Crea un botón, en la Hoja2 de Macro07, asociado al Prog32 y ejecútalo.

Page 28: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-28

Cálculo de la hipotenusa de un triángulo rectángulo. El programa tiene la opción de volver a empezar.

- Escribe en el “Editor del Basic” del Macro07.ods, el programa:

- Crea un botón, en la Hoja2 de Macro07 asociado al Prog33 y calcula unas cuantas “hipotenusas”...

- Observa:UCase(cadena): es una función incorporada al “OpenOffice Basic”, que transforma todas las

letras de “cadena” a mayúsculas.

Es decir, que escribir: UCase(opc) = “S” es equivalente a escribir: opc = “S” Or opc = “s”, pero más corto.

Page 29: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-29

Programa que calcula el número “e”

- Escribe en el “Editor del Basic” del Macro07, el siguiente programa:

- Crea un botón, en la Hoja2 de Macro07 asociado a Prog34 y ejecútalo ...

- Observa:Exp(número) es una función incorporada al “OpenOffice Basic”, que nos da como resultado “e”

elevado al “número”. Por lo tanto: Exp(1) = e

Page 30: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-30

Ejercicios

4) Crea un nuevo libro de cálculo de nombre EjerM04.ods que contenga un procedimiento de nombre EjerM04, que haga lo siguiente:

- El procedimiento nos pide que escribamos dos números positivos menores de 57- El programa nos da como resultado el producto de los dos números- Si los números no son positivos o son mayores de 57, el programa nos lo dice.- El programa nos pregunta al final si queremos volver a empezar

5) Crea un nuevo libro de cálculo de nombre EjerM05.ods que contenga un procedimiento de nombre EjerM05 que haga lo siguiente:

El programa nos va pidiendo números, hasta que escribimos el número 9999, por último el programa nos da como resultado el número de números introducidos, exceptuando el 9999

6) Crea un nuevo libro de cálculo de nombre EjerM06.ods que contenga un procedimiento de nombre EjerM06 que haga lo siguiente:

El programa escribe todos los múltiplos de 23 inferiores a 1000 y por último nos da la suma de todos ellos.

7) Crea un nuevo libro de cálculo de nombre EjerM07.ods, que contenga un procedimiento de nombre EjerM07 que haga lo siguiente:

- El programa hace una tabla de valores de la función y = sen(7x-5)- El programa nos pide los dos valores de “x” (valores máximo y mínimo de la tabla de valores- El programa nos pide el incremento (variación) de la “x”.

8) Crea un nuevo libro de cálculo de nombre EjerM08.ods que contenga un procedimiento de nombre EjerM08, que sirva para calcular un cateto de un triángulo rectángulo a partir del otro cateto y la hipotenusa, de la siguiente forma:

- El programa nos pide el valor de la hipotenusa- El programa nos pide el valor de un cateto- Si el cateto es mayor que la hipotenusa, el programa nos da un mensaje de error y se acaba.- El programa nos da como resultado el valor del otro cateto y nos pregunta si queremos volver a

empezar.

9) Crea un nuevo libro de cálculo de nombre EjerM09.ods, que contenga un procedimiento de nombre EjerM09 y que sirva para resolver ecuaciones de 2º grado del tipo: ax2 + bx = 0

10) Crea un nuevo libro de cálculo de nombre EjerM10.ods, que contenga un procedimiento de nombre EjerM10 y que sirva para resolver sistemas de ecuaciones del tipo:

ax + by = cdx + ey = f

Prueba el funcionamiento del programa para el caso a=1, b=-2, c=-3, d=3, e=1, f=5, si todo funciona correctamente: x=1, y=2. La “salida” debería ser de la forma:

11) Haz un nuevo libro de cálculo de nombre EjerM11.ods, que contenga un procedimiento de nombre EjerM11 que escriba los 15 primeros múltiplos de 7, su suma y su producto. El programa ha de tener la posibilidad de volver a empezar.

Page 31: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-31

12) Crea un nuevo libro de cálculo de nombre EjerM12.ods, que contenga un procedimiento de nombre EjerM12, que sirva para calcular el área de un triángulo o el área de un rectángulo o el área de un círculo. El programa ha de tener la posibilidad de volver a empezar.

13) Crea un nuevo libro de cálculo de nombre EjerM13.ods que contenga un procedimiento de nombre EjerM13 que funcione de la siguiente forma: dados dos vectores del espacio, el programa calcula su producto escalar, producto vectorial y además nos dé el módulo de los dos vectores y también el módulo del producto vectorial.Recordemos:v=(a,b,c) p=(d,e,f)Producto Escalar = ad + be + cfProducto Vectorial = (bf – ec, de-af, ae-bd)

Módulo de v = 222 cba ++La “salida” debería ser de la forma:

14) Crea un nuevo libro de cálculo de nombre EjerM14.ods, que contenga un procedimiento de nombre EjerM14, y que funcione de la siguiente forma:El programa nos pide un número y da como resultado la tabla de multiplicar del número introducido.

15) Crea un nuevo libro de cálculo de nombre EjerM15.ods, que contenga un procedimiento de nombre EjerM15, y que funcione de la siguiente forma: El programa calcula el número “e” mediante el desarrollo en serie:

e = 1 + 1/1! + 1/(2!) + 1/(3!) + 1/(4!) + ... + 1/(50!)

Page 32: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-32

8.- Arrays

- Crea un nuevo libro de cálculo, que has de grabar con el nombre Macro08.ods en TuCarpeta. Crea un Module1 y sitúate en su interior para escribir:

- Crea un botón en la Hoja1 del Macro08.ods, asociado al procedimiento anterior y ejecútalo, observando detenidamente lo que sucede.

- Estudio del “Prog35”:Dim a(1 To 3) As DoubleDefinimos lo que se llama “aaray” o “matriz” o “vector” o “arreglo” de una dimensión. Y no es más que una variable que consta de tres números Double, en realidad tres variables double.Para acceder a los elementos de nuestro “array” hemos de utilizar la notación:

a(1) = primer elemento; a(2)=segundo elemento; a(3)= tercer elemento

El programa anterior es muy bonito, pero no sirve para nada, vamos a hacer un programa un poco más complicado ...

Observa la siguiente tabla:

Lunes Martes Miercoles Jueves ViernesInicio 8 10,5 6 9 7Fin 14 17 13,5 13 18

Resulta que cada día de la semana hacemos una jornada laboral distinta, en el ejemplo de la tabla (que representa el horario laboral de una semana determinada), el lunes empezamos a trabajar a las 8h y terminamos a las 2h de la tarde, el martes empezamos a las 10h y media y terminamos a las 17h, etc.

Vamos a hacer un programa para introducir y guardar los datos de dicha tabla.

- Escribe en el Module1 del Macro08.ods el siguiente procedimiento:

- Crea un botón en la Hoja2 del Macro08.ods, asociado al procedimiento anterior y ejecútalo:

Page 33: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-33

En este programa hemos trabajado con un array bidimensional o matriz de dos dimensiones: a( 1 To 2 , 1 To 5 )

Sus elementos: a(1,1), a(1,2), a(1,3), a(1,4), a(1,5)A(2,1), a(2,2), a(2,3), a(2,4), a(2,5)

El procedimiento Prog36, hemos de reconocer que está muy bien para utilizar matrices bidimensionales y ciclos anidados, pero es completamente inútil.

Vamos a modificar el procedimiento anterior para que nos calcule el “número total de horas trabajadas a la semana” ...

Escribe en el Module1 de Macro08.ods:

- Crea un botón en la Hoja2 del Macro08.ods, asociado al programa Prog37 y ejecútalo

Si todo funciona correctamente:

- Escribe en el Macro08, el procedimiento:

Page 34: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-34

-

Crea un botón en la Hoja2 del Macro08.ods, asociado al procedimiento Prog38 y ejecútalo varias veces.

- Observa de qué forma definimos un array dinámico: al principio del programa, no sabemos el número de elementos (Dim x() As Double); cuando ya sabemos el número de elementos: ReDim x(número) As Double

Programa que calcula, dada una serie de 5 números, la media aritmética, las desviaciones respecto a la media, la desviación media, la varianza y la desviación típica.

– Escribe en el Module1 del Macro08.ods el siguiente programa:

Sub Prog39Dim s As String, sum As Double, med As DoubleDim num(1 To 5) As DoubleDim desv(1 To 5) As DoubleDim sum1 As Double, sum2 As Double, i As IntegerDim desmed As Double, vari As Double, dt As Doubles="":sum=0:sum1=0:sum2=0s=s & "Valores de la serie estadística: " & Chr(10)For i=1 To 5

num(i)=CDbl(InputBox("¿Número?"))s=s & cStr(num(i)) & Chr(10)sum=sum+num(i)

Nextmed=sum/5s=s & Chr(10): s=s & "Media Aritmética = " &

cStr(med)s=s & Chr(10) & "Desviaciones" & Chr(10)For i=1 To 5

desv(i)=Abs(num(i)-med)sum1=sum1+desv(i)sum2=sum2+desv(i)*desv(i)s=s & cStr(desv(i)) & " - "

Nextdesmed=sum1/5vari=sum2/5dt=Sqr(vari)s=s & Chr(10)s=s & "Desviación Media = " & cStr(desmed)s=s & Chr(10)s=s & "Varianza = " & cStr(vari) & Chr(10)

Page 35: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-35

s=s & "Desviación Típica = " & cStr(dt)MsgBox s

End Sub

- Crea un botón en la Hoja2 del Macro08.ods, asociado al procedimiento anterior y ejecuta el programa para el caso:

9.- Procedimientos y Funciones

Se define como procedimiento y/o función a un bloque de código que realiza alguna tarea. Hasta ahora, hemos construido los programas utilizando un único procedimiento, pero a medida que los programas (y los problemas) crecen, se va haciendo necesaria la inclusión de más procedimientos.

Una función es lo mismo que un procedimiento con la salvedad, que la función devuelve un valor al procedimiento o función que lo llama.

- Crea un nuevo libro de cálculo, que deberás grabar como Macro09.ods en TuCarpeta. Crea un Module1 y escribe:

- Crea un botón en la Hoja1 del Macro09.ods, asociado al procedimiento Prog40 y ejecuta el programa varias veces.

Observa la sintaxis de una “función”: declaramos los parámetros (en nuestro caso v1 y v2) y declaramos también el tipo de dato que devuelve la función, Integer en nuestro caso.

Page 36: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-36

Observa de qué forma “llamamos” a una función: NombreFunción (lista de parámetros), en nuestro ejemplo: Suma(n1,n2)

- Vamos a trabajar con más funciones ...Sitúate en el Module1 del Macro09 y escribe:

Y

- Crea en Hoja1 de Macro09.ods dos botones de nombre: [Prog41] y [Prog42] asociados a los procedimientos 41 y 42 y ejecútalos:

Vamos a por otra función ...- Escribe en el Module1 del Macro09:

- Crea en Hoja1 de Macro09.ods un botón de nombre [Prog43] asociado al procedimiento “Prog43” y ejecútalo.

- Escribe en el Module1 del Macro09.ods:

Page 37: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-37

- Crea en la Hoja1 del Macro09, un botón de nombre [Prog44] asociado al procedimiento “Prog44” y ejecútalo.

10.- Números Aleatorios

- Crea un nuevo libro de cálculo, que deberás grabar como Macro10.ods en TuCarpeta. Crea un Module1 y escribe los siguientes procedimientos:

Page 38: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-38

- Crea en la Hoja1 de Macro10.ods dos botones de nombre: [Prog45] y [Prog46], asociados a los procedimientos 45 y 46 y ejecútalos.

- La función RNDCada vez que el ordenador procesa una línea que contiene la sentencia Rnd, en la celda correspondiente aparece un número aleatorio, decimal entre 0 y 1. El número puede ser cero, pero nunca 1. El número de decimales es 14 (recuerda que en la hoja de cálculo, por defecto aparecen sólo 2)En realidad la serie de números “Rnd” es pseudoaleatoria, para conseguir que la función Rnd genere verdaderos números aleatorios, en el programa hemos de anteponer la sentencia Randomize, que es lo que consideraremos en el siguiente programa.

Observa las siguientes relaciones:

X=Rnd 0≤ X<1 X número decimal

Y=6*Rnd 0≤ Y<6 Y número decimal

Z=Int(6*Rnd) 0≤ Z<6 Z número entero entre 0 y 6 (puede ser 0, pero no 6)

W=Int(6*Rnd)+1 0<W≤ 6 W número entero entre 0 y 6 (no puede ser 0, pero sí 6)Es decir: W = 1, 2, 3, 4, 5 o 6

En general:

Int((y-x)*Rnd+x) número entero aleatorio entre x e y (incluido x, excluido y)

Int((y+1-x)*Rnd+x) número entero aleatorio entre x e y (incluidos los dos)

- Escribe en el Module1 del Macro10.ods los procedimientos:

Sub Prog47Dim Hoj As Object, i As IntegerRandomizeHoj=ThisComponent.Sheets(0)Hoj.getCellByPosition(7,5).SetFormula("10 tiradas aleatorias de un dado de

parchís")For i=1 To 10

Hoj.getCellByPosition(7,5+i).SetValue(Int(6*Rnd)+1)Next

Page 39: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-39

End Sub

Sub Prog48Dim s As String, i As IntegerDim x As Double, y As DoubleRandomizes="Números Aleatorios " & Chr(10)s=s & "10 números aleatorios entre 0 y 1" & Chr(10)For i=1 to 10

s=s & cStr(Rnd) & " - "Nexts=s & Chr(10)s=s & "10 números aleatorios enteros entre 3 y 7" & Chr(10)s=s & "incluido el 3 y excluido el 7" & Chr(10)For i=1 To 10

s=s & cStr(Int((7-3)*Rnd+3)) & " - "Nexts=s & Chr(10)s=s & "10 números aleatorios enteros entre 3 y 7" & Chr(10)s=s & "incluidos el 3 y el 7" & Chr(10)For i=1 To 10

s=s & cStr(Int((7+1-3)*Rnd+3)) & " - "Nexts=s & Chr(10)s=s & "10 números aleatorios enteros entre los dos que tú quieras" & Chr(10)s=s & "incluidos los dos extremos" & Chr(10)x=CDbl(InputBox("Escribe el menor"))y=CDbl(InputBox("Escribe el mayor"))s=s & "concretamente entre " & cStr(x) & " y " & cStr(y) & Chr(10)For i=1 to 10

s=s & cStr(Int((y+1-x)*Rnd+x)) & " - "NextMsgBox s

End Sub

- Crea en la Hoja1 de Macro10.ods dos botones de nombre [Prog47] y [Prog48], asociados a los programas 47 y 48 y ejecútalos.

11.- Funciones con y sin retorno de parámetros

- Crea un nuevo libro de cálculo, que deberás grabar como Macro11.ods en TuCarpeta. Crea un Module1 y escribe:

Function mediageo()Dim x As Integer, y As Integerx=Val(InputBox("Escribe un número entero"))y=Val(InputBox("Escribe otro número entero"))MsgBox "La media geométrica de " & cStr(x) & _

" y " & cStr(y) & " es " & cStr(Sqr(x*y))End Function

Function mediageo2(a As Integer, b As Integer) As Doublemediageo2=Sqr(a*b)

End Function

Sub Prog49' Este programa sólo contiene una llamada' a una función

Page 40: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-40

mediageoEnd Sub

Sub Prog50Dim x As Integer, y As Integerx=Val(InputBox("Escribe un número entero"))y=Val(InputBox("Escribe otro número entero"))MsgBox "La Media Geométrica de " & cStr(x) & _

" y " & cStr(y) & " es " & cStr(mediageo2(x,y))End Sub

- Crea en la Hoja1 de Macro11.ods dos botones de nombre [Prog49] y [Prog50], asociados a los programas 49 y 50 y ejecútalos.El primer tipo de función (mediageo) se dice que es una función sin retorno de parámetros. El segundo tipo (mediageo2) es una función que retorna parámetros.

Programa que determina si un número es primo, utilizando una función

- Accede al Module1 del Macro11.ods y escribe:

Function Primo (x As Integer) As StringDim resto As Integer, i As Integer, opc As IntegerFor i=2 To x-1

resto=x Mod iIf resto=0 And x<>2 Then

opc=1Exit For

End IfNextIf opc=1 Then

Primo="N"Else

Primo="S"End If

End Function

Sub Prog51Dim num As Integer, Hoj As ObjectHoj=ThisComponent.Sheets(0)num=Val(InputBox("Escribe un número entero"))If Primo(num)="S" then

Hoj.getCellByPosition(1,0).SetFormula("El número " & cStr(num) & " es primo"

ElseHoj.getCellByPosition(1,0).SetFormula("El número " &

cStr(num) & " no es primo"End If

End Sub

- Crea en la Hoja1 de Macro11.ods un botón de nombre [Prog51] asociado al programa anterior y ejecútalo varias veces.

- La función “Primo” aunque complicada, es importante porque contiene elementos nuevos:• resto = x Mod i

“Mod” es el operador que nos da el resto de la división entera (en nuestro caso entre x e i)• Exit For

Forzamos la salida del bucle For – To – Next

Page 41: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-41

Programa que calcula el M.C.D. de dos números, utilizando una función

Antes de todo recordemos el Algoritmo de Euclides para el cálculo del M.C.D.Por ejemplo, para calcular el mcd(38,48), hemos de seguir el siguiente proceso:

1.- necesitamos saber el número mayor2.- divido el mayor entre el menor, 48/36 = 1 y resto123.- divido el divisor de antes entre el resto (de antes): 36/12 = 3 y resto 04.- continuamos dividiendo divisor/resto, hasta que la división sea exacta5.- el m.c.d es el último resto distinto de cero, en nuestro caso 12

En general, para calcular el mcd(a,b):

1.- if a<b thenaux = aa = bb = aux

end ifA partir de este momento a es el mayor y b el menor

2.- if a mod b = 0 thenresto = b

end if

3.- do while a mod b <> 0resto = a mod ba = bb = resto

loop4.- mcd = resto

- Escribe en el module del Macro11.ods:

Function MCD (a As Integer, b As Integer) As IntegerDim resto As Integer, aux As IntegerIf a<b Then

aux=aa=bb=aux

End IfIf a Mod b=0 Then

resto=bEnd IfDo While a Mod b <> 0

resto=a Mod ba=bb=resto

LoopMCD=resto

End Function

Sub Prog52Dim x As Integer, y As IntegerDim Hoj As ObjectHoj=ThisComponent.Sheets(0)x=Val(InputBox("Escribe un número"))y=Val(InputBox("Escribe otro número"))Hoj.getCellByPosition(1,5).SetFormula("El MCD de " & cStr(x) &

_

Page 42: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-42

" y " & cStr(y) & " es " & cStr(MCD(x,y))End Sub

- Crea en la Hoja1 de Macro11.ods un botón de nombre [Prog52], asociado al último procedimiento y ejecútalo varias veces:

MCD(5,25) = 5MCD(7,3) = 1MCD(720,300) = 60

Adivinanzas

Vamos a hacer un programa que nos pregunte un número entero del 1 al 10, y el usuario del programa tiene 5 tentativas para adivinarlo.

- Escribe en el Module1 del Macro11.ods

Sub Prog53Dim x As Integer, num As IntegerDim i As Integer, control As IntegerDim Hoj As ObjectHoj=ThisComponent.Sheets(0)Randomizex=Int((10+1-1)*Rnd+1)Do While i<5

i=i+1num=Val(InputBox("Escribe un entero del 1 al 10, intento " &

cStr(i)))If num=x Then

Hoj.getCellByPosition(1,6).SetFormula("Lo has acertado en " & _

cStr(i) & " tentativas")i=5control=1

End IfLoopIf control=0 Then

Hoj.getCellByPosition(1,7).SetFormula("Lo siento, se han acabado tus " & _

"vidas, el número era " & cStr(x))End If

End Sub

- Crea un botón asociado al Prog53 y ejecútalo varias veces, para probar el programa.

Programa que nos pregunta 5 sumas aleatoriamente y al final nos da la “nota”

- Escribe en el Module1 del Macro11:

Sub Prog54Dim x As Integer, y As Integer, z As IntegerDim nota As Integer, i As Integer, Hoj As ObjectRandomize: Hoj=ThisComponent.Sheets(0)For i=1 To 5

x=Int((9+1-1)*Rnd+1)y=Int((9+1-1)*Rnd+1)

Page 43: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-43

z=Val(InputBox(cStr(x) & " + " & cStr(y) & " = "))If z=x+y Then

Hoj.getCellByPosition(1,10+i).SetFormula(cStr(x) & _" + " & cStr(y) & " = " & cStr(z))

Hoj.getCellByPosition(2,10+i).SetFormula(" Muy Bien ")nota=nota+1

ElseHoj.getCellByPosition(1,10+i).SetFormula(cStr(x) & _

" + " & cStr(y) & " = " & cStr(z))Hoj.getCellByPosition(2,10+i).SetFormula(" No, es falso ")Hoj.getCellByPosition(3,10+i).SetFormula(cStr(x) & _

" + " & cStr(y) & " = " & cStr(x+y))End If

NextHoj.getCellByPosition(1,11+i).SetFormula(" Tu nota es " & cStr(2*nota))

End Sub

- Crea un botón asociado al Prog54 y ejecútalo varias veces.

Page 44: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-44

Ejercicios

16) Crea un libro de cálculo de nombre EjerM16.ods que contenga un procedimiento de nombre EjerM16, que sirva para calcular el mínimo común múltiplo de dos números utilizando la función MCD del procedimiento Prog52 (deberás copiarla en el EjerM16) y sabiendo que mcm(x,y) = x*y/MCD(x,y)

17) Crea un libro de cálculo de nombre EjerM17.ods, que contenga un procedimiento de nombre EjerM17, que sirva para simplificar una fracción numérica, deberás utilizar la función MCD del ejercicio anterior.Observa:

),(/

),(/

baMCDb

baMCDa

b

a =

La “salida” debería ser de la forma:

18) Crea un libro de cálculo de nombre EjerM18.ods, que contenga un procedimiento de nombre EjerM18, que sirva para sumar o restar dos fracciones y después simplifique el resultado.

Observa:

),(

)/),(()/),((

dbmcm

ddbmcmcddbmcma

d

c

b

a +=+

La “salida” debería ser:

19) Crea un libro de cálculo de nombre EjerM19.ods que contenga un procedimiento de nombre EjerM19, que sirva para calcular el módulo de un vector en el espacio, utilizando una función.

20) Crea un libro de cálculo de nombre EjerM20.ods, que contenga un procedimiento de nombre EjerM20, que sirva para calcular el área de un triángulo en el espacio, utilizando la función del ejercicio anterior.Recuerda:A=(a1,a2,a3), B=(b1,b2,b3), C=(c1,c2,c3)AB=(b1-a1,b2-a2,b3-a3), AC=(c1-a1,c2-a2,c3-a3)Área del triángulo ABC = mitad del producto vectorial de AB y AC.Compruébalo para el caso:

Page 45: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-45

21) Crea un libro de cálculo de nombre EjerM21.ods, que contenga un procedimiento de nombre EjerM21, que construya el triángulo de Tartaglia o Pascal de la siguiente forma:1º.- Crea una función que calcule el factorial de un número.

2º.- Crea otra función que permita calcular un número combinatorio:)!(!

!

nmn

m

n

m

−=

3º.- El triangulo de Tartaglia no es más que los resultados de los números combinatorios:

0

0

0

1

1

1

0

2

1

2

2

2

...

...

4º.- El programa nos ha de preguntar de entrada el número de filas del triángulo.

22) Crea un libro de cálculo de nombre EjerM22.ods, que contenga un procedimiento de nombre EjerM22, tal que:- El programa nos pregunta cuántas multiplicaciones queremos hacer.- El programa nos las pregunta aleatoriamente– Al final el programa nos da la nota cualitativa (utiliza una función).

23) Crea un libro de cálculo de nombre EjerM23.ods, que contenga un procedimiento de nombre EjerM23, que calcule un determinante de tercer orden.Recuerda:

dbihfagecbfgdchaei

ihg

fed

cba

−−−++=

Compruébalo para el caso:

24) Crea un libro de cálculo de nombre EjerM24.ods que contenga un procedimiento de nombre EjerM24, que sirva para discutir un sistema de tresecuaciones con tres incógnitas, sólo en los casos compatible determinado e incompatible y lo resuelve en el caso compatible determinado.De la siguiente forma:

1º) Crea una función que sirva para calcular un determinante de tercer orden (ejercicio anterior).2º) Dado el sistema: ax+by+cz=j

dx+ey+fz=kgx+hy+iz=l

Calcula los determinantes:a b c j b c a j c a b j

det = d e f detx = k e f dety = d k f detz = d e kg h i l h i g l i g h l

3º) Si det no es 0 entonces el sistema es compatible determinado

Page 46: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-46

Si det es 0 y (detx no es cero o dety no es 0 o detz no es 0) entonces el sistema es incompatible.

4º) Si el sistema es compatible determinado, la solución por Cramer es x=detx/det, y=dety/det, z=detz/det

Pruébalo para los casos:

25) Crea un libro de cálculo de nombre EjerM25.ods, que contenga un procedimiento de nombre EjerM25, que resuelva un sistema de dos ecuaciones con dos incógnitas por el método de Cramer.Crea una función que calcule un determinante de 2º orden

Compruébalo para los casos:

26) Crea un libro de cálculo de nombre EjerM26.ods que contenga un procedimiento de nombre EjerM26, que calcule los 50 primeros términos de la sucesión de término general: (3n+1) / (2n-1)

Page 47: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-47

12.- Cuadros de Diálogo

a) Crea un nuevo libro de cálculo, que deberás grabar como Macro12.ods. Crea, como siempre, un Module1 asociado al Macro12.

- Sitúate en el Editor de Basic. Accede al menú contextual de la pestaña “Module1”, es decir:• Sitúa el cursor del ratón encima de la pestaña Module1• Pulsa el botón derecho del ratón:

• Selecciona la opción:Insertar

Diálogo BASIC

- Nos acabamos de situar en una nueva pantalla (Dialog1), que contiene un formulario o cuadro de diálogo vacío. Si observas el ángulo inferior izquierdo de la pantalla:

podemos situarnos fácilmente en el editor de BASIC (clic en la pestaña Module1) y/o volver al formulario (clic en la pestaña Dialog1).

- Desde la pantalla del Dialog1, haz clic en el icono “Insertar elementos de Control”:

Si mantienes pulsado el botón izquierdo, aparecerán todas sus opciones:

Page 48: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-48

Y puedes arrastrarlo (clic en el marco de la ventana) a cualquier punto de la pantalla:

- Haz clic en el “Campo de Texto” del cuadro “Campos de Control”:

- Marca un pequeño recuadro en el formulario:

- Clic en el “Botón” del cuadro “Campos de Control”:

– Marca un pequeño recuadro debajo del campo de texto que acabamos de insertar.

- Marca otro “CommandButton”, a la derecha del anterior:

- Selecciona el formulario, para ello deberás hacer:• Clic en “Flecha de Selección” del cuadro Campos de Control:

• Marca una ventana que abarque al formulario entero.

Page 49: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-49

- Una vez seleccionado el formulario, hazlo más pequeño y observarás que todos los elementos del interior también se hacen más pequeños. Resitúa los elementos, hasta tener aproximadamente:

- Selecciona el “CommandButton1” y accede a sus propiedades: clic en el campo de control “Propiedades”:

Observa que podemos resituar los elementos en pantalla, de manera que se encuentre visible:• La ventana de propiedades.• El formulario• El Cuadro de Controles

De esta forma si seleccionamos otro elemento del formulario (o el mismo formulario) accedemos automáticamente a sus propiedades (pruébalo).

- Con el “CommandButton1” seleccionado y sus “Propiedades” a la vista. Cambia el contenido de la propiedad “Título”, que era CommandButton1 por “Saludo”.

- Selecciona el “CommandButton2” y cambia su propiedad “Título” por “Borrar Saludo”

- Creo que está claro lo que nos proponemos: Al hacer clic en el botón [Saludo], queremos que salga escrito (en el cuadro de texto), un saludo. Por ejemplo: “Bienvenido al Basic del OpenOffice” y al hacer clic en [Borrar Saludo], nos gustaria que se borrara el mensaje anterior.

Veamos:• En primer lugar, investiga el nombre del cuadro de texto: basta que selecciones el cuadro de

texto y observes su Propiedad = Nombre. Si todo funciona correctamente verás que es TextField1. Si observas el contenido de su propiedad “Texto”, verás que no tiene nada; es lógico, el cuadro de texto está vacio.

• Sitúate en el Module1 (clic en la pestaña correspondiente) y escribe:

Page 50: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-50

• Vuelve al Dialog1 y selecciona el botón [Saludo]. En su ventana de propiedades, haz clic en la pestaña Acontecimientos. Sitúa el cursor de escritura en el campo “Boton del ratón pulsado” y haz clic en el botón [...].

• [Asignar]• Selecciona ClicSaludo de

Macro12.odsStandard

Module 1[Aceptar][Aceptar]

• Asocia al botón [Borrar Saludo] el programa ClicBorrarSaludo. Es decir: selecciona el botón [Borrar Saludo] en Dialog1. Accede a la pestaña Acontecimientos, en su ventana de propiedades. Y en el campo Boton del ratón pulsado, asigna el procedimiento ClicBorrarSaludo.

• Sitúate en la hoja de càlculo e inserta un botón de nombre “HOLA”, asociado al procedimiento AbreFormulario

- Prueba el funcionamiento de lo que hemos “programado”:• Clic en el botón [HOLA]. Si todo va bien, aparece el formulario.• Clic en el botón [Saludo]

• Clic en el botón [Borrar Saludo]• Para acabar, clic en la “X” del extremo superior derecho del formulario.

Page 51: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-51

- Sitúate en el Editor de Basic (Module1) para “estudiar” nuestro programa: el procedimiento AbreFormulario:

Es bastante extraño: el Basic del OpenOffice es una versión de Basic, próxima a Java. De todas formas no te preocupes: las tres líneas de nuestro programa (observa en la segunda línea que aparece el nombre del formulario: Dialog1), sirven para abrir el formulario de nombre Dialog1.

Observa también que la declaración: Dim oDialogo As Object se encuentra al principio del módulo, y fuera de todo programa, de esta forma evitamos el tener de declarar el formulario, en cada uno de los demás procedimientos del módulo.

El procedimiento ClicSaludo, está más claro:... TextField1.Text = “mensaje”

El campo de texto de nombre “TextField1”, propiedad “Text” (texto) ha de ser igual a “mensaje”. Es decir, el contenido (propiedad Text) del campo de texto (TextField1) es “mensaje”.El “prefijo”, oDialogo.Model deberemos escribirlo en todos los controles que aparezcan en los procedimientos del formulario.

b) Vamos a hacer un formulario más complicado: crea un nuevo libro de cálculo que deberás grabar como Macro13.ods. Crea un Module1, también un Dialog1 asociado al Macro13

- Inserta en el formulario, una etiqueta:Clic en el icono “Etiqueta” del Cuadro de Controles:

De propiedad “Título”: Introduce la clave secretaSitúa el cursor de escritura en el campo Fuente (propiedad de la etiqueta que acabamos de insertar) y clic en su botón [...]. Selecciona Fuente: Arial. Estilo: Negrita Cursiva y Tamaño: 12[Aceptar]Cambia el color de fondo (la etiqueta ha de estar seleccionada) a “Amarillo Pastel”

- Selecciona el formulario (deberás deseleccionar la etiqueta y marcar un recuadro que abarque todo el formulario)De esta forma podemos acceder a sus propiedades: por ejemplo, coloca como “Color de fondo= Gris azulado”

– Inserta un campo de texto a la derecha del texto “Introduce la clave secreta”. En su propiedad “Caracter de contraseña”, escribe un asterisco.

- Inserta dos botones:• El “CommandButton1” de propiedad

“Título”: Aceptar• El “CommandButton2” de propiedad

“Título”: Salir

Page 52: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-52

- Vamos a programar nuestros botones:• Sitúate en el Module1 y escribe:

- Asocia al botón [Aceptar] el programa “Aceptar”:• En la pantalla correspondiente al “Dialog1”• Selecciona el botón [Aceptar]• Clic en la pestaña Acontecimientos de la ventana Propiedades• En el campo Al Ejecutar o en Botón del ratón pulsado, asignale el procedimiento Aceptar

de Module1

- Haz lo mismo para asociar al botón [Salir] el procedimiento Salir del Module1.

- Sitúate en la hoja de cálculo e inserta un botón de nombre [CONTRASEÑA] y asignalo al procedimiento AbreForm del Module1.Por último ejecuta y prueba el programa.

- Observa:• La función UCase(argumento), convierte el argumento en mayúsculas. Gracias al uso de

esta función, podemos introducir la contraseña en mayúsculas o minúsculas.• Una de las líneas (sentencias) del programa “Aceptar” es el nombre de otro programa:

“Salir”. Es decir llamamos (se ejecuta) al procedimiento Salir.

c) Ya habíamos hecho un programa que calculaba el factorial de un número, vamos a repetirlo pero visualmente, es decir, utilizando un formulario y controles ...

– Crea una nueva hoja de cálculo de nombre Macro14.ods con un Module1 y un Dialog1

Page 53: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-53

- Crea el siguiente formulario:

• El título no es más que una etiqueta (Label1), con la propiedad “Borde = en 3D” y “Alineación = Centrado”

• El control que hay debajo de “Escribe un ...” es otro cuadro de texto (TextField2), con el “Color de Fondo = Verde Pastel”

- Escribe en el Module1 el código:

Dim oDialogo As Object

Sub AbreFormDialogLibraries.LoadLibrary("Standard")oDialogo=createUnoDialog(DialogLibraries.Standard.Dialog1)oDialogo.execute()

End Sub

Sub SaliroDialogo.endExecute()

End Sub

Sub CalcularDim i As Double, fact As Doublefact=1For i=1 To CDbl(oDialogo.Model.TextField1.Text)

fact=fact*iNextoDialogo.Model.TextField2.Text="El factorial de " & _

oDialogo.Model.TextField1.Text & " es " & _cStr(fact)

End Sub

Sub OtrooDialogo.Model.TextField1.Text=""oDialogo.Model.TextField2.Text=""

End Sub

- Asocia al botón [Calcular] el procedimiento Calcular

- Asocia al botón [Otro] el procedimiento Otro

- Asocia al botón [Salir] el procedimiento Salir.

- Crea en la Hoja1 del Macro14 un botón de nombre [FACTORIAL] y asócialo al procedimiento AbreForm

Sólo nos queda probar el programa (espero que te funcione correctamente).

Page 54: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-54

d) Crea una nueva hoja de cálculo de nombre Macro15.ods con un Module1 y un Dialog1

- Crea el siguiente formulario:

- Creo que está claro lo que pretendemos: tenemos dos campos de texto (TextField1 y TextField2), escribimos en el primero el número de un DNI (8 dígitos) y al hacer clic en el botón [Calcula], aparece en el “TextField2”, el NIF correspondiente, es decir el DNI anterior más la letra correspondiente al Nif.

Veamos:- La letra correspondiente al NIF de un DNI es la siguiente: se divide el DNI entre 23, sin decimales, es decir por ejemplo: 40940754/23 = 1780032 y Resto =18. Según el resto de la división, que será un número de 0 a 22 le corresponde la letra del NIF, según la siguiente tabla:

Resto Letra del NIF Resto Letra del NIF Resto Letra del NIF0 T 8 P 16 Q1 R 9 D 17 V2 W 10 X 18 H3 A 11 B 19 L4 G 12 N 20 C5 M 13 J 21 K6 Y 14 Z 22 E7 F 15 S

En nuestro ejemplo, a un DNI igual a 40.940.754 le corresponde un resto de la división por 23 de 18, por lo tanto la letra del NIF de nuestro ejemplo será la “H”.

- El problema ahora es “traducir” los cálculos anteriores al Basic del OpenOffice...Int() es una función incorporada (igual que MsgBox() y muchas más), que nos da la parte entera del número que escribamos como argumento.Así: Int(40940754/23) =1780032, nos da el resultado de la división sin decimales (es lo que en matemáticas se llama división entera)Pensemos ahora en la “prueba de la división: El dividendo = divisor*cociente + resto”. O lo que es equivalente: “El resto de la división = dividendo – divisor*cociente”.En nuestro ejemplo: 18 = 40.940.754 – 23*Int(40940754/23)

- Escribe en el Module1, la “function” siguiente y compara la igualdad anterior con la instrucción de nuestra función Letra: num = x – 23*Int(x/23)

Function Letra(x As Double) As StringDim num As Doublenum=x-23*Int(x/23)Select Case num

Case 0Letra="T"

Case 1Letra="R"

Case 2Letra="W"

Case 3Letra="A"

Case 4Letra="G"

Case 5Letra="M"

Page 55: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-55

Case 6Letra="Y"

Case 7Letra="F"

Case 8Letra="P"

Case 9Letra="D"

Case 10Letra="X"

Case 11Letra="B"

Case 12Letra="N"

Case 13Letra="J"

Case 14Letra="Z"

Case 15Letra="S"

Case 16Letra="Q"

Case 17Letra="V"

Case 18Letra="H"

Case 19Letra="L"

Case 20Letra="C"

Case 21Letra="K"

Case 22Letra="E"

End SelectEnd Function

- Escribe en el Module1, los procedimientos:

Dim oDialogo As Object

Sub AbreFormDialogLibraries.LoadLibrary("Standard")oDialogo=createUnoDialog(DialogLibraries.Standard.Dialog1)oDialogo.execute()

End Sub

Sub CalculaDim cadena As Stringcadena=oDialogo.Model.TextField1.TextSelect Case Len(cadena)

Case Is<8MsgBox "Has de escribir 8 dígitos"

Case ElseoDialogo.Model.TextField2.Text=oDialogo.Model.TextField1.Text & _

cStr(Letra(CDbl(oDialogo.Model.TextField1.Text))End Select

End Sub

- Asocia al botón [Calcula] el procedimiento Calcula

Page 56: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-56

- Crea en la Hoja1, un botón de nombre [NIF] y asócialo al procedimiento AbreForm

Ejecuta y prueba el funcionamiento de nuestro programa.

e) Crea una nueva hoja de cálculo de nombre Macro16.ods con un Module1 y un Dialog1

- Crea el siguiente formulario:

Ten en cuenta las siguientes propiedades:

• TextField2Sólo lectura = Sí

• TextField4Sólo lectura = SíJuego de Caracteres. Tamaño = 24

• Los últimos cuadros de texto (desde el TextField5 hasta el TextField10):Alineación = CentradoSólo Lectura = SíJuego de Caracteres. Tamaño = 14

- Lo que pretendemos es simular un juego de lotería, que funcione de la siguiente forma: el programa sortea seis números del 1 al 49 y nosotros hemos de adivinar uno de estos números.En los últimos cuadros de texto (TextField5, ..., TextField10) aparecerán los seis números del sorteo, cada vez que hagamos clic en [Sorteo]. Es simplemente para comprobar el funcionamiento del programa (al final, podemos borrarlos).

- El primer problema de nuestro programa, es tener guardados los seis números del sorteo, para ello utilizaremos un array de 6 elementos )números enteros), que deberíamos declarar a nivel de módulo, para que se encuentren “presentes” en los diferentes procedimientos que haremos.Aprovecha también para escribir en el Module1, el programa que abre un formulario:

Page 57: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-57

Observa pues, que declaramos una variable matricial (Loteria) de una dimensión, con seis valores enteros: Loteria(0), Loteria(1), ..., Loteria(5)

- Escribe en el Module1 el procedimiento:

Vamos a ver si entendemos el programa:

- Definimos cinco variables:• i: es el índice de un ciclo For – To – Next de i=0 hasta i=5, a partir del cual guardaremos en

Loteria(i) los números sorteados.• j: es el índice de otro ciclo For – To – Next de j=0 hasta j=i, que servirá para investigar si

algún valor de “Lotería” está repetido• NumeroSorteado: representa el número aleatorio de 1 hasta 49 (NumeroSorteado =

Int(Rnd*49)+1)• HaSalido: controlará si el numero sorteado ya ha salido• Trabajar: controlará el ciclo Do While – Loop• Básicamente el funcionamiento es:

Si el valor de “NumeroSorteado” (número aleatorio entre 1 y 49) es igual a algún valor de “Loteria()”, entonces “HaSalido=1”, y “NumeroSorteado” vuelve a tomar otro número aleatorio entre 1 y 49.Si el valor de “NumeroSorteado” no ha salido, el valor de Loteria(), es igual a dicho número y salimos del Do While – Loop (Trabajar = 0)

- Asocia al botón [Sorteo] del Dialog1, el procedimiento anterior (Al Ejecutar = document:Standard.Module1.Lote)

- Sitúate en la Hoja1 e inserta un botón de nombre [Lotería] asociado al procedimientoAbreForm.

- Ejecuta el programa que hemos hecho hasta ahora:• Clic en [Lotería] de la Hoja1• Clic en [Sorteo] del formulario. Ejecuta el programa varias veces, para comprobar que los 6

valores de la lotería son distintos.

Continuemos ...- Al escribir un número del 1 al 6 en el cuadro de texto TextField3, nos interesa que aparezca en el TextField4 el número correspondiente de la “Lotería” ...

Page 58: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-58

Escribe en el Module1 el procedimiento:

- Accede a las Propiedades (solapa: Acontecimientos) del TextField3, y asigna al “acontecimiento: Texto Modificado” el procedimiento “Orden”. Nos quedará: Texto Modificado = document:Standard. Module1.Orden

Esto quiere decir, que sólo por escribir un número (o cambiarlo) en TextField3, en el TextField4 aparecerá automáticamente el número de la “Loteria()”.

Pruébalo.-Observa el procedimiento “Orden”:

• La variable “i” es el número que escribimos en el tercer cuadro de texto (i = Val(...TextField3 ...))

• La variable “Elemento” es el valor correspondiente del vector Loteria():Si i=1 entonces Elemento = Loteria(i-1)=Loteria(0)Si i=2 entonces Elemento = Loteria(i-1)=Loteria(1)Etc.

• Dicho valor de “Elemento”, se escribe en el cuadro de texto 4: ...TextField4 ... = cStr(Elemento)

Para acabar el programa de la lotería: Nos interesa que al escribir un número (del 1 al 49), en el primer cuadro de texto y pulsar [Tab] para pasar a otro control (Al perder el foco), aparezca en el segundo cuadro de texto, un mensaje indicando si lo hemos adivinado o no ...

- Escribe en el Module1:

Page 59: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-59

- Accede a las propiedades (solapa: acontecimientos) del TextField1, y asigna al acontecimiento = “Al perder el foco” el procedimiento document:Standard.Module1.Adivino

Sólo nos queda probar exhaustivamente nuestro programa. Recuerda que por último debes grabar nuestro libro Macro16.ods con el mismo nombre.

f) Vamos a hacer un programa, deberíamos hablar de proyecto, que conste de más de un formulario ...Crea una nueva hoja de cálculo de nombre Macro17.ods con su Module1 y dos formularios: Dialog1 y Dialog2

- Crea aproximadamente el siguiente formulario (Dialog1):

- Y el Dialog2:

- Escribe en el Module1:

Page 60: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-60

Observa que declaramos y definimos los dos formularios:

AbreForm1: abre el Dialog1AbreForm2: abre el Dialog2Cerrar1: cierra el Dialog1Cerrar2: cierra el Dialog2

- Crea en la Hoja1 del Macro17, un botón de nombre [Áreas] y asignalo al procedimiento “AbreForm1”

- Escribe en el Module1:

Sub Salir1Entrar2Cerrar1AbreForm2

End Sub

Sub Salir2Entrar1Cerrar2AbreForm1

End Sub

Sub CalcularTrianguloDim ba As Double, al As Double, ar As Doubleba=CDbl(oDialogo1.Model.TextField1.Text)al=CDbl(oDialogo1.Model.TextField2.Text)ar=ba*al/2oDialogo1.Model.TextField3.Text=cStr(ar)

End Sub

Sub OtroTriangulooDialogo1.Model.TextField1.Text=""oDialogo1.Model.TextField2.Text=""oDialogo1.Model.TextField3.Text=""

End Sub

Sub CalculaCirculoDim ra As Double, lo As Double, ar As DoubleIf oDialogo2.Model.TextField1.Text<>"" Then

ra=CDbl(oDialogo2.Model.TextField1.Text)ar=3.1416*ra*ralo=2*3.1416*raoDialogo2.Model.TextField2.Text=cStr(ar)oDialogo2.Model.TextField3.Text=cStr(lo)

End IfEnd Sub

Sub OtroCirculooDialogo2.Model.TextField1.Text=""oDialogo2.Model.TextField2.Text=""oDialogo2.Model.TextField3.Text=""

End Sub

- Asigna:

Dialog1Botón [CALCULAR] (Al Ejecutar) = procedimiento CalcularTrianguloBotón [BORRAR] (Al Ejecutar) = procedimiento OtroTrianguloBotón [CÍRCULO] (Al Ejecutar) = procedimiento Salir1Entrar2

Page 61: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-61

Dialog2Botón [OTRO] (Al Ejecutar) = procedimiento OtroCirculoBotón [VOLVER] (Al Ejecutar) = procedimiento Salir2Entrar1TextField1 (Texto Modificado) = procedimiento CalculaCirculo

– Por último graba, ejecuta y prueba exhaustivamente nuestro programa. Espero que te funcione todo correctamente.

Page 62: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-62

Ejercicios

27) Crea un libro de cálculo de nombre EjerM27.ods, que contenga un cuadro de diálogo que nos permita calcular las tablas de multiplicar de la siguiente forma:

Parece muy complicado de hacer, pero si procedes de la siguiente forma, es muy fácil:

Primero: diseña el siguiente “Dialog”:

Segundo: Utilizando el cursor del ratón, selecciona:

- Pulsa [CTRL][C] = copiaremos lo que se encuentra seleccionado- Clic en cualquier sitio para desmarcar.- Pulsa [CTRL][V] = pegaremos lo anterior-Deberás “pegarlo” ocho veces más.

Page 63: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-63

Tercero:

Cambiar la propiedad “Nombre” de la siguiente forma:

Es decir: oDialogo.Model.TextFieldXX.Text = a0, etc, etc.

Cuarto:El código correspondiente es muy sencillo si utilizas tres arrays: a(0 To 0), b(0 To 9) y c(0 To 9)- En la primera matriz asignas 1, 2, 3, 4, ....9, 10- En la segunda matriz asignas a cada elemento el número correspondiente al cuadro de text (tabla del): TextField1- En la tercera matriz asignas el producto del elemento correspondiente de la primera y segunda matriz

Primera columna de controles = a0, a1, a2, a3, ... a9

Segunda columna de controles = b0, b1, b2, b3, ... b9

Tercera columna de controles = c0, c1, c2, c3, ... c9

Page 64: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-64

28) Crea un libro de cálculo de nombre EjerM28.ods, que contenga un cuadro de diálogo, que nos permita hacer un estudio estadístico de 10 valores, de la siguiente forma:

29) Crea un libro de cálculo de nombre EjerM29.ods, que contenga un formulario, que nos permita simplificar fracciones. Es decir, se trata de repetir el EjerM17, pero de forma visual:

Si trabajas con variables “Integer”, no podrás “tratar” números como los que aparecen en la ilustración. Prueba en lugar de “Integer”, “Long”.Un Integer es un entero entre –32.768 y 32.767Un Long es un entero entre –2.147.483.648 y 2.147.493.647

30) En un libro de cálculo de nombre EjerM30.ods, haz un programa que sirva para repasar las tablas de multiplicar, de la siguiente forma:– Considera una función que nos de la nota

cualitativa a partir de la cuantitativa (repasa el Prog19 del Macro06.ods)

- Inserta un “Dialog” de contenido:

Page 65: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-65

- Utiliza para los controles, los siguientes “Nombres”:

- El problema que nos planteamos, creo que está claro:

• Al ejecutar el “Dialog”, escribimos en txtNum el número de multiplicaciones que queremos hacer.

• En los cuadros txtUno y txtDos aparecen dos números aleatorios entre 1 y 9.• En el cuadro txtResul escribimos el resultado de la multiplicación que aparece en txtUno y

txtDos.• Si la respuesta es correcta, aparece en el cuadro txtCorrec, la frase “Muy Bien”• Si la respuesta es incorrecta, aparece en el cuadro txtCorrec la contestación correcta.• Los cuadros txtBien y txtMal, cuentan el número de respuestas correctas e incorrectas

respectivamente.• El botón OTRA sirve para

una nueva multiplicación• Al acabarse todas las

multiplicaciones: en el cuadro txtNota aparece la nota cualitativa (Excelente, Notable, Bien, etc.)

Page 66: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-66

13.- Cuadros de Diálogo y Hoja de Cálculo

Crea un nuevo libro de cálculo de nombre Macro18.ods, que simule en la Hoja1 una base de datos de clientes de la siguiente forma:

- Crea un Module1 y un Dialog1 asociado.

- Inserta en el Dialog1 los siguientes controles:

El control que aparece seleccionado es un cuadro combinado (ComboBox1), que podrás hacer a partir del control:

- Lo que pretendemos conseguir es lo siguiente:• Al hacer clic en [Visualizar Clientes]: en el cuadro combinado, se “cargan” los nombres de

los clientes que tenemos en el rango B3:B7• Al hacer clic en [Datos]: en los cuadros de texto del formulario, aparecen los datos (código,

nombre, dirección, ...) del cliente que seleccionemos previamente en el Cuadro Combinado

- Sitúate en el Module1 y escribe (lo de siempre):

- Veamos el programa que nos permite “cargar” los valores del rango B3:B7 en el cuadro combinado; escribe en el Module1:

Page 67: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-67

- Vamos a ver si entendemos el programa “Cargar”:• oCombo = oDialogo.getControl(“ComboBox1”)

A diferencia de lo que sucedía con el control “Cuadro de Texto” (TextField), hemos de “declarar” el cuadro combinado, para poder después, acceder a él. De la forma:NombreDelCuadroCombinado = NombreDelFormulario.getControl(“ComboBox1”)

• oCombo.AddItem(Cel.getFormula, i-1)Añade en el cuadro combinado, los elementos (Cel.getFormula), en el mismo orden (i-1 = 0, 1, 2, 3, 4).

- Veamos el programa que nos permite “acceder” a los datos del elemento seleccionado en el cuadro combinado; escribe en el Module1:

- Observa de qué forma tan sencilla accedemos al valor seleccionado en el cuadro combinado = oComboText

- Asocia al programa Acceder al botón (Al ejecutar) [Datos]

- Asocia el programa Cargar al botón [Visualizar Clientes]

- Crea un botón de nombre [Clientes], en la Hoja1 del libro Macro18.ods y asócialo al programa “AbreFormulario”

- Prueba lo que hemos hecho hasta ahora:• Desde la Hoja1: haz clic en [Clientes]• Clic en [Visualizar Clientes]• Selecciona el cliente que quieras en el cuadro combinado.• Clic en [Datos]

Espero que te funcione todo correctamente.

- Vamos a mejorar un poco nuestro programa, en efecto:• Sitúate en el Dialog1, selecciona el ComboBox1, accede a sus propiedades (pestaña

Acontecimientos) y a la acción Texto Modificado asigna el programa Acceder• Selecciona el botón [Datos] y bórralo.

Vuelve a ejecutar el programa.

Page 68: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-68

14.- Facturación

Como último ejercicio, te propongo hacer un sencillo programa de facturación ...

Crea un nuevo libro de cálculo de nombre Macro19.ods, con el siguiente contenido (en la Hoja1):

En la Hoja2 (cópialo del libro Macro18):

En la Hoja3:

- Inserta dos nuevas hojas, a nuestro libro de la siguiente forma:• Sitúate en la Hoja3• Menú Insertar

Hoja de cálculo ...Posición: Detrás de la hoja actualNúm. De hojas: 2

[Aceptar]

- Sitúate en la Hoja4 y crea:

Creo que está claro lo que simula la Hoja4 de nuestro programa de facturación: la base de datos de las facturas realizadas.

Page 69: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-69

Observa que nuestras facturas tienen una serie de limitaciones (limitaciones que tu puedes cambiar, cuando adaptes lo estudiado, en la realización del programa de facturación de tu empresa):

• Facturamos un máximo de tres conceptos:Num1 = número de unidades del artículo 1C.Art.1 = código del artículo 1Etc.

• Sólo disponemos de un iva por factura (no por artículo).• Sólo disponemos de un descuento por factura.• No contemplamos el vencimiento, para simplificar el problema.

- Sitúate en la Hoja5 y crea el impreso de factura:

- Cambia el nombre de cada hoja (basta que sitúes el cursor en la pestaña correspondiente y accedas a su menú contextual):

- Crea un Module1 y sitúate en la Hoja1 = MENÚ• Vamos a hacer un programa que nos permita situarnos en la base de datos de Clientes

(Hoja2 = CLIENTES), para ello utilizaremos la llamada Grabadora de Macros ...• Desde la Hoja1: MENÚ, haz lo siguiente:

Menú HerramientasMacros

Grabar macro.Observa que acaba de aparecer una nueva barra de herramientas, con un botón de nombre:

[Finalizar grabación]. Atención, todo lo que hagamos ahora, hasta que hagamos clic en [Finalizar grabación], se guardará en un programa.

• Haz clic en la pestaña correspondiente a CLIENTES• Clic en la celda A1 de “Clientes”• Clic en [Finalizar grabación]• Selecciona el Module1 de Standard de Macro19.ods (si no lo está ya).• En el campo “Nombre de la macro”, escribe: AClientes y clic en [Guardar]

- Sitúate en la hoja MENÚ:• Selecciona el botón [BASE DE DATOS DE CLIENTES], para ello deberás entrar en modo

Diseño: clic en

de la barra de iconos Campos de control de formulario

Page 70: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-70

• Menú ContextualCampo de Control

Solapa: AcontecimientosAl Ejecutar:

Document: Standard.Module1.AclientesEs decir, acabamos de asociar el programa AClientes, que hemos hecho a partir de la grabadora

de macros al botón [BASE DE DATOS DE CLIENTES]

- Pruébalo, es decir: clic en [Base de datos de clientes]

De hecho, el programa “AClientes” es bastante tonto, ya que es equivalente a dos pulsaciones de ratón:• Clic en la pestaña [CLIENTES]• Clic en A1 de la nueva hoja

Precisamente esto, pulsaciones de ratón y teclas, es lo que nos permite “programar” automáticamente la “Grabadora de Macros”

Si accedes al Module1 e investigas el contenido de “AClientes”, no te asustes, verás como está codificado “nuestro programa AClientes”. No te preocupes demasiado de su contenido, lo importante es que funciona y es muy fácil de hacer.

- Sitúate en la Hoja: CLIENTES y crea una macro que permita volver al Menú...• Desde la Hoja: CLIENTES:

Menú HerramientasMacros

Grabar macro• Clic en la pestaña: MENÚ• Clic en la celda A1• Clic en [Finalizar grabación]• Selecciona Module1/Standard/Macro19.ods y en nombre de la macro escribe: AMenu• [Guardar]

- Asocia la macro AMenu al botón [VOLVER], que tienes en la Hoja: CLIENTES y pruébalo.

- Asocia la macro AMenu al botón [VOLVER] que tienes en la Hoja: ARTÍCULOS y también el la Hoja: HISTÓRICO y también en la Hoja: FACTURA y pruébalo.

- Procede de la misma forma para:• Desde “MENÚ” crea una macro de nombre “AArticulos”, que nos sitúe en “ARTÍCULOS”.

Asóciala al botón [BASE DE DATOS DE ARTÍCULOS].• Desde “MENÚ” crea una macro de nombre “AHistorico", que nos sitúe en “HISTÓRICO”.

Asóciala al botón [BASE DE DATOS DE FACTURAS]• Desde “MENÚ” crea una macro de nombre “AFactura", que nos sitúe en “FACTURA”.

Asóciala al botón [FACTURAR]

- Crea otro módulo (Module2), sin más que: desde el editor de Basic, accede al menú contextual de la pestaña “Module1” y “Insertar – Módulo Basic”. Inserta también un formulario (Dialog1).

- Escribe en el Module2:

Page 71: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-71

Inserta en el Dialog1:

- Se trata de hacer un programa que calcule el número de factura y también que “cargue” los cuatro cuadros combinados del Dialog1, para ello necesitamos saber el número de clientes y artículos. Veamos, sitúate en Module2 y escribe:

Sub CalculaDim HojCli As Object, HojArt As Object, HojHis As ObjectDim Celda As String, CelCli As Object, CelArt As ObjectDim CelHi As Object, num As Integer, numCli As IntegerDim numArt As IntegerHojCli=ThisComponent.Sheets(1)HojArt=ThisComponent.Sheets(2)HojHis=ThisComponent.Sheets(3)CelHi=HojHis.getCellbyPosition(0,1)Celda=CelHi.getFormulaDo While Celda<>""

num=num+1

Celda=HojHis.getCellbyPosition(0,1+num).getFormulaLoopoDialogo.Model.TextField1.Text=cStr(num)oCombo1=oDialogo.getControl("ComboBox1")oCombo2=oDialogo.getControl("ComboBox2")oCombo3=oDialogo.getControl("ComboBox3")oCombo4=oDialogo.getControl("ComboBox4")CelCli=HojCli.getCellbyPosition(0,1)Celda=CelCli.getFormulaDo While Celda<>""

numCli=numCli+1

Celda=HojCli.getCellbyPosition(1,1+numCli).getFormulaoCombo1.AddItem(Celda,numCli-1)

LoopoCombo1.RemoveItems(numCli-1,numCli-1)CelArt=HojArt.getCellbyPosition(0,1)Celda=CelArt.getFormulaDo While Celda<>""

numArt=numArt+1

Celda=HojArt.getCellbyPosition(1,1+numArt).getFormulaoCombo2.AddItem(Celda,numArt-1)oCombo3.AddItem(Celda,numArt-1)oCombo4.AddItem(Celda,numArt-1)

LoopoCombo2.RemoveItems(numArt-1,numArt-1)

Page 72: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-72

oCombo1.RemoveItems(numArt-1,numArt-1)oCombo1.RemoveItems(numArt-1,numArt-1)

End Sub

- Prueba el funcionamiento del programa anterior, para ello ...• En la Hoja: FACTURA, crea un nuevo botón de nombre [Facturar] y asócialo a

AbreFormulario del Module2.• Asigna al botón [Calcula Nº] del Dialog1, el procedimiento anterior (Calcula)• Ejecuta nuestro programa:

[FACTURAR] en Hoja1: MENÚ[Facturar] en Hoja5: FACTURA[Calcula Nº]

- Vamos a hacer el procedimiento que nos permita colocar los datos del formulario, en la Hoja de Cálculo: FACTURA.Escribe en el Module2:

Sub CancelaroDialogo.endExecute()

End Sub

Sub AceptarHojCli=ThisComponent.Sheets(1)Hoj=ThisComponent.Sheets(4)oCombo1=oDialogo.getControl("ComboBox1")oCombo2=oDialogo.getControl("ComboBox2")oCombo3=oDialogo.getControl("ComboBox3")oCombo4=oDialogo.getControl("ComboBox4")Hoj.getCellByPosition(2,5).SetFormula(oDialogo.Model.TextField1.Text)Hoj.getCellByPosition(2,6).SetFormula(oDialogo.Model.TextField2.Text)Hoj.getCellByPosition(3,1).SetFormula(oCombo1.Text)nom=oCombo1.Textx=HojCli.getCellByPosition(1,1).getFormulaDo While x<>""

num=num+1x=HojCli.getCellByPosition(1,1+num).getFormulaIf x=nom then

Hoj.getCellByPosition(3,2).SetFormula(HojCli.getCellByPosition(2,1+num).getFormula)

Hoj.getCellByPosition(3,3).SetFormula(HojCli.getCellByPosition(4,1+num).getFormula)

Hoj.getCellByPosition(3,4).SetFormula(HojCli.getCellByPosition(5,1+num).getFormula)End If

LoopHoj.getCellByPosition(0,11).SetValue(Val(oDialogo.Model.TextField3.Text))Hoj.getCellByPosition(0,12).SetValue(Val(oDialogo.Model.TextField4.Text))Hoj.getCellByPosition(0,13).SetValue(Val(oDialogo.Model.TextField5.Text))HojArt=ThisComponent.Sheets(2)nom=oCombo2.Text: num=0x=HojArt.getCellByPosition(1,1).getFormulaDo While x<>""

num=num+1x=HojArt.getCellByPosition(1,1+num).getFormulaIf x=nom Then

Hoj.getCellByPosition(1,11).SetFormula(oCombo2.Text)

Hoj.getCellByPosition(2,11).SetValue(HojArt.getCellByPosition(2,1+num).getValue)End If

Page 73: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-73

Loopnom=oCombo3.Text: num=0x=HojArt.getCellByPosition(1,1).getFormulaDo While x<>""

num=num+1x=HojArt.getCellByPosition(1,1+num).getFormulaIf x=nom Then

Hoj.getCellByPosition(1,12).SetFormula(oCombo3.Text)

Hoj.getCellByPosition(2,12).SetValue(HojArt.getCellByPosition(2,1+num).getValue)End If

Loopnom=oCombo4.Text: num=0x=HojArt.getCellByPosition(1,1).getFormulaDo While x<>""

num=num+1x=HojArt.getCellByPosition(1,1+num).getFormulaIf x=nom Then

Hoj.getCellByPosition(1,13).SetFormula(oCombo4.Text)

Hoj.getCellByPosition(2,13).SetValue(HojArt.getCellByPosition(2,1+num).getValue)End If

LoopHoj.getCellByPosition(1,16).SetValue(Val(oDialogo.Model.TextField6.Text))Hoj.getCellByPosition(1,15).SetValue(Val(oDialogo.Model.TextField7.Text))

End Sub

- Asocia el procedimiento Cancelar, al botón [Cancelar] del Dialog1 y el procedimiento Aceptar al botón [Aceptar]

- Prueba el funcionamiento del programa de la siguiente forma:

Considera la factura:• Clic en [Calcula Nº], tendremos Factura nº 3• Fecha: ‘3/7/2009 (debes escribir un apóstrofe antes de introducir la fecha, para no tener

problema con el formato de fecha en la hoja de cálculo. De esta forma estamos considerando la fecha como un texto)

• Cliente: Eufrasia Martínez• Unidades Artículos

2 Naranjas de la China3 Pepinillos Variados4 Té de Ceylan

• % IVA: 3• % descuento: 5• Clic en [Aceptar]• “Cierra” el formulario

Espero que te haya funcionado todo correctamente, ya que en caso contrario no tienes otro remedio que repasarlo, sin prisa, poco a poco.

- Supongo que está claro el problema que tenemos pendiente en la Hoja: FACTURA, vamos a introducir las fórmulas correspondientes:

• Celda D12: =A12*C12• Copia la fórmula anterior en D13 y D14• Celda D15: =SUMA(D12:D14)• Celda D16: =B16*D15/100• Celda D17: =B17*(D15-D16)/100• Celda D18: =D15-D16+D17

- El siguiente paso está claro cual es ...

Page 74: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-74

Grabar la factura, es decir, colocar los datos que tenemos en la Hoja: FACTURA en la Hoja: HISTÓRICO.

Escribe en el Module2:

Sub GrabarFacturaHojCli=ThisComponent.Sheets(1)HojArt=ThisComponent.Sheets(2)HojHis=ThisComponent.Sheets(3)HojFac=ThisComponent.Sheets(4)CelHi=HojHis.getCellByPosition(0,1)Celda=CelHi.getFormula:num=0Do While Celda<>""

num=num+1Celda=HojHis.getCellByPosition(1,1+num).getFormula

Loopx= HojFac.getCellByPosition(2,5).getValueHojHis.getCellByPosition(0,1+num).SetValue(x)x=HojFac.getCellByPosition(2,6).getFormulaHojHis.getCellByPosition(1,1+num).SetFormula(x)y=HojFac.getCellByPosition(3,1).getFormulax=HojCli.getCellByPosition(1,1).getFormula

num1=0Do While x<>""

num1=num1+1x=HojCli.getCellByPosition(1,1+num1).getFormulaIf x=y then

Cod=HojCli.getCellByPosition(0,1+num1).getFormulaHojHis.getCellbyPosition(2,1+num).SetFormula(Cod)

End IfLoop

x=HojFac.getCellByPosition(0,11).getValueHojHis.getCellByPosition(3,1+num).SetValue(x)x=HojFac.getCellByPosition(0,12).getValueHojHis.getCellByPosition(5,1+num).SetValue(x)x=HojFac.getCellByPosition(0,13).getValueHojHis.getCellByPosition(7,1+num).SetValue(x)y=HojFac.getCellByPosition(1,11).getFormulax=HojArt.getCellByPosition(1,1).getFormula

num2=0Do While x<>""

num2=num2+1x=HojArt.getCellByPosition(1,1+num2).getFormulaIf x=y then

Cod=HojArt.getCellByPosition(0,1+num2).getFormulaHojHis.getCellbyPosition(4,1+num).SetFormula(Cod)

End IfLoop

y=HojFac.getCellByPosition(1,12).getFormulax=HojArt.getCellByPosition(1,1).getFormula

num3=0Do While x<>""

num3=num3+1x=HojArt.getCellByPosition(1,1+num3).getFormulaIf x=y then

Cod=HojArt.getCellByPosition(0,1+num3).getFormulaHojHis.getCellbyPosition(6,1+num).SetFormula(Cod)

End IfLoop

y=HojFac.getCellByPosition(1,13).getFormulax=HojArt.getCellByPosition(1,1).getFormula

num4=0

Page 75: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-75

Do While x<>""num4=num4+1x=HojArt.getCellByPosition(1,1+num4).getFormulaIf x=y then

Cod=HojArt.getCellByPosition(0,1+num4).getFormulaHojHis.getCellbyPosition(8,1+num).SetFormula(Cod)

End IfLoop

x=HojFac.getCellByPosition(1,15).getValueHojHis.getCellByPosition(10,1+num).SetValue(x)x=HojFac.getCellByPosition(1,16).getValueHojHis.getCellByPosition(9,1+num).SetValue(x)End Sub

- Asocia el programa “GrabarFactura” al botón [GRABAR] de la Hoja: FACTURA y pruébalo.

- Vamos a hacer un procedimiento que sirva para dejar en “blanco”, la factura..

Escribe el Module2:

Sub BorrarFacturaHoj=ThisComponent.Sheets(4)Hoj.getCellByPosition(3,1).SetFormula("")Hoj.getCellByPosition(3,2).SetFormula("")Hoj.getCellByPosition(3,3).SetFormula("")Hoj.getCellByPosition(3,4).SetFormula("")Hoj.getCellByPosition(2,5).SetFormula("")Hoj.getCellByPosition(2,6).SetFormula("")Hoj.getCellByPosition(0,11).SetFormula("")Hoj.getCellByPosition(0,12).SetFormula("")Hoj.getCellByPosition(0,13).SetFormula("")Hoj.getCellByPosition(1,11).SetFormula("")Hoj.getCellByPosition(1,12).SetFormula("")Hoj.getCellByPosition(1,13).SetFormula("")Hoj.getCellByPosition(1,15).SetFormula("")Hoj.getCellByPosition(1,16).SetFormula("")Hoj.getCellByPosition(2,11).SetFormula("")Hoj.getCellByPosition(2,12).SetFormula("")Hoj.getCellByPosition(2,13).SetFormula("")

End Sub

- Corrige el procedimiento “AbreFormulario”, de forma que su primera línea sea BorrarFactura:

- Abre el formulario, para probar el “BorrarFactura”. Es decir: sitúate en la Hoja: FACTURA y clic en [Facturar]

- Crea una macro de nombre “Imprimir” en un módulo nuevo: Module3, que debes asociar al botón [Imprimir] de la Hoja: Factura, que sirva para imprimir la factura, es decir: la macro ha de contener:

Menú ArchivoImprimir

Selecciona “Páginas” y escribe la última página.[Aceptar]

- Si observas la factura impresa, supongo que estarás de acuerdo conmigo, en que no queda demasiado bien los botones en la factura impresa.

Page 76: Introducción a la programación en OpenOffice.org Basic€¦ · OpenOffice Basic Fermí Vilà BA-3 Todas las líneas, precedidas por “REM” representan “comentarios” para

OpenOffice Basic Fermí Vilà BA-76

Para evitar el problema:• Edita cada botón• Accede a sus propiedades y en la propiedad “Imprimir”, selecciona la opción No

- Nuestro simple programa de facturación ya está terminado, solo nos falta probarlo exhaustivamente.