You are on page 1of 74

VISUAL BASIC PARA

APLICACIONES EXCEL

Dante Antonio Pinto Jeria


Sucre Bolivia
2013

CAPTULO I
INTRODUCCIN A LA PROGRAMACIN
1.1PASOS INICIALES.Para comenzar se debe habilitar, si es que no lo est, la ficha Programador. Para
ello:
1. Haga clic en la pestaa Archivo, elija Opciones y, a continuacin, haga clic
en la categora Personalizar cinta de opciones.
2. En Personalizar cinta de opciones, en la lista Fichas principales, haga
clic en Programador y, a continuacin, haga clic en Aceptar.

Al presionar la ficha Programador aparece:

2
habilita y deshabilita (segn el estado anterior) el modo de diseo.

Una vez que se habilita la ficha Programador, ya no es necesario volver a


realizar este paso en una sesin posterior.
Luego se debe habilitar todas las macros, de la siguiente manera:
1. Haga clic en la pestaa Archivo, elija Opciones y, a continuacin, haga
clic en la categora Centro de Confianza, luego Configuracin 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


sesin.

1.2 REFERENCIAS A CELDAS.Se puede hacer referencias a celdas mediante los objetos Cells y Range.
As:
Cells(nmero de fila , nmero 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, dndole 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 tamao nmero de la celda
Cells(fila, columna).Font.Color = RGB(nmero1,nmero2,nmero3)
Da color al contenido de la celda. El cdigo RGB se refiere a Red Green Blue y
son nmero 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 = nmero
Fija el tamao de la fuente, donde nmero es el tamao elegido.
Cells(fila, columna).NumberFormat = 0.nmero_de_ceros
Fija el nmero de decimales del contenido de la celda.
Cells(fila, columna).Interior.ColorIndex = nmero
Rellena el interior de la celda con el color indicado por nmero.
Cells(fila, columna).Interior.color = RGB(nmero, nmero, nmero)
Cells(fila, columna).Select
Selecciona la celda indicada por fila y columna.
ActiveCell.ColorIndex = nmero
Rellena el interior de la celda activa con el color indicado por nmero.

4
Cells(fila, columna).RowHeight = nmero
Cells(fila, columna).ColumnWidth = nmero
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 nmero de color de la primer celda.
El primer paso es abrir el Editor de Visual Basic presionando el icono
. Despus
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.

Despus de darle el nombre de prueba, (o cualquier otro) presionamos Crear.


Aparece lo siguiente:
Sub prueba()
End Sub
Y el cdigo 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 mtodo abreviado Alt + F8. En la ventana
que aparece presionamos Opciones.
Aqu se debe asignar un mtodo 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.

Explicacin del cdigo:


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 depuracin 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 Botn de Comando ( Command Button) .Este es uno de los controles que ms utilizaremos en este texto. Es un botn, que
al presionarlo ejecuta algn tipo de accin 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 posicin que se desee y
tambin se puede modificar, con el ratn, el tamao que tiene.
Inicialmente el botn 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 Botn de Comando, se presiona el icono de propiedades
, que se encuentra en la barra de controles, o tambin haciendo clic con el botn
derecho del ratn y presionando propiedades. Aparece la ventana de
propiedades

Aqu podemos cambiar el nombre (Name), el color de fondo (Back Color), la


leyenda del botn (Caption), el color de la leyenda (ForeColor), etc.
Posteriormente, estando en modo de diseo, se hace doble clic en el botn de
comando y con eso se entra al entorno de programacin, en el que se debe aadir
el cdigo correspondiente.
Ejemplo1: Hacer un programa que permita calcular los factores primos de un
nmero entero.
Se selecciona el control botn de comando y se procede como se indica lneas
arriba, cambiando el color de fondo a rojo, las letras a amarillo y la leyenda que
diga CALCULAR. Estando en modo de diseo el botn de comando tiene la forma
, est rodeado de puntos para cambiar su dimensin. Estando
as hacemos doble clic en el botn y se habilita el entorno de programacin, en el
que debemos aadir el algoritmo que descompone un nmero en factores primos.
El algoritmo es el siguiente:

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 cdigo 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 nmeros enteros,
Introduzca el nmero))
Cells(2, 1) = n
con = 0
d=n
Do
d=d1
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 cdigo, se vuelve a Excel presionando su icono en la
esquina superior izquierda y se sale del modo de diseo haciendo clic en el icono
.
El botn de comando deja de estar rodeado de puntos de dimensin y pasa al
estado de ejecucin, luego debemos hacer clic en l y el programa se ejecuta
pidindonos un nmero, del cual encuentra sus factores primos y los va poniendo
en las celdas de la primera fila
Explicacin del cdigo.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 nmeros enteros,
Introduzca el numero)): Asigna el valor introducido en el cuadro de entrada,
convirtiendo ese valor a un valor numrico.
Cells(2, 1) = n: Asigna el valor de n a la celda de la segunda fila y primer
columna.

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 continuacin 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
lnea, adems le aada un color de fondo y ponga el formato de letra en tipo Arial
nmero 20.
A un botn de comando le aadimos el siguiente cdigo:
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

Despus de presionar el botn bordes resulta:

Ejemplo3: Hacer un programa que utilice la propiedad offset para rellenar celdas
de un color determinado.
En un botn de comando se introduce el siguiente cdigo:
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 seale una celda, esta y sus vecinas son rellenadas con un color.

12
Luego de presionar el botn de comando.

1.4.2 Control Cajn 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 pondrn los das 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 botn derecho del ratn se
selecciona el campo Propiedades.

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

14

Luego se sale del modo de diseo 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 botn 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
botn 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
nmeros 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 clculo un cuadro de lista y un botn 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 botn de comando:

Luego de hacer doble clic en el botn de comando se inserta el siguiente cdigo,


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 diseo presionando


, se puede ejecutar el
programa. Seleccionando un elemento de la lista y luego presionando el botn
SELECCIONAR.

Si los datos estaran en otra hoja se procede:


En el cuadro de propiedades del cuadro de lista, en el campo
ListFillRange: Nombre_de_la_hoja!Rango
Despus del nombre de la hoja viene el smbolo ! y luego el rango
Ejemplo3: ListFillRange: Hoja2!B3:B10

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

18

Ejemplo: Cargar un control de nmero 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 programacin, y
agregar el siguiente cdigo.

Volver a la hoja Excel y salir del modo de diseo. Al presionar el botn superior
aumenta el nmero de la celda A1 y ocurre lo contrario al presionar el botn
superior. En este caso los nmeros varan de cero a uno. Esto puede cambiarse
en los campos Max y Min del cuadro propiedades.

1.4.4 Botn de alternar (Toggle Button) .Este es un botn 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


cdigo y se aade lo siguiente:

21
Private Sub ToggleButton1_Click()
If ToggleButton1.Value = True Then
ActiveWindow.DisplayGridlines = False
Else
ActiveWindow.DisplayGridlines = True
End If
End Sub
Despus de salir del modo de diseo:

Luego de presionar el botn:

En este caso se borrar las rejillas y el botn parece hundido, o sea presionado.

22

1.4.5 Botn de Opcin (Option Button) .Este control sirve para escoger de una lista de opciones, o de una sola opcin. 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 aade el siguiente cdigo:
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

aade

una

tabla

con

los

siguientes

datos

ubicaciones:

Cuando se selecciona alguno de los botones de opcin, se realiza la accin a l


asociada.

1.4.6 Casilla de Verificacin (Check Box).Muestra una casilla de verificacin y una etiqueta para texto. Se utiliza en general
para establecer opciones. La diferencia con el control botn de opcin (option
button) es que con este control se pueden hacer mltiples 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, segn las opciones introducidas en las casillas de verificacin, 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 Itlica; de manera correspondiente a
cada una de las casillas.
Posteriormente, haciendo doble clic en cada una de las casillas de verificacin se
asigna el siguiente cdigo 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
Despus de salir del modo de diseo, al ejecutar el programa resulta lo siguiente:

27

1.5 CARGADO AUTOMTICO DE EVENTOS AL ABRIR UNA HOJA


EXCEL .Puede suceder que se desea que automticamente, al abrir la hoja Excel, se
produzca algn tipo de evento, por ejemplo dar un mensaje aclaratorio sobre el
programa o ejecutar directamente alguna accin. 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 aadir el cdigo 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 algn nombre.
g) Abrir nuevamente y se vera lo siguiente:

Tambin 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 programacin. As por ejemplo, no es necesario insertar
cdigo para invertir una matriz, ya que Excel ya tiene incorporada esta funcin,
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 funcin 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 clculo.
El cdigo base es el siguiente:
Dim mirango As Range
Set mirango = Worksheets(Hoja1).Range(Cells(1, 1), Cells(n, n))
determinante = Application.WorksheetFunction.Mdeterm(mirango)
Explicacin:
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 funcin Mdeterm.
Si se desea utilizar otro tipo de funcin, solo habr que cambiar lo que viene a
continuacin de Application.WorksheetFunction. , y podra ser cualquiera de las
funciones que tiene Excel, como se muestra a continuacin:

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 cdigo correspondiente a cada uno de ellos
como se indica a continuacin.
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

CAPTULO II
ELEMENTOS DE PROGRAMACIN
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
cmo 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

Tamao
en
bytes
Boolean Binario
2
Byte
Entero corto
1
Integer
Entero
2
Long
Entero largo
4
Single
Real
Simple 4
precisin
Double
Real doble precisin 8
Currency Nmero con punto 8
decimal fijo
String
Cadena
de 10 + 1byte/car.
caracteres
Hasta 64K
Date
Fecha
8

Variant

Object

Descripcin

Fecha/Hora,
16 bytes
nmeros
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
tambin la hora desde
0:00:00 a 23:59:59
+ 1 F/h: como Date, nmeros:
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
Estticas

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 cdigo, el
cuadro
lista
Objetos
y
seleccionando
General

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

Variables
Pblicas
Variable
disponible
ms all del
mbito de un
procedimiento,
e incluso del
de
un
formulario
o
mdulo,
se
declara en un
mdulo de la
aplicacin, en
la seccin de
declaraciones
generales,
usando
la
palabra
Public

2.1.3 Matrices
Se declaran de la siguiente manera:
Dim nombre_matriz(tamao) As tipo, declara un vector desde 0 hasta tamao.
Dim vector(14) As Integer, declara un vector de 15 elementos, con nmeros
ndice que van de 0 a 14.
Dim vector(1 To 15) As Integer, declara un vector de 15 elementos, con nmeros
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 dinmicas
A veces no se sabe de antemano el tamao que tendr una matriz en un
procedimiento, y por tanto se le da el tamao ms grande posible, con lo cual se
ocupa mucha memoria innecesariamente.
Para evitar esto se puede asignar matrices de manera dinmica, de la siguiente
forma:
a) Declarar la matriz dinmica con una lista de dimensiones vaca.
Dim Matriz()

33
b) En el lugar ,del cdigo, requerido asignar el nmero real de elementos con
la instruccin ReDim.
ReDim Matriz(x+1)
2.1.5 Declaracin Explcita
Para forzar a que siempre se declaren variables, se debe aadir en la seccin
Declaraciones del mdulo de clase, de formulario la instruccin:
Option Explicit

2.2 ESTRUCTURAS DE CONTROL .2.2.1 IfThenElse


La clusula Else es opcional.
If condicin1 Then
Bloque de instrucciones 1
Else
Bloque de instrucciones 2
End If

2.2.2 Select Case


En caso de que ningn valor de la lista de expresiones coincida con la prueba, se
ejecuta Case Else.
Select Case expresinPrueba
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 condicin es falsa no ejecuta las instrucciones ni siquiera una vez.
Do While condicin
Instrucciones
Loop

2.2.4 Do Loop While


Ejecuta las instrucciones, por lo menos una vez.
Do
Instrucciones
Loop While condicin

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 EachNext


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 botn de comando que renombre
todas las hojas del libro de trabajo de acuerdo a lo que introduzca el usuario.
Aadir un botn de comando y cambiarle las propiedades:

35

Luego aadir el siguiente cdigo 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


cdigo que sirven para llevar a cabo alguna tarea especfica. 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 cdigo de esa rutina en un procedimiento general que ser
invocado desde otros procedimientos conducidos por sucesos. Los
procedimientos no devuelven ningn valor, solo ejecutan algo.
Para crear un procedimiento general, se debe abrir la ventana de cdigo
correspondiente al formulario o al mdulo donde se quiere definir el procedimiento,
y a continuacin 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 Funcin.

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_Funcin(par1As Tipo par2 As Tipo,,parN As Tipo)
As Tipo
Lneas de cdigo
End Function

Tambin puede ser:


Private Function Nombre_Funcin(par1As Tipo par2 As Tipo,..,parN As Tipo)
As Tipo
Lneas de cdigo
End Function
Para agregar la funcin se procede de manera similar a los procedimientos,
excepto que se debe marcar la casilla de Funcin.

2.3.3 Definir una funcin 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
funcin propia de Excel. Para esto se debe aadir la funcin a nivel de mdulo y
ah asignar el cdigo correspondiente. Luego en Excel se debe proceder de la
manera
tradicional
y
en
la
celda
elegida
poner:
=Nombe_Funcin(par1;par2;,parN) y luego Enter.

38

Ejemplo: Hacer un programa que asigne a una celda el determinante de una


matriz de tamao 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 Mdulo.

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

d) En la ventana que aparece escribimos el nombre de la funcin, deter. Y


marcamos la casilla Funcin.

e) Despus de presionar Aceptar , aparece lo siguiente:


Public Function deter()
End Function
f) Ah se debe aadir el siguiente cdigo:
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 funcin a cualquier celda, por


ejemplo a la ( 7, 5 ) .El primer argumento que se pasa a la funcin es el
tamao 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) Despus de presionar ENTER, el resultado es el siguiente:

resultado

La anterior funcin 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 Funcin InputBox.- Muestra un mensaje en un cuadro de dilogo, espera
que el usuario escriba un texto o haga clic en un botn 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 funcin InputBox consta de estos argumentos con nombre:
Parte

Descripcin

prompt

Requerido. Expresin de cadena que se muestra como


mensaje en el cuadro de dilogo. La longitud mxima de
prompt es de aproximadamente 1024 caracteres, segn el
ancho de los caracteres utilizados. Si prompt consta de ms
de una lnea, puede separarlos utilizando un carcter de
retorno de carro (Chr(13)), un carcter de avance de lnea
(Chr(10)) o una combinacin de los caracteres de retorno de
carro-avance de lnea (Chr(13) y Chr(10)) entre cada lnea y la
siguiente.

title

Opcional. Expresin de cadena que se muestra en la barra de


ttulo del cuadro de dilogo. Si omite title, en la barra de ttulo
se coloca el nombre de la aplicacin.

default

Opcional. Expresin 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 vaco.

xpos

Opcional. Expresin numrica que especifica, en twips, la


distancia en sentido horizontal entre el borde izquierdo del
cuadro de dilogo y el borde izquierdo de la pantalla. Si se
omite xpos, el cuadro de dilogo se centra horizontalmente.

ypos

Opcional. Expresin numrica que especifica, en twips, la


distancia en sentido vertical entre el borde superior del cuadro
de dilogo y el borde superior de la pantalla. Si se omite ypos,
el cuadro de dilogo se coloca a aproximadamente un tercio
de la altura de la pantalla, desde el borde superior de la
misma.

helpfile

Opcional. Expresin de cadena que identifica el archivo de

41
Ayuda que se utilizar para proporcionar ayuda interactiva
para el cuadro de dilogo. Si se especifica helpfile, tambin
deber especificarse context.
context

Opcional. Expresin numrica que es el nmero de contexto


de Ayuda asignado por el autor al tema de Ayuda
correspondiente. Si se especifica context, tambin 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, tambin agregar
automticamente un botn Ayuda al cuadro de dilogo. Si el usuario hace clic en
Aceptar o presiona Entrar , la funcin InputBox devuelve lo que haya en el cuadro
de texto. Si el usuario hace clic en Cancelar, la funcin devuelve una cadena de
caracteres de longitud cero ("").
Nota Si desea especificar ms que el primer argumento con nombre, debe
utilizar InputBox en una expresin. Si desea omitir algunos argumentos de
posicin, debe incluir el delimitador de coma correspondiente.

Ejemplo: Hacer un programa que pida un nmero y lo almacene en una


variable.
Private Sub CommandButton1_Click()
Dim n As Single
n = Val(InputBox("Introduzca el nmero", "Prueba de InputBox"))
Cells(1, 1) = n
End Sub
El resultado de ejecutar este programa es:

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

Descripcin

prompt

Requerido. Expresin de cadena que representa el prompt en el


cuadro de dilogo. La longitud mxima de prompt es de
aproximadamente 1024 caracteres, segn el ancho de los caracteres
utilizados. Si prompt consta de ms de una lnea, puede separarlos
utilizando un carcter de retorno de carro (Chr(13)) o un carcter de
avance de lnea (Chr(10)), o una combinacin de caracteres de
retorno de carro avance de lnea (Chr(13) y Chr(10)) entre cada
lnea y la siguiente.

buttons

Opcional. Expresin numrica que corresponde a la suma de los


valores que especifican el nmero y el tipo de los botones que se
pretenden mostrar, el estilo de icono que se va a utilizar, la identidad
del botn predeterminado y la modalidad del cuadro de mensajes. Si
se omite este argumento, el valor predeterminado para buttons es 0.

title

Opcional. Expresin de cadena que se muestra en la barra de ttulo


del cuadro de dilogo. Si se omite title, en la barra de ttulo se coloca
el nombre de la aplicacin.

helpfile

Opcional. Expresin de cadena que identifica el archivo de Ayuda


que se utiliza para proporcionar ayuda interactiva en el cuadro de
dilogo. Si se especifica helpfile, tambin se debe especificar
context.

context

Opcional. Expresin numrica que es igual al nmero de contexto de


Ayuda asignado por el autor al tema de Ayuda correspondiente. Si se
especifica context, tambin se debe especificar helpfile.

Valores
El argumento buttons tiene estos valores:

43

Constante

Valor

Descripcin

VbOKOnly

Muestra solamente el botn Aceptar.

VbOKCancel

Muestra los botones Aceptar y


Cancelar.

VbAbortRetryIgnore

Muestra los botones Anular, Reintentar


e Ignorar.

VbYesNoCancel

Muestra los botones S, No y Cancelar.

VbYesNo

Muestra los botones S y No.

VbRetryCancel

Muestra los botones Reintentar y


Cancelar.

VbCritical

16

Muestra el icono de mensaje crtico.

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


informacin.

VbDefaultButton1

El primer botn es el predeterminado.

VbDefaultButton2

256

El segundo botn es el predeterminado.

VbDefaultButton3

512

El tercer botn es el predeterminado.

VbDefaultButton4

768

El cuarto botn es el predeterminado.

VbApplicationModal

Aplicacin modal; el usuario debe


responder al cuadro de mensajes antes
de poder seguir trabajando en la
aplicacin actual.

VbSystemModal

4096

Sistema modal; se suspenden todas las


aplicaciones hasta que el usuario
responda al cuadro de mensajes.

VbMsgBoxHelpButton

16384

Agrega el botn Ayuda al cuadro de


mensaje.

VbMsgBoxSetForeground 65536

Especifica la ventana del cuadro de


mensaje como la ventana de primer
plano.

VbMsgBoxRight

El texto se alnea a la derecha.

524288

44
VbMsgBoxRtlReading

1048576

Especifica que el texto debe aparecer


para ser ledo de derecha a izquierda en
sistemas hebreo y rabe.

El primer grupo de valores (0 a 5) describe el nmero y el tipo de los botones


mostrados en el cuadro de dilogo; el segundo grupo (16, 32, 48, 64) describe el
estilo del icono, el tercer grupo (0, 256, 512) determina el botn predeterminado y
el cuarto grupo (0, 4096) determina la modalidad del cuadro de mensajes. Cuando
se suman nmeros para obtener el valor final del argumento buttons, se utiliza
solamente un nmero 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 cdigo en vez de
sus valores reales.
Valores devueltos
Constante

Valor

Descripcin

vbOK

Aceptar

vbCancel

Cancelar

vbAbort

Anular

vbRetry

Reintentar

vbIgnore

Ignorar

vbYes

vbNo

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, tambin agregan
automticamente un botn Ayuda al cuadro de dilogo.
Si el cuadro de dilogo cuenta con un botn Cancelar, presionar la tecla ESC
tendr el mismo efecto que hacer clic en este botn. Si el cuadro de dilogo
contiene un botn Ayuda, se suministra ayuda interactiva para ese cuadro de
dilogo. Sin embargo, no se devuelve valor alguno hasta que se hace clic en uno
de estos botones.

45
Nota Si desea especificar ms que el primer argumento con nombre, debe
utilizar MsgBox en una expresin. Si desea omitir algn argumento de posicin,
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:

Adems se tiene como salida el sonido caracterstico 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:

Adems se tiene como salida el sonido caracterstico de Windows para


advertencia.

46

CAPTULO III
INTERRELACIN DE EXCEL CON VISUAL STUDIO
3.1 INTRODUCCIN.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 interrelacin 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 programacin 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) Aadir al formulario dos botones de comando y cambiarles el nombre


llamndolos Abrir y Cerrar, tambin cambiar la propiedad Text de cada
botn y llamarlos Abrir y Cerrar respectivamente.

49
d) Hacer doble clic sobre el primer botn y aadir el siguiente cdigo:
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 botn y aadir el siguiente cdigo


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 aadirse como cabecera del cdigo. En la lnea General, lo siguiente:


Imports excel = Microsoft.Office.Interop.Excel

De manera que el cdigo 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 botn Abrir.

52

3.3 APROVECHAMIENTO DE LA ENTRADA DE FRMULAS DE


EXCEL PARA PROGRAMAS EN VISUAL BASIC.Las funciones de entrada de la mayora de los lenguajes de programacin no
permiten introducir, directamente desde el teclado, frmulas de ninguna clase.
Para introducir una nueva frmula es necesario editar el programa y ah cambiar la
misma, o crear un cdigo muy extenso que posibilite la introduccin de frmulas
pero muy simples.
Como sabemos Excel permite introducir frmulas 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 cdigo 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 lnea en tamao 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 lnea 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
cdigo de Visual Basic, en este caso calculo.
e) Para ejecutar se presiona primero el botn ABRIR EXCEL, y ah se asigna
la funcin a la celda (2,2) tomando como parmetro la celda (2,1).

Funcin

Parmetro
En el grafico se puede ver la funcin f(x) = x^2
f) Luego se llenan los otros campos y se presiona Dibujar, el resultado es el
siguiente:

55

Explicacin:
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 instruccin PSet.

Ejemplo: Hacer un programa que dibuje lneas, dndole como parmetros de


entrada las coordenadas de los puntos inicial y final de las lneas y la
interconexin 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 cdigo 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 clculo 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.


Explicacin.- 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 dndole un valor de 1 o 2 respectivamente.
Despus de ajustar la escala de manera adecuada, dibuja las lneas con el
siguiente cdigo:
dibujonormal.Line (XC + X1, YC - Y1)-(XC + X2, YC - Y2), RGB(0, 0, 255)

60

61

CAPITULO IV
APLICACIONES NUMERICAS
4.1 INTRODUCCIN.La hoja de clculo Excel est orientada esencialmente al clculo numrico 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 programacin se puede abarcar muchsimo mas.

4.2 LA FUNCIN SOLVER.Esta funcin no se encuentra en la hoja de clculo en primera instancia y es


necesario cargarla de la siguiente manera:
1. Haga clic en la pestaa Archivo, elija Opciones y, a continuacin, haga
clic en la categora Complementos.
2. En el cuadro Administrar, haga clic en Complementos de Excel y, a
continuacin, en Ir.
3. En el cuadro Complementos disponibles, active la casilla de
verificacin Complemento Solver y, a continuacin, 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
Solucin:
Dos celdas (B1 y B2) pueden crearse para los valores iniciales x , y .Los valores
de la funcin u(x ,y) y v(x ,y) , pueden entrar en otras celdas (B3 y B4).

La celda B6 indica que tan cercanas de cero estn ambas funciones, se eleva al
cuadrado para evitar restas con nmeros negativos.
Luego se elige la opcin Solver en la ficha Datos.

64

Luego se presiona Resolver y aparece la ventana,

65

La solucin es la siguiente:

x=2, y=3
Ejemplo 2: Encontrar una raz 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

Raz

4.3 PROGRAMAS PARA CALCULO NUMERICO.Ejemplo: Hacer un programa que encuentre races por el mtodo de Newton.
Primero se crean los siguientes botones en una hoja Excel.

67
Y se asigna los siguientes cdigos 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 solucin de la ecuacin x^3 -155 = 0 se ponen los datos y se
obtiene el siguiente resultado.

69

CAPITULO V
USO DEL GRABADOR DE MACROS
5.1 DESCRIPCIN.El grabador de Macros, es una herramienta que permite programar tareas de
manera automtica, o sea programar sin saber programar.
Podemos aprender a programar viendo como el grabador de Macros genera el
cdigo 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 cules 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 cdigo 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 mtodo abreviado y la


descripcin. Presionamos aceptar, y aparece el siguiente icono
botn cuadrado es para detener la grabacin.

, 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 tambin serian
grabados.

d) Seleccionamos un grupo de celdas


, luego

luego

y presionamos

e) Presionamos el botn cuadrado para detener la grabacin.


f) Luego para ver el cdigo generado presionamos Herramientas, Macro,

g) Resaltamos el nombre de la macro, en este caso prueba y presionamos


Modificar.
Aparece todo el cdigo 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 lneas de cdigo no son
necesaria para nuestro propsito, ya que solo queramos centrar, poner en negrilla
y poner en color rojo.
Ese cdigo corresponde a las lneas:
Range("E6:F7").Select
.HorizontalAlignment = xlCenter

Selection.Font.Bold = True
Selection.Font.ColorIndex = 3
El resto es cdigo innecesario para nuestro propsito.

Ejemplo: Usar el grabador de Macros para aprender sobre el trazado de una


grafica de tipo dispersin, 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
grficos.
c) Elegimos dispersin con lneas 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 grabacin.

73
g) De la misma manera , que en el primer ejemplo, vemos el cdigo 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 cdigo podemos trasladarlo a un botn de comando
que ejecute esa accin cuando lo presionemos.
Es importante practicar modificando pequeos aspectos y viendo como se
modifica el cdigo.
El tipo de grafico se encuentra en la lnea:
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
Modificando esta lnea podemos modificar el tipo de grafico.

You might also like