Excel Vb

November 26, 2017 | Author: Luis Miguel Garzon Isnado | Category: Matrix (Mathematics), Basic, Microsoft Excel, Point And Click, Variable (Computer Science)
Share Embed Donate


Short Description

Descripción: Aplicaciones en visual basic para aplicaciones en excel por el ing. pinto antonio...

Description

VISUAL BASIC PARA APLICACIONES EXCEL

Dante Antonio Pinto Jeria Sucre – Bolivia 2013

1

CAPÍTULO I INTRODUCCIÓN A LA PROGRAMACIÓN 1.1PASOS INICIALES.Para comenzar se debe habilitar, si es que no lo está, la ficha Programador. Para ello: 1. Haga clic en la pestaña Archivo, elija Opciones y, a continuación, haga clic en la categoría Personalizar cinta de opciones. 2. En Personalizar cinta de opciones, en la lista Fichas principales, haga clic en Programador y, a continuación, haga clic en Aceptar.

Al presionar la ficha Programador aparece:

2 habilita y deshabilita (según el estado anterior) el modo de diseño.

Una vez que se habilita la ficha Programador, ya no es necesario volver a realizar este paso en una sesión posterior. Luego se debe habilitar todas las macros, de la siguiente manera: 1. Haga clic en la pestaña Archivo, elija Opciones y, a continuación, haga clic en la categoría Centro de Confianza, luego Configuración del centro de confianza. 2. En la lista de opciones poner marca en Habilitar todas la macros, luego hacer clic en Aceptar y otra vez en Aceptar.

Una vez hecho esto, tampoco es necesario realizarlo nuevamente en otra sesión.

1.2 REFERENCIAS A CELDAS.Se puede hacer referencias a celdas mediante los objetos Cells y Range. Así: Cells(número de fila , número de columna) Hace referencia a una sola celda. Range(Cells(fila inicial , columna inicial), Cells(fila final , columna final)) Hace referencia a un rango de celdas. Se puede utilizar Cells, para poner un valor en una celda: Cells(1,1)=”Hola Mundo”, pone el mensaje “Hola Mundo” en la primer celda de la hoja activa. Por otra parte se puede recoger el valor de una celda y almacenarlo en una variable: n = Cells(2,1). Recoge el valor de la celda que está en la segunda fila y primer columna y lo almacena en la variable n.

3 Se pueden cambiar las propiedades de las celdas, dándole propiedades a los objetos Cells y Range. Cells(fila, columna).Font.Bold = True Pone el formato de la celda en negrilla. Cells(fila, columna). Font.Name = "Tipo" Pone el tipo de letra a la celda, Tipo=Arial, etc Cells(fila, columna).Font.Size = numero Pone el tamaño número de la celda Cells(fila, columna).Font.Color = RGB(número1,número2,número3) Da color al contenido de la celda. El código RGB se refiere a Red Green Blue y son número que van de 0 a 255. Así por ejemplo: Cells(1,1).Font.Color = RGB(255,0,0) pone el color rojo al contenido de la primera celda. Cells(fila, columna).HorizontalAlignment = xlCenter El contenido de la celda es centrado. Cells(fila, columna).HorizontalAlignment = xlRight El contenido de la celda es alineado a la derecha. Cells(fila, columna).HorizontalAlignment = xlLeft El contenido de la celda es alineado a la izquierda. Range(Cells(fila inicial , columna inicial), Cells(fila final , columna final)) .Merge Combina el rango especificado de celdas en una sola. Cells(fila, columna).Font.Size = número Fija el tamaño de la fuente, donde número es el tamaño elegido. Cells(fila, columna).NumberFormat = “0.número_de_ceros” Fija el número de decimales del contenido de la celda. Cells(fila, columna).Interior.ColorIndex = número Rellena el interior de la celda con el color indicado por número. Cells(fila, columna).Interior.color = RGB(número, número, número) Cells(fila, columna).Select Selecciona la celda indicada por fila y columna. ActiveCell.ColorIndex = número Rellena el interior de la celda activa con el color indicado por número.

4 Cells(fila, columna).RowHeight = número Cells(fila, columna).ColumnWidth = número Cells(fila, columna).ClearContents Borra los contenidos de la celda. Cells(fila, columna).ClearFormats Borra los formatos de la celda. Cells(fila, columna).Interior.Pattern = xlNone

1.3 PRIMER PROGRAMA .Se desea un programa que rellene la celda seleccionada con un color. Debe recoger el número de color de la primer celda. El primer paso es abrir el Editor de Visual Basic presionando el icono . Después que aparece el entorno de Visual Basic se debe presionar el icono de Ejecutar , que es una flecha similar a la tecla de Play en cualquier reproductor de sonido o video.

Después de darle el nombre de prueba, (o cualquier otro) presionamos Crear. Aparece lo siguiente: Sub prueba() End Sub Y el código del programa se debe poner en el espacio existente entre las instrucciones Sub y End Sub. El programa completo es el siguiente: Sub prueba() Dim n As Integer n = Cells(1, 1) ActiveCell.Interior.ColorIndex = n End Sub

5 Luego volvemos a la hoja Excel y presionamos Herramientas, Macro y Macros, o el método abreviado Alt + F8. En la ventana que aparece presionamos Opciones. Aquí se debe asignar un método abreviado, para este caso se le asigna CTRL + d, luego Aceptar. Luego se elige Ejecutar de la primera ventana. En la celda (1,1) ponemos el valor del índice de color, por ejemplo 3 y luego elegimos alguna de las celdas y presionamos CTRL + d, esa celda seleccionada se rellena con color rojo, podemos ir cambiando el índice y elegir otras celdas.

Explicación del código: Dim n As Integer, realiza el dimensionamiento de la variable n como entero. Este paso pudo omitirse, pero no es conveniente hacerlo, ya que es bueno tener clasificadas las variables, lo que facilita la depuración del programa. n = Cells(1, 1), asigna a la variable n el contenido de la celda que está en la primera fila y primera columna. ActiveCell.Interior.ColorIndex = n, rellena la celda activa con el color correspondiente al índice n.

1.4 CONTROLES ACTIVEX 1.4.1 Control Botón de Comando ( Command Button) .Este es uno de los controles que más utilizaremos en este texto. Es un botón, que al presionarlo ejecuta algún tipo de acción que se haya asociado previamente a él. Viene a ser como una tecla virtual. Se encuentra en el cuadro de controles y su icono es: Una vez que se lo selecciona, se lo puede arrastrar a la posición que se desee y también se puede modificar, con el ratón, el tamaño que tiene. Inicialmente el botón tiene el color que se muestra en la figura, y en él aparece la leyenda CommandButton. Se pueden cambiar las propiedades del control de la siguiente manera:

6 Estando resaltado el Botón de Comando, se presiona el icono de propiedades , que se encuentra en la barra de controles, o también haciendo clic con el botón derecho del ratón y presionando propiedades. Aparece la ventana de propiedades

Aquí podemos cambiar el nombre (Name), el color de fondo (Back Color), la leyenda del botón (Caption), el color de la leyenda (ForeColor), etc. Posteriormente, estando en modo de diseño, se hace doble clic en el botón de comando y con eso se entra al entorno de programación, en el que se debe añadir el código correspondiente. Ejemplo1: Hacer un programa que permita calcular los factores primos de un número entero. Se selecciona el control botón de comando y se procede como se indica líneas arriba, cambiando el color de fondo a rojo, las letras a amarillo y la leyenda que diga CALCULAR. Estando en modo de diseño el botón de comando tiene la forma , está rodeado de puntos para cambiar su dimensión. Estando así hacemos doble clic en el botón y se habilita el entorno de programación, en el que debemos añadir el algoritmo que descompone un número en factores primos. El algoritmo es el siguiente:

7

n con=0 d=n

d=d-1

Es n Mod d = 0 ?

n1 = n d=n/d n = n1 con = con + 1 Cells(1,con) = d d = n1

Es d > 2 ?

Cells(1, con + 1) = n

8 El código completo es el siguiente: Private Sub calcular_Click() Dim n, d, n1, con As Long Range(Cells(1, 1), Cells(2, 100)).ClearContents n = Val(InputBox(“Programa para factores primos de números enteros”, “Introduzca el número”)) Cells(2, 1) = n con = 0 d=n Do d=d–1 If n Mod d = 0 Then n1 = d d=n/d n = n1 con = con + 1 Cells(1, con) = d d = n1 End If Loop While d > 2 Cells(1, con + 1) = n End Sub Una vez terminado el código, se vuelve a Excel presionando su icono en la esquina superior izquierda y se sale del modo de diseño haciendo clic en el icono . El botón de comando deja de estar rodeado de puntos de dimensión y pasa al estado de ejecución, luego debemos hacer clic en él y el programa se ejecuta pidiéndonos un número, del cual encuentra sus factores primos y los va poniendo en las celdas de la primera fila Explicación del código.Dim n, d, n1, com As Long :dimensiona las variables n, d,n1, con del tipo entero largo. Range(Cells(1, 1), Cells(2, 100)).ClearContents: Borra los contenidos de las celdas indicadas por Range. N = Val(InputBox(“Programa para factores primos de números enteros”, “Introduzca el numero”)): Asigna el valor introducido en el cuadro de entrada, convirtiendo ese valor a un valor numérico. Cells(2, 1) = n: Asigna el valor de n a la celda de la segunda fila y primer columna.

9

Con = 0 d = n: Da valores iniciales a las variables con y d. Do : Inicia el bucle Do- Loop While d = d – 1: Reduce el valor de d en una unidad. If n Mod d = 0 Then : Prueba si el residuo de dividir n entre d, es igual a cero. Si es así hace lo que viene a continuación de Then.

N1 = d d=n/d n = n1 con = con + 1 : Da diferentes valores a las variables.

Cells(1, con) = d d = n1: A las celdas de la primera fila va asignando los distintos valores de d y luego a d se le asigna el valor de n1.

End If : Termina el condicional if.

Loop While d > 2: Seguirá realizando el bucle mientras d sea mayor que 2.

Cells(1, con + 1) = n: Asigna el último factor del n inicial.

Ejemplo2: Hacer un programa que encuadre, las celdas seleccionadas, con doble línea, además le añada un color de fondo y ponga el formato de letra en tipo Arial número 20. A un botón de comando le añadimos el siguiente código: Private Sub bordes_Click() With Selection.Borders(xlEdgeLeft) .LineStyle = xlDouble .Color = 2 End With With Selection.Borders(xlEdgeTop) .LineStyle = xlDouble .Color = 2 End With With Selection.Borders(xlEdgeBottom)

10 .LineStyle = xlDouble .Color = 2 End With With Selection.Borders(xlEdgeRight) .LineStyle = xlDouble .Color = 2 End With With Selection.Borders(xlInsideVertical) .LineStyle = xlDouble .Color = 2 End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlDouble .Color = 2 End With With Selection.Font .Name = "Arial" .Size = 20 End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom End With With Selection.Interior .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0.4 End With End Sub Al ejecutar el programa sucede lo siguiente:

Seleccionando las celdas:

11

Después de presionar el botón bordes resulta:

Ejemplo3: Hacer un programa que utilice la propiedad offset para rellenar celdas de un color determinado. En un botón de comando se introduce el siguiente código: Private Sub llenar_Click() For i = 1 To 4 For j = 1 To 4 ActiveCell.Offset(i - 1, j - 1).Interior.ColorIndex = 5 Next Next End Sub Donde se señale una celda, esta y sus vecinas son rellenadas con un color.

12 Luego de presionar el botón de comando.

1.4.2 Control Cajón de Listas (ListBox) .Despliega una lista de la cual puede seleccionarse un elemento. Se accede de la siguiente manera:

Ejemplo1: Como primer ejemplo de uso de este control se pondrán los días de la semana en las celdas de la C1 hasta la C7.

13 Luego se pone en la hoja el control ListBox.

Estando resaltado el control, se hace clic con botón derecho del ratón se selecciona el campo Propiedades.

En las propiedades se modifican LinkedCell: B1 y ListFillRange: C1:C7

14

Luego se sale del modo de diseño haciendo clic en Haciendo clic en la ListBox y desplazando la lista se va cambiando el valor que aparece en la celda B1

15

Ejemplo2: Crear un programa asociado a un botón de comando (Command Button) para que una vez seleccionado un nombre en un cuadro de lista (List Box) Para que una vez seleccionado un nombre en el cuadro de lista y presionado el botón de comando se saque el elemento correspondiente a la tercera columna y a la fila seleccionada. Para este caso se aplicará a una lista que contiene los números correspondientes en la columna 1, los nombres en la columna 2 y las calificaciones en la columna 3. La cantidad de datos es de 100 elementos. El primer paso es poner en la hoja de cálculo un cuadro de lista y un botón de comando. En las propiedades del cuadro de lista se pone el rango que tendrá la misma, que en este caso particular es ListFillRange: B2:B101. Tal como se indica en la siguiente figura

16

Luego se cambian las propiedades del botón de comando:

Luego de hacer doble clic en el botón de comando se inserta el siguiente código, entre Private Sub…….End sub: Private Sub CommandButton1_Click() With Hoja1.ListBox1 For n = 0 To .ListCount - 1 If .Selected(n) Then mensaje = MsgBox(.List(n), vbExclamation, "Ha seleccionado") Cells(1, 4) = Cells(n + 2, 3) End If Next n End With End Sub De manera que resulta:

17

Despues de salir del modo de diseño presionando , se puede ejecutar el programa. Seleccionando un elemento de la lista y luego presionando el botón SELECCIONAR.

Si los datos estarían en otra hoja se procede: En el cuadro de propiedades del cuadro de lista, en el campo ListFillRange: Nombre_de_la_hoja!Rango Después del nombre de la hoja viene el símbolo ! y luego el rango Ejemplo3: ListFillRange: Hoja2!B3:B10

1.4.3 Control de número (Spin Button) .Este control hace variar un número asociado a una celda o a algún otro objeto. Se accede de la siguiente manera:

18

Ejemplo: Cargar un control de número a una hoja Excel y modificar las propiedades de acuerdo a lo que se nuestra en la siguiente figura:

19 Hacer doble clic sobre el control, para acceder al entorno de programación, y agregar el siguiente código.

Volver a la hoja Excel y salir del modo de diseño. Al presionar el botón superior aumenta el número de la celda A1 y ocurre lo contrario al presionar el botón superior. En este caso los números varían de cero a uno. Esto puede cambiarse en los campos Max y Min del cuadro propiedades.

1.4.4 Botón de alternar (Toggle Button) .Este es un botón de alternancia y cuando se lo presiona queda “asegurado” y cuando se lo vuelve a presionar queda “suelto”. Se accede de la siguiente manera:

20

Ejemplo: Se carga el control y luego se cambian los campos de la ventana de propiedades de acuerdo a lo que se nuestra en la siguiente figura:

Luego se hace doble clic en el control para acceder al campo de escritura de código y se añade lo siguiente:

21 Private Sub ToggleButton1_Click() If ToggleButton1.Value = True Then ActiveWindow.DisplayGridlines = False Else ActiveWindow.DisplayGridlines = True End If End Sub Después de salir del modo de diseño:

Luego de presionar el botón:

En este caso se borrar las rejillas y el botón parece “hundido”, o sea presionado.

22

1.4.5 Botón de Opción (Option Button) .Este control sirve para escoger de una lista de opciones, o de una sola opción. Se accede de la siguiente manera:

Ejemplo: Para ejemplificar el uso de este control se utilizaran cuatro controles y cada uno con las siguientes propiedades:

23 Luego se añade el siguiente código: Private Sub OptionButton1_Click() If OptionButton1.Value = True Then For i = 1 To 5 Cells(1 + i, 7) = Cells(i + 1, 5) * Cells(i + 1, 6) Next End If End Sub Private Sub OptionButton2_Click() If OptionButton2.Value = True Then For i = 1 To 5 Cells(1 + i, 7) = Cells(i + 1, 5) / Cells(i + 1, 6) Next End If End Sub Private Sub OptionButton3_Click() If OptionButton3.Value = True Then For i = 1 To 5 Cells(1 + i, 7) = Cells(i + 1, 5) + Cells(i + 1, 6) Next End If End Sub Private Sub OptionButton4_Click() If OptionButton4.Value = True Then For i = 1 To 5 Cells(1 + i, 7) = Cells(i + 1, 5) - Cells(i + 1, 6) Next End If End Sub

24 Se

añade

una

tabla

con

los

siguientes

datos

y

ubicaciones:

Cuando se selecciona alguno de los botones de opción, se realiza la acción a él asociada.

1.4.6 Casilla de Verificación (Check Box).Muestra una casilla de verificación y una etiqueta para texto. Se utiliza en general para establecer opciones. La diferencia con el control botón de opción (option button) es que con este control se pueden hacer múltiples selecciones. Se accede de la siguiente manera:

25

Ejemplo: Crear un programa que cambie el aspecto de la celda A1, la cual tiene la palabra Dante, según las opciones introducidas en las casillas de verificación, que se muestran en la siguiente figura:

En el cuadro de propiedades de cada casilla, se cambia el campo Caption, con Color Rojo, Negrilla, Resaltado Amarillo e Itálica; de manera correspondiente a cada una de las casillas. Posteriormente, haciendo doble clic en cada una de las casillas de verificación se asigna el siguiente código a cada una de ellas.

26 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then Cells(1, 1).Font.Color = RGB(255, 0, 0) Else Cells(1, 1).Font.Color = RGB(0, 0, 0) End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then Cells(1, 1).Font.Bold = True Else Cells(1, 1).Font.Bold = False End If End Sub Private Sub CheckBox3_Click() If CheckBox3.Value = True Then Cells(1, 1).Interior.ColorIndex = 6 Else Cells(1, 1).Interior.ColorIndex = 0 End If End Sub Private Sub CheckBox4_Click() If CheckBox4.Value = True Then Cells(1, 1).Font.Italic = True Else Cells(1, 1).Font.Italic = False End If End Sub Después de salir del modo de diseño, al ejecutar el programa resulta lo siguiente:

27

1.5 CARGADO AUTOMÁTICO DE EVENTOS AL ABRIR UNA HOJA EXCEL .Puede suceder que se desea que automáticamente, al abrir la hoja Excel, se produzca algún tipo de evento, por ejemplo dar un mensaje aclaratorio sobre el programa o ejecutar directamente alguna acción. Para ello se tiene que trabajar con el objeto Workbook. Para ello se siguen los siguientes pasos: a) Ingresar a Excel. b) Presionar Alt + F11 c) Presionar el Explorador de Proyectos.

d) Hacer doble clic en ThisWorkbook.

e) Ingresar al objeto Workbook.

28

f) Ingresar al evento Open. Y añadir el código que se desee, en este caso solo es un mensaje. Private Sub Workbook_Open() MsgBox (“Este es un mensaje inicial, al abrir la Hoja”) End Sub f) Guardar el libro con algún nombre. g) Abrir nuevamente y se vera lo siguiente:

También se pueden asociar al objeto WorkBook, entre otros, los eventos Deactive, SheetActive, etc.

1.6 USO DE LAS FUNCIONES DE EXCEL EN PROGRAMAS.Se pueden aprovechar las funciones que ya tiene incorporadas Excel, para solucionar problemas de programación. Así por ejemplo, no es necesario insertar código para invertir una matriz, ya que Excel ya tiene incorporada esta función, solo es necesario adaptarla de manera adecuada a las necesidades que se tengan. En Visual Basic, las funciones de Excel pueden ejecutarse mediante el objeto WorksheetFunction. Si la función se aplicará sobre un rango, es necesario definir variables de tipo rango mediante Range y luego a esas variables se asigna el rango de celdas correspondientes de la hoja de cálculo. El código base es el siguiente: Dim mirango As Range Set mirango = Worksheets(“Hoja1”).Range(Cells(1, 1), Cells(n, n)) determinante = Application.WorksheetFunction.Mdeterm(mirango) Explicación: Dim mirango As Range: Se define una variable, en este caso mirango, del tipo Range.

29 Set mirango = Worksheets(“Hoja1”).Range(Cells(1, 1), Cells(n, n)): Mediante Set se asigna el rango especificado por Range de la Hoja1 del objeto Worksheets, a la variable mirango. Determinante = Application.WorksheetFunction.Mdeterm(mirango): a la variable determinante, se le asigna el resultado de la función Mdeterm. Si se desea utilizar otro tipo de función, solo habrá que cambiar lo que viene a continuación de Application.WorksheetFunction. , y podría ser cualquiera de las funciones que tiene Excel, como se muestra a continuación:

Ejemplo: Hacer un programa que resuelva un sistema de ecuaciones lineales. Primero se colocan tres botones de comando (CommandButton) borrar, calcular1 y calcular2, y se asigna el código correspondiente a cada uno de ellos como se indica a continuación. Private Sub borrar_Click() Range(Cells(2, 1), Cells(100, 100)).ClearContents Range(Cells(2, 1), Cells(100, 100)).ClearFormats Cells(1, 2).ClearContents Cells(1, 2).Select End Sub Private Sub calcular1_Click() Dim n As Integer n = Val(InputBox(“Numero de ecuaciones:”, “Programa SISTEC Hecho por Dante Pinto Jeria”)) Cells(1, 2) = n Range(Cells(3, 1), Cells(2 + n, n)).Interior.ColorIndex = 4 Range(Cells(3, n + 1), Cells(2 + n, n + 1)).Interior.ColorIndex = 6 Cells(3, 1).Select End Sub Private Sub calcular2_Click() Dim n As Integer Dim rango1, rango2 As Range n = Cells(1, 2)

30 Set rango1 = Worksheets(“Hoja1”).Range(Cells(3, 1), Cells(2 + n, n)) Set rango2 = Worksheets(“Hoja1”).Range(Cells(3, n + 1), Cells(2 + n, n + 1)) Range(Cells(3, 2 + n), Cells(2 + n, 2 + n)).Font.Bold = True Range(Cells(3, 2 + n), Cells(2 + n, 2 + n)).Font.Color = RGB(255, 0, 0) Range(Cells(3, 2 + n), Cells(2 + n, 2 + n)) = _ Application.WorksheetFunction.Mmult(Application.WorksheetFunction.Minve rse(rango1), rango2) End Sub

31

CAPÍTULO II ELEMENTOS DE PROGRAMACIÓN 2.1 VARIABLES.Las variables son trozos de memoria que el programa se reserva para almacenar valores, tienen nombre y un tipo de dato. El tipo de dato de la variable determina cómo se almacenan los bits que representan esos valores en la memoria del equipo. Si no se proporciona un tipo de dato, de forma predeterminada, la variable toma el tipo de dato Variant. Este tipo puede representar diferentes tipos de datos en distintas situaciones. 2.1.1 Tipos de datos Tipo

Tamaño en bytes Boolean Binario 2 Byte Entero corto 1 Integer Entero 2 Long Entero largo 4 Single Real Simple 4 precisión Double Real doble precisión 8 Currency Número con punto 8 decimal fijo String Cadena de 10 + 1byte/car. caracteres Hasta 64K Date Fecha 8

Variant

Object

Descripción

Fecha/Hora, 16 bytes números enteros, byte/car. reales, o caracteres cadenas caracteres Cualquier objeto 4

Rango True o False 0 a 255 -32768 a 32768 -2147483648 a 2147483647 -3.40E38 a 3.40E38 -1.79E308 a 1.79E308 -9.22E14 a 9.22E14 0 a 65500 caracteres

1 de enero de 100 a 31 de diciembre de 9999. Indica también la hora desde 0:00:00 a 23:59:59 + 1 F/h: como Date, números: en mismo rango que el tipo de de valor almacenado. Cualquier referencia a un objeto

32 2.1.2 Ámbito de las variables Variables Locales

Variables Estáticas

Solo son reconocidas en el procedimiento en el que se declararon

Conservan su valor entre una llamada y otra al procedimiento, Se declaran con la palabra reservada Static

Variables a nivel del formulario Puede ser compartida por todos los procedimientos de ese formulario. Se declara desplegando, en la ventana de código, el cuadro lista Objetos y seleccionando “General”

Variables a nivel del módulo Para compartir una variable entre todos los formularios y procedimientos contenidos en un proyecto, es necesario declararla en un módulo de dicho proyecto.

Variables Públicas Variable disponible más allá del ámbito de un procedimiento, e incluso del de un formulario o módulo, se declara en un módulo de la aplicación, en la sección de declaraciones generales, usando la palabra Public

2.1.3 Matrices Se declaran de la siguiente manera: Dim nombre_matriz(tamaño) As tipo, declara un vector desde 0 hasta tamaño. Dim vector(14) As Integer, declara un vector de 15 elementos, con números índice que van de 0 a 14. Dim vector(1 To 15) As Integer, declara un vector de 15 elementos, con números índice que van de 1 a 15 Dim matriz(1 To 10, 1 To 20) As Single, declara una matriz de 10 filas por 20 columnas. 2.1.4 Matrices dinámicas A veces no se sabe de antemano el tamaño que tendrá una matriz en un procedimiento, y por tanto se le da el tamaño más grande posible, con lo cual se ocupa mucha memoria innecesariamente. Para evitar esto se puede asignar matrices de manera dinámica, de la siguiente forma: a) Declarar la matriz dinámica con una lista de dimensiones vacía. Dim Matriz()

33 b) En el lugar ,del código, requerido asignar el número real de elementos con la instrucción ReDim. ReDim Matriz(x+1) 2.1.5 Declaración Explícita Para forzar a que siempre se declaren variables, se debe añadir en la sección Declaraciones del módulo de clase, de formulario la instrucción: Option Explicit

2.2 ESTRUCTURAS DE CONTROL .2.2.1 If…Then…Else La cláusula Else es opcional. If condición1 Then Bloque de instrucciones 1 Else Bloque de instrucciones 2 End If

2.2.2 Select Case En caso de que ningún valor de la lista de expresiones coincida con la prueba, se ejecuta Case Else. Select Case expresiónPrueba Case listaExpresiones1 Bloque de instrucciones 1 Case listaExpresiones2 Bloque de instrucciones 2 . . . Case listaExpresiones n Bloque de instrucciones n Case Else Bloque de instrucciones n+1 End Select

34 2.2.3 Do While … Loop Si la condición es falsa no ejecuta las instrucciones ni siquiera una vez. Do While condición Instrucciones Loop

2.2.4 Do …Loop While Ejecuta las instrucciones, por lo menos una vez. Do Instrucciones Loop While condición

2.2.5 For …Next Lo que está entre corchetes es opcional For contador = inicio To final [Step incremento] Instrucciones Next [contador]

2.2.6 For Each…Next Repite un grupo de instrucciones para cada elemento de una matriz o conjunto. For Each elemento In grupo instrucciones [Exit For] [instrucciones] Next elemento Ejemplo: Hacer un programa asignado a un botón de comando que renombre todas las hojas del libro de trabajo de acuerdo a lo que introduzca el usuario. Añadir un botón de comando y cambiarle las propiedades:

35

Luego añadir el siguiente código fuente: Private Sub CommandButton1_Click() Dim nuevo_nombre As String Dim hoja As Worksheet 'Para cada hoja del conjunto worksheets For Each hoja In Worksheets nuevo_nombre = InputBox("Nombre de la Hoja : " & hoja.Name, "Nombrar Hojas") If nuevo_nombre "" Then hoja.Name = nuevo_nombre End If Next End Sub Al ejecutar el programa aparecerá lo siguiente:

36

2.3 PROCEDIMIENTOS Y FUNCIONES.2.3.1 Procedimientos.- Los procedimientos son bloques de instrucciones de código que sirven para llevar a cabo alguna tarea específica. Los procedimientos tienen la siguiente estructura: Sub Nombre_del_Procedimiento Conjunto de Instrucciones End Sub Cuando se necesita ejecutar una misma rutina varias veces, la mejor forma de proceder es colocar el código de esa rutina en un procedimiento general que será invocado desde otros procedimientos conducidos por sucesos. Los procedimientos no devuelven ningún valor, solo ejecutan algo. Para crear un procedimiento general, se debe abrir la ventana de código correspondiente al formulario o al módulo donde se quiere definir el procedimiento, y a continuación se ejecuta Agregar procedimiento del menú Herramientas.

37

En este cuadro se pone el nombre del procedimiento y se indica si es un Procedimiento o una Función.

2.3.2 Funciones .- Las funciones son un grupo de sentencias que devuelven un valor, y el procedimiento que la llama debe hacer algo con ese valor, como almacenarlo en una variable. Se llaman directamente por su nombre. Las funciones tienen la siguiente estructura: Public Function Nombre_Función(par1As Tipo par2 As Tipo,…,parN As Tipo) As Tipo Líneas de código End Function

También puede ser: Private Function Nombre_Función(par1As Tipo par2 As Tipo,..,parN As Tipo) As Tipo Líneas de código End Function Para agregar la función se procede de manera similar a los procedimientos, excepto que se debe marcar la casilla de Función.

2.3.3 Definir una función y asignarla a una celda.- Se puede asignar a celdas, funciones hechas por el usuario, de la misma manera en la que se asigna una función propia de Excel. Para esto se debe añadir la función a nivel de módulo y ahí asignar el código correspondiente. Luego en Excel se debe proceder de la manera tradicional y en la celda elegida poner: =Nombe_Función(par1;par2;…,parN) y luego Enter.

38

Ejemplo: Hacer un programa que asigne a una celda el determinante de una matriz de tamaño n*n y que se encuentra en la fila f y columna c. a) En Excel se entra al Editor de Visual Basic presionando Alt+F11. b) En el Editor de Visual Basic se presiona Insertar y luego Módulo.

c) Luego se presiona otra vez Insertar y luego Procedimiento.

d) En la ventana que aparece escribimos el nombre de la función, deter. Y marcamos la casilla Función.

e) Después de presionar Aceptar , aparece lo siguiente: Public Function deter() End Function f) Ahí se debe añadir el siguiente código: Public Function deter(n As Integer, f As Integer, c As Integer) As Single Dim mirango As Range Set mirango = Worksheets("Hoja1").Range(Cells(f, c), Cells(f + n - 1, c + n - 1)) deter = Application.WorksheetFunction.MDeterm(mirango) End Function

39

g) Se vuelve a la hoja Excel y ahí se asigna la función a cualquier celda, por ejemplo a la ( 7, 5 ) .El primer argumento que se pasa a la función es el tamaño de la matriz 3, el segundo es la fila donde está el primer elemento de la matriz 3, y el tercer argumento es la columna 2. Los argumentos se separan por ,

h) Después de presionar ENTER, el resultado es el siguiente:

resultado

La anterior función se incorpora al asistente para funciones, podemos buscarla en funciones definidas por el usuario.

40

2.4 FUNCIONES DE ENTRADA Y SALIDA.2.4.1 Función InputBox.- Muestra un mensaje en un cuadro de diálogo, espera que el usuario escriba un texto o haga clic en un botón y devuelve un tipo String con el contenido del cuadro de texto. Sintaxis InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context]) Solo es obligatorio poner prompt, el resto es opcional. La sintaxis de la función InputBox consta de estos argumentos con nombre: Parte

Descripción

prompt

Requerido. Expresión de cadena que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de prompt es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si prompt consta de más de una línea, puede separarlos utilizando un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o una combinación de los caracteres de retorno de carro-avance de línea (Chr(13) y Chr(10)) entre cada línea y la siguiente.

title

Opcional. Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite title, en la barra de título se coloca el nombre de la aplicación.

default

Opcional. Expresión de cadena que se muestra en el cuadro de texto como respuesta predeterminada cuando no se suministra una cadena. Si omite default, se muestra el cuadro de texto vacío.

xpos

Opcional. Expresión numérica que especifica, en twips, la distancia en sentido horizontal entre el borde izquierdo del cuadro de diálogo y el borde izquierdo de la pantalla. Si se omite xpos, el cuadro de diálogo se centra horizontalmente.

ypos

Opcional. Expresión numérica que especifica, en twips, la distancia en sentido vertical entre el borde superior del cuadro de diálogo y el borde superior de la pantalla. Si se omite ypos, el cuadro de diálogo se coloca a aproximadamente un tercio de la altura de la pantalla, desde el borde superior de la misma.

helpfile

Opcional. Expresión de cadena que identifica el archivo de

41 Ayuda que se utilizará para proporcionar ayuda interactiva para el cuadro de diálogo. Si se especifica helpfile, también deberá especificarse context. context

Opcional. Expresión numérica que es el número de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se especifica context, también deberá especificarse helpfile.

Comentarios Cuando se especifica tanto helpfile como context, el usuario puede presionar F1 (Windows) o Ayuda (Macintosh) para ver el tema de Ayuda correspondiente a context. Algunas aplicaciones host, por ejemplo, Microsoft Excel, también agregar automáticamente un botón Ayuda al cuadro de diálogo. Si el usuario hace clic en Aceptar o presiona Entrar , la función InputBox devuelve lo que haya en el cuadro de texto. Si el usuario hace clic en Cancelar, la función devuelve una cadena de caracteres de longitud cero (""). Nota Si desea especificar más que el primer argumento con nombre, debe utilizar InputBox en una expresión. Si desea omitir algunos argumentos de posición, debe incluir el delimitador de coma correspondiente.

Ejemplo: Hacer un programa que pida un número y lo almacene en una variable. Private Sub CommandButton1_Click() Dim n As Single n = Val(InputBox("Introduzca el número", "Prueba de InputBox")) Cells(1, 1) = n End Sub El resultado de ejecutar este programa es:

42 2.4.2 Función MsgBox.- Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un tipo Integer correspondiente al botón elegido por el usuario. Sintaxis MsgBox(prompt[, buttons][, title][, helpfile, context]) Solo es obligatorio poner prompt, el resto es opcional. La sintaxis de la función MsgBox consta de estos argumentos con nombre: Parte

Descripción

prompt

Requerido. Expresión de cadena que representa el prompt en el cuadro de diálogo. La longitud máxima de prompt es de aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados. Si prompt consta de más de una línea, puede separarlos utilizando un carácter de retorno de carro (Chr(13)) o un carácter de avance de línea (Chr(10)), o una combinación de caracteres de retorno de carro – avance de línea (Chr(13) y Chr(10)) entre cada línea y la siguiente.

buttons

Opcional. Expresión numérica que corresponde a la suma de los valores que especifican el número y el tipo de los botones que se pretenden mostrar, el estilo de icono que se va a utilizar, la identidad del botón predeterminado y la modalidad del cuadro de mensajes. Si se omite este argumento, el valor predeterminado para buttons es 0.

title

Opcional. Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si se omite title, en la barra de título se coloca el nombre de la aplicación.

helpfile

Opcional. Expresión de cadena que identifica el archivo de Ayuda que se utiliza para proporcionar ayuda interactiva en el cuadro de diálogo. Si se especifica helpfile, también se debe especificar context.

context

Opcional. Expresión numérica que es igual al número de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se especifica context, también se debe especificar helpfile.

Valores El argumento buttons tiene estos valores:

43

Constante

Valor

Descripción

VbOKOnly

0

Muestra solamente el botón Aceptar.

VbOKCancel

1

Muestra los botones Aceptar y Cancelar.

VbAbortRetryIgnore

2

Muestra los botones Anular, Reintentar e Ignorar.

VbYesNoCancel

3

Muestra los botones Sí, No y Cancelar.

VbYesNo

4

Muestra los botones Sí y No.

VbRetryCancel

5

Muestra los botones Reintentar y Cancelar.

VbCritical

16

Muestra el icono de mensaje crítico.

VbQuestion

32

Muestra el icono de pregunta de advertencia.

VbExclamation

48

Muestra el icono de mensaje de advertencia.

VbInformation

64

Muestra el icono de mensaje de información.

VbDefaultButton1

0

El primer botón es el predeterminado.

VbDefaultButton2

256

El segundo botón es el predeterminado.

VbDefaultButton3

512

El tercer botón es el predeterminado.

VbDefaultButton4

768

El cuarto botón es el predeterminado.

VbApplicationModal

0

Aplicación modal; el usuario debe responder al cuadro de mensajes antes de poder seguir trabajando en la aplicación actual.

VbSystemModal

4096

Sistema modal; se suspenden todas las aplicaciones hasta que el usuario responda al cuadro de mensajes.

VbMsgBoxHelpButton

16384

Agrega el botón Ayuda al cuadro de mensaje.

VbMsgBoxSetForeground 65536

Especifica la ventana del cuadro de mensaje como la ventana de primer plano.

VbMsgBoxRight

El texto se alínea a la derecha.

524288

44 VbMsgBoxRtlReading

1048576

Especifica que el texto debe aparecer para ser leído de derecha a izquierda en sistemas hebreo y árabe.

El primer grupo de valores (0 a 5) describe el número y el tipo de los botones mostrados en el cuadro de diálogo; el segundo grupo (16, 32, 48, 64) describe el estilo del icono, el tercer grupo (0, 256, 512) determina el botón predeterminado y el cuarto grupo (0, 4096) determina la modalidad del cuadro de mensajes. Cuando se suman números para obtener el valor final del argumento buttons, se utiliza solamente un número de cada grupo. Nota Estas constantes las especifica Visual Basic for Applications. Por tanto, el nombre de las mismas puede utilizarse en cualquier lugar del código en vez de sus valores reales. Valores devueltos Constante

Valor

Descripción

vbOK

1

Aceptar

vbCancel

2

Cancelar

vbAbort

3

Anular

vbRetry

4

Reintentar

vbIgnore

5

Ignorar

vbYes

6



vbNo

7

No

Comentarios Cuando se proporcionan tanto helpfile como context, el usuario puede presionar F1 (Windows) o Ayuda (Macintosh) para ver el tema de Ayuda correspondiente al context. Algunas aplicaciones host, por ejemplo Microsoft Excel, también agregan automáticamente un botón Ayuda al cuadro de diálogo. Si el cuadro de diálogo cuenta con un botón Cancelar, presionar la tecla ESC tendrá el mismo efecto que hacer clic en este botón. Si el cuadro de diálogo contiene un botón Ayuda, se suministra ayuda interactiva para ese cuadro de diálogo. Sin embargo, no se devuelve valor alguno hasta que se hace clic en uno de estos botones.

45 Nota Si desea especificar más que el primer argumento con nombre, debe utilizar MsgBox en una expresión. Si desea omitir algún argumento de posición, debe incluir el delimitador de coma correspondiente. Ejemplo: Hacer un programa que muestre un mensaje de error y otro de advertencia. Private Sub CommandButton1_Click() Dim a As Integer a = MsgBox("Error", vbCritical, "Prueba de MsgBox") End Sub El resultado es el siguiente:

Además se tiene como salida el sonido característico de Windows para error Private Sub CommandButton1_Click() Dim a As Integer a = MsgBox("Error", vbExclamation, "Prueba de MsgBox") End Sub El resultado es el siguiente:

Además se tiene como salida el sonido característico de Windows para advertencia.

46

CAPÍTULO III INTERRELACIÓN DE EXCEL CON VISUAL STUDIO 3.1 INTRODUCCIÓN.Hasta aquí solamente se utilizó Excel para elaborar todos los programas, y el Editor de Visual Basic que se usó era el que viene incorporado con Excel. Pero si deseamos elaborar aplicaciones muy complejas, tendremos que utilizar el lenguaje Visual Basic por separado y luego conectarlo con una hoja Excel. Para esta parte es necesario tener instalado, en la computadora donde se trabaja, el lenguaje Visual Basic, que es parte del paquete Visual Studio. El entorno de Visual Basic es similar, sino igual, al Editor de Visual Basic que viene incorporado con Excel. Por tanto todo lo aprendido hasta ahora nos sirve para programar en este nuevo entorno.

3.2 APERTURA Y CERRADO DE EXCEL DESDE VISUAL BASIC.Este es el aspecto primordial que se debe aprender sobre la interrelación entre estas dos aplicaciones. Tanto el archivo de la hoja Excel que se quiera abrir, como el programa que se haya hecho en Visual Studio, deben estar en la misma carpeta.

Ejemplo: Hacer un programa en Visual Basic que permita abrir y cerrar una hoja Excel. a) Abrir el entorno de programación Visual Studio. Seleccionar File, luego New Project, luego Windows Forms Application.

47

b) Se debe seleccionar Project - Add Reference – CON - MicrosoftExcel 14.0 Object Library.

48

c) Añadir al formulario dos botones de comando y cambiarles el nombre llamándolos Abrir y Cerrar, también cambiar la propiedad Text de cada botón y llamarlos Abrir y Cerrar respectivamente.

49 d) Hacer doble clic sobre el primer botón y añadir el siguiente código: Private Sub abrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles abrir.Click obj_Excel = CreateObject("Excel.Application") With obj_Excel .Workbooks.Open(ruta) .Visible = True End With End Sub

e) Hacer doble clic sobre el segundo botón y añadir el siguiente código Private Sub cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cerrar.Click With obj_Excel .Quit() End With End Sub

f) Debe añadirse como cabecera del código. En la línea General, lo siguiente: Imports excel = Microsoft.Office.Interop.Excel

De manera que el código completo sea: Imports excel = Microsoft.Office.Interop.Excel Public Class Form1 Public obj_Excel As excel.Application Public ruta As String = Application.StartupPath & "\maria.xlsx" Private Sub abrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles abrir.Click obj_Excel = CreateObject("Excel.Application") With obj_Excel .Workbooks.Open(ruta) .Visible = True End With End Sub Private Sub cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cerrar.Click With obj_Excel .Quit() End With End Sub End Class

50

g) Guardar todo el proyecto en una carpeta, en este caso pruebaExcel .

h) Crear la hoja Excel que deseamos abrir y guardarla en la carpeta que este dentro de : pruebaExcel – pruebaExcel – bin - Debug . En este caso el archivo Excel es maria.xlsx

51

i) Ejecutar el programa, presionando:

Presionar ejecutar j) En el formulario que aparece hacer clic en el botón Abrir.

52

3.3 APROVECHAMIENTO DE LA ENTRADA DE FÓRMULAS DE EXCEL PARA PROGRAMAS EN VISUAL BASIC.Las funciones de entrada de la mayoría de los lenguajes de programación no permiten introducir, directamente desde el teclado, fórmulas de ninguna clase. Para introducir una nueva fórmula es necesario editar el programa y ahí cambiar la misma, o crear un código muy extenso que posibilite la introducción de fórmulas pero muy simples. Como sabemos Excel permite introducir fórmulas y asociarlas a las celdas. Esta propiedad puede ser muy bien aprovechada para crear programas complejos. Ejemplo: Hacer un programa en Visual Basic que dibuje graficas de funciones introducidas en Excel. a) En Visual Basic se ponen en el formulario tres botones de comando (CommandButton), un cuadro de dibujo (PictureBox), siete cuadros de texto (TextBox), siete etiquetas(Label) de la siguiente forma:

b) Asociamos el siguiente código a algunos de esos controles. Option Explicit Dim hojaexcel As Object Private Sub abrir_Click() Set hojaexcel = CreateObject("Excel.Application") hojaexcel.Workbooks.Open FileName:=App.Path + "\calculo.xls" hojaexcel.Visible = True hojaexcel.Cells(1, 1) = "X" hojaexcel.Cells(1, 2) = "f(x)" hojaexcel.Cells(2, 2).Select

53 End Sub Private Sub cerrar_Click() hojaexcel.Workbooks.Close End Sub Private Sub desde_KeyPress(k As Integer) If k = 13 Then hasta.SetFocus End Sub Private Sub hasta_KeyPress(k As Integer) If k = 13 Then cada.SetFocus End Sub Private Sub cada_KeyPress(k As Integer) If k = 13 Then porX.SetFocus End Sub Private Sub porX_KeyPress(k As Integer) If k = 13 Then porY.SetFocus End Sub Private Sub porY_KeyPress(k As Integer) If k = 13 Then grosor.SetFocus End Sub Private Sub grosor_KeyPress(k As Integer) If k = 13 Then color.SetFocus End Sub Private Sub color_KeyPress(k As Integer) If k = 13 Then dibujo.SetFocus End Sub Private Sub dibujo_Click() Dim CX, CY As Single Dim i, des, cad, has, pX, pY, fx, colo, groso As Single Set hojaexcel = CreateObject("Excel.Application") hojaexcel.Workbooks.Close hojaexcel.Workbooks.Open FileName:=App.Path + "\calculo.xls" With dibu .DrawWidth = 1 'Pone el ancho de línea en tamaño 1 .ScaleMode = 1 'El modo de escala es 1 CX = .ScaleWidth / 2 CY = .ScaleHeight / 2 End With For i = 1 To 20000 dibu.PSet (CX, i) 'dibuja la linea del eje vertical dibu.PSet (i, CY) 'dibuja la línea del eje horizontal Next i

54

des = Val(desde.Text) has = Val(hasta.Text) cad = Val(cada.Text) pX = Val(porX.Text) pY = Val(porY.Text) colo = Val(color.Text) groso = Val(grosor.Text) If colo > 15 Then colo = 15 End If dibu.DrawWidth = groso For i = des To has Step cad hojaexcel.Cells(2, 1) = i fx = hojaexcel.Cells(2, 2) dibu.PSet (CX + (i * pX), CY - fx * pY), QBColor(colo) Next i hojaexcel.Workbooks.Close End Sub c) Guardamos en una carpeta. d) En la misma carpeta guardamos la hoja de calculo que nos servirá para introducir las formulas. Y la guardamos con el nombre que se le dio en código de Visual Basic, en este caso calculo. e) Para ejecutar se presiona primero el botón ABRIR EXCEL, y ahí se asigna la función a la celda (2,2) tomando como parámetro la celda (2,1).

Función

Parámetro En el grafico se puede ver la función f(x) = x^2 f) Luego se llenan los otros campos y se presiona Dibujar, el resultado es el siguiente:

55

Explicación: For i = des To has Step cad hojaexcel.Cells(2, 1) = i fx = hojaexcel.Cells(2, 2) dibu.PSet (CX + (i * pX), CY - fx * pY), QBColor(colo) Next i Cada que avanza el valor de i se va poniendo ese valor en las celda (2,1) y se recoge su correspondiente valor de la celda (2,2) y se lo almacena en fx, con esos valores se grafica mediante la instrucción PSet.

Ejemplo: Hacer un programa que dibuje líneas, dándole como parámetros de entrada las coordenadas de los puntos inicial y final de las líneas y la interconexión de nudos. a) En Visual Basic ponemos cuatro botones de comando(CommandButton) y un cuadro de dibujo(PictureBox). Al cuadro de dibujo se le asigna el nombre de dibujonormal, en las propiedad Name.

b) Asociamos el siguiente código a esos controles.

56

Option Explicit Dim hojaexcel As Object Private Sub abrir_Click() Set hojaexcel = CreateObject("Excel.Application") hojaexcel.Workbooks.Open FileName:=App.Path + "\datos.XLS" hojaexcel.Visible = True End Sub Private Sub cerrar_Click() hojaexcel.Workbooks.Close End Sub Private Sub dibujar_Click() Dim X1, X2, Y1, Y2, XC, YC, XP1, XP2, YP1, YP2, aux1 As Single Dim ne, nn, aux2, i, j As Integer Dim COR(60, 6) As Single Set hojaexcel = CreateObject("Excel.Application") hojaexcel.Workbooks.Open FileName:=App.Path + "\datos.XLS" With dibujonormal .DrawWidth = 1 .Cls .ScaleMode = 3 XC = .ScaleWidth * 0.08 YC = .ScaleHeight - .ScaleHeight * 0.08 X2 = .ScaleWidth Y2 = .ScaleHeight dibujonormal.Line (XC, 0)-(XC, Y2), RGB(0, 255, 0) 'linea vertical dibujonormal.Line (0, YC)-(X2, YC), RGB(0, 255, 0) 'linea horizontal End With dibujonormal.DrawWidth = 2 ne = hojaexcel.Cells(2, 8) nn = hojaexcel.Cells(2, 7) For i = 1 To ne 'Calcula xi,yi,xj,yj COR(i, 1) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 5), 2) COR(i, 2) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 5), 3) COR(i, 3) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 6), 2) COR(i, 4) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 6), 3) Next aux1 = 0 aux2 = 0

'Calcula el valor mayor de las coordenadas

57 For i = 1 To nn For j = 1 To 2 If hojaexcel.Cells(i + 1, 1 + j) >= aux1 Then aux1 = hojaexcel.Cells(i + 1, j + 1) aux2 = j End If Next Next For i = 1 To ne 'Dibuja las lineas X1 = COR(i, 1) Y1 = COR(i, 2) X2 = COR(i, 3) Y2 = COR(i, 4) Select Case aux2 Case 1 If X1 = aux1 Then X1 = 0.8 * 515 Else X1 = Abs((X1 / aux1)) * 0.8 * 515 End If Y1 = 412 * Y1 / aux1 If X2 = aux1 Then X2 = 0.8 * 515 Else X2 = Abs((X2 / aux1)) * 0.8 * 515 End If Y2 = 412 * Y2 / aux1

Case 2 If Y1 = aux1 Then Y1 = 0.8 * 392 Else Y1 = Abs((Y1 / aux1)) * 0.8 * 392 End If X1 = 314 * X1 / aux1 If Y2 = aux1 Then Y2 = 0.8 * 392 Else Y2 = Abs((Y2 / aux1)) * 0.8 * 392 End If

58

X2 = 314 * X2 / aux1 End Select dibujonormal.Line (XC + X1, YC - Y1)-(XC + X2, YC - Y2), RGB(0, 0, 255) Next hojaexcel.Workbooks.Close End Sub Private Sub Form_Load() Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 End Sub Private Sub salir_Click() End End Sub c) Guardamos en alguna carpeta, y en la misma creamos la hoja de cálculo que recibirá los datos, esta hoja la guardamos con el nombre de datos.

d) Luego se ejecuta el programa presionando Abrir Excel y ahí dando los datos, luego guardamos esa hoja y volvemos al menú del programa y presionamos Cerrar Excel, luego presionamos DIBUJAR, el resultado es el siguiente:

59

e) Luego se presiona SALIR. Explicación.- El programa toma los datos de la hoja Excel con el conjunto de instrucciones: For i = 1 To ne 'Calcula xi,yi,xj,yj COR(i, 1) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 5), 2) COR(i, 2) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 5), 3) COR(i, 3) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 6), 2) COR(i, 4) = hojaexcel.Cells(1 + hojaexcel.Cells(1 + i, 6), 3) Next Luego calcula el valor mayor de las coordenadas, mediante el algoritmo: aux1 = 0 'Calcula el valor mayor de las coordenadas aux2 = 0 For i = 1 To nn For j = 1 To 2 If hojaexcel.Cells(i + 1, 1 + j) >= aux1 Then aux1 = hojaexcel.Cells(i + 1, j + 1) aux2 = j End If Next Next El valor mayor se almacena en aux1 y aux2 se indica si ese valor mayor está en x o en y dándole un valor de 1 o 2 respectivamente. Después de ajustar la escala de manera adecuada, dibuja las líneas con el siguiente código: dibujonormal.Line (XC + X1, YC - Y1)-(XC + X2, YC - Y2), RGB(0, 0, 255)

60

61

CAPITULO IV APLICACIONES NUMERICAS 4.1 INTRODUCCIÓN.La hoja de cálculo Excel está orientada esencialmente al cálculo numérico y los programas que se hagan con ella deben tratar de aprovechar esas funciones y habilidades. Muchas de estas funciones no se muestran directamente, sino que se debe cargarlas. Y naturalmente, mediante programación se puede abarcar muchísimo mas.

4.2 LA FUNCIÓN SOLVER.Esta función no se encuentra en la hoja de cálculo en primera instancia y es necesario cargarla de la siguiente manera: 1. Haga clic en la pestaña Archivo, elija Opciones y, a continuación, haga clic en la categoría Complementos. 2. En el cuadro Administrar, haga clic en Complementos de Excel y, a continuación, en Ir. 3. En el cuadro Complementos disponibles, active la casilla de verificación Complemento Solver y, a continuación, haga clic en Aceptar.

62

Aparece la siguiente ventana, en la que se debe marcar la casilla de SOLVER.

Luego ya aparece la ficha Solver dentro de Datos

63

Ejemplo 1: Resolver el siguiente sistema de ecuaciones no lineales. u(x ,y)= x^2 +xy-10 = 0 v(x ,y)= y + 3xy^2-57 = 0 Solución: Dos celdas (B1 y B2) pueden crearse para los valores iniciales x , y .Los valores de la función u(x ,y) y v(x ,y) , pueden entrar en otras celdas (B3 y B4).

La celda B6 indica que tan cercanas de cero están ambas funciones, se eleva al cuadrado para evitar restas con números negativos. Luego se elige la opción Solver en la ficha Datos.

64

Luego se presiona Resolver y aparece la ventana,

65

La solución es la siguiente:

x=2, y=3 Ejemplo 2: Encontrar una raíz de f(x) = x –cos x Para solucionar este problema se introduce un valor de x en una celda y se destina otra celda para f(x).

Luego en el menú de Datos se selecciona Solver.

66

Se presiona Resolver

Raíz

4.3 PROGRAMAS PARA CALCULO NUMERICO.Ejemplo: Hacer un programa que encuentre raíces por el método de Newton. Primero se crean los siguientes botones en una hoja Excel.

67 Y se asigna los siguientes códigos a cada uno de ellos. Private Sub Borrar_Click() Range("A7:K500").ClearContents End Sub Private Sub Calcular_Click() Dim i, n As Integer Dim x0, Y, Y1, x, h As Single x0 = Cells(5, 3) n = Cells(5, 4) Range("A7:H7").Font.Bold = True Range("A7:H7").Font.Color = RGB(0, 0, 255) Cells(7, 1) = "Nº Iter" Cells(7, 2) = "x" Cells(7, 3) = "f ' (x)" Cells(7, 4) = "f(x)" x = x0 h = 0.000001 For i = 0 To n Cells(8 + i, 1) = i Cells(5, 1) = x Y = Cells(5, 2) Cells(5, 1) = x + h Y1 = Cells(5, 2) Cells(5, 1) = x Y1 = (Y1 - Cells(5, 2)) / h Cells(8 + i, 2) = x x = x - Y / Y1 Cells(8 + i, 3) = Y1 Cells(8 + i, 4) = Y Next Cells(5, 6) = x End Sub Private Sub Tabla_Click() Dim i, n, cont As Integer Dim a, c As Single a = Cells(5, 8) c = Cells(5, 9) n = Round(c - a, 0) Range("I7:J7").Font.Bold = True Range("I7:J7").Font.Color = RGB(0, 0, 255) Cells(7, 8) = "x" Cells(7, 9) = "y(x)" cont = 0 For i = a To c cont = cont + 1

68 Cells(7 + cont, 8) = i Cells(5, 1) = i Cells(7 + cont, 9) = Cells(5, 2) Next End Sub Si se quiere hallar la solución de la ecuación x^3 -155 = 0 se ponen los datos y se obtiene el siguiente resultado.

69

CAPITULO V USO DEL GRABADOR DE MACROS 5.1 DESCRIPCIÓN.El grabador de Macros, es una herramienta que permite programar tareas de manera automática, o sea programar sin saber programar. Podemos aprender a programar viendo como el grabador de Macros genera el código en Visual Basic. El grabador de Macros tiene los siguientes iconos: empezar a grabar se presiona la flecha y para detener el punto rojo.

. Para

5.2 APRENDIENDO A PROGRAMAR CON EL GRABADOR DE MACROS.Supongamos que no sabemos cuáles son las instrucciones para centrar elementos en una celda, para ponerlos en negrilla y para ponerlos en color rojo. Para ello utilizamos el grabador de Macros y realizamos esas tareas de manera manual, paso a paso y luego vemos cual es el código correspondiente a cada uno de esos pasos. a) Presionamos el icono

y aparece la siguiente ventana.

b) Llenamos los campos con el nombre de la Macro, el método abreviado y la descripción. Presionamos aceptar, y aparece el siguiente icono botón cuadrado es para detener la grabación.

, el

70 c) Todo lo que hagamos a partir de ahora será grabado por la Macro, por lo tanto es importante no cometer errores, ya que estos también serian grabados.

d) Seleccionamos un grupo de celdas , luego

luego

y presionamos

.

e) Presionamos el botón cuadrado para detener la grabación. f) Luego para ver el código generado presionamos Herramientas, Macro,

g) Resaltamos el nombre de la macro, en este caso prueba y presionamos Modificar. Aparece todo el código generado. Sub prueba() ' ' prueba Macro ' Macro grabada el 10/7/2006 por DANTE ' ' Acceso directo: CTRL+d ' Range("E6:F7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False

71 .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Font.Bold = True Selection.Font.ColorIndex = 3 End Sub Tenemos que tener en cuenta que muchas de las líneas de código no son necesaria para nuestro propósito, ya que solo queríamos centrar, poner en negrilla y poner en color rojo. Ese código corresponde a las líneas: Range("E6:F7").Select .HorizontalAlignment = xlCenter

Selection.Font.Bold = True Selection.Font.ColorIndex = 3 El resto es código innecesario para nuestro propósito.

Ejemplo: Usar el grabador de Macros para aprender sobre el trazado de una grafica de tipo dispersión, aplicada a una tabla de datos. La tabla es la siguiente: x -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6

f(x) 100 81 64 49 36 25 16 9 4 1 0 1 4 9 16 25 36

72 7 8 9 10

49 64 81 100

a) Abrimos el grabador de Macros. b) Seleccionamos los datos y presionamos , que es el asistente para gráficos. c) Elegimos dispersión con líneas suavizadas, sin marcadores

d) Presionamos Siguiente, Siguiente otra vez.

d) Rellenamos los rotulo y presionamos Siguiente. e) Luego Finalizar. f) Y por ultimo detenemos la grabación.

73 g) De la misma manera , que en el primer ejemplo, vemos el código generado . Sub dibujo() ' ' dibujo Macro ' Macro grabada el 10/7/2006 por Dante ' ' Acceso directo: CTRL+s ' Range("A2:B22").Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A2:B22"), PlotBy:= _ xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "Prueba" .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y=x^2" End With End Sub Si deseamos, todo ese código podemos trasladarlo a un botón de comando que ejecute esa acción cuando lo presionemos. Es importante practicar modificando pequeños aspectos y viendo como se modifica el código. El tipo de grafico se encuentra en la línea: ActiveChart.ChartType = xlXYScatterSmoothNoMarkers Modificando esta línea podemos modificar el tipo de grafico.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF