Documentos de Académico
Documentos de Profesional
Documentos de Cultura
R-12
SOFTTRAINING
Asper Capacitacin S.A.(SoftTraining) tiene el agrado contar con su presencia y esperamos que la
actividad en la que participar sea de gran provecho para ud. y de real utilidad para la empresa.
Le agradeceremos considerar las siguientes instrucciones para su seguridad y la calidad del desarrollo de la
actividad:
1. Fumar Solo en lugares previstos.
2. Escuchar msica durante la realizacin de la actividad NO aporta para su aprendizaje.
3. Nunca comer en las salas, an sin actividad. Favor consultar sobre los lugares habilitados.
4. Usar vocabulario adecuado, no crear altercados en las instalaciones de la empresa. Cualquier anomala
debe ser informada inmediatamente al relator o la Encargado de Operaciones.
5. No utilizar celulares durante las capacitaciones.
6. Maneje con cuidado los equipos que se le facilitan, siendo de su responsabilidad el uso adecuado, seguro y
no emplearlo para diversin. NO USAR INTERNET sin autorizacin del Relator.
7. El mal funcionamiento de un equipo por cualquier motivo, debe ser informado al relator o
Encargado
de operaciones.
8. No olvide de su derecho de ser informado claramente por relator sobre:
SOFTTRAINING
Las devoluciones solicitadas sern analizadas por el Director General, quien responder dentro de 5 das
hbiles si los motivos son atendibles o rechazados.
Esperamos sea grata su estada y poder verlo nuevamente en otra oportunidad.
SOFTTRAINING
Formulario (Reclamos/Observaciones/Felicitaciones)
Nombre:
RUT:
Curso al que asiste:
Motivo de la molestia u otra situacin: :
Observaciones:
Nota: Este documento se entrega en recepcin, quedando una copia para Asper Capacitacin S.A. (SoftTraining)
y otra para el cliente. Ser el Director General de Asper Capacitacin S.A. (SoftTraining) quien se comunicar
con ud. para informarle el resultado de su solicitud.
Cristian Sarras
Letelier
Director General
SOFTTRAINING
SOFTTRAINING
Qu es una macro?
Explicacin de las macros
Caractersticas nuevas de las macros en Office Access 2007
Crear una macro
Ejecutar una macro
Qu es una macro?
Una macro es una herramienta que permite automatizar tareas y mejorar la funcionalidad de formularios,
informes y controles. Por ejemplo, si agrega un botn de comando a un formulario, asocia el evento
AlHacerClick del botn a una macro y esta macro contiene los comandos que desea que se ejecuten cada
vez que se haga clic en el botn.
En Access, resulta til considerar las macros como un lenguaje de programacin simplificado que se escribe
generando una lista de acciones a realizar. Para generar una macro, seleccionar cada accin en una lista
desplegable y luego completar la informacin necesaria para cada accin. Las macros permiten mejorar la
funcionalidad de formularios, informes y controles sin escribir cdigo en un mdulo de Visual Basic para
Aplicaciones (VBA). Las macros proporcionan un subconjunto de los comandos disponibles en VBA y, para la
mayora de los usuarios, es ms fcil generar una macro que escribir cdigo de VBA.
SOFTTRAINING
Por ejemplo, suponga que desea iniciar un informe directamente desde un formulario de entrada de datos.
Puede agregar un botn al formulario y, a continuacin, crear una macro que inicie el informe. Puede tratarse
de una macro independiente (un objeto independiente en la base de datos), que luego se asocie al evento
AlHacerClick del botn, o la macro puede estar incrustada directamente en el propio evento AlHacerClick
del botn (una caracterstica nueva en Office Access 2007). De cualquiera de las dos maneras, cuando se
haga clic en el botn, la macro se ejecutar e iniciar el informe.
Las macros se crean usando el Generador de macros, que se muestra en la siguiente ilustracin.
En la ficha Crear, en el grupo Otro, haga clic en Macro. Si el comando no est disponible, haga
clic en la flecha debajo del botn Mdulo o Mdulo de clase y, a continuacin, haga clic en Macro.
SOFTTRAINING
Una macro consta de acciones de macro individuales. La mayora de las acciones requieren argumentos.
Adems, puede asignar nombres a las macros de un grupo de macros y agregar condiciones para controlar la
forma de ejecutarse cada accin. En las siguientes secciones se describen estas funciones de forma ms
detallada.
Nombres de macro
Si un objeto macro slo contiene una macro, no es necesario utilizar nombres de macro. Se puede hacer
referencia a la macro por el nombre del objeto. No obstante, en el caso de un grupo de macros, se debe
asignar un nombre nico a cada macro. Si la columna Nombre de macro no est visible en el Generador de
macros, haga clic en Nombres de macro
Argumentos
Un argumento es un valor que proporciona informacin para la accin, como la cadena que se debe mostrar
en un cuadro de mensaje, el control que se debe operar, etc. Algunos argumentos son necesarios y otros son
opcionales. Los argumentos se pueden ver en el panel Argumentos de accin, en la parte inferior del
Generador de macros.
SOFTTRAINING
Una funcin nueva del Generador de macros de Office Access 2007 es la columna Argumentos, que permite
ver (pero no editar) los argumentos de una accin en la misma lnea de la accin. De esta forma, es un poco
ms fcil leer la macro porque ya no es necesario seleccionar una accin para mostrar los argumentos. Para
mostrar la columna Argumentos, haga clic en Argumentos
Diseo.
Condiciones
Una condicin especifica ciertos criterios que se deben cumplir para que se pueda realizar una accin. Se
puede utilizar cualquier expresin que pueda dar como resultado True/False o S/No. La accin no se
ejecutar si la expresin devuelve como resultado False, No o 0 (cero). Si la expresin devuelve cualquier otro
valor, la accin se ejecutar.
Para que una condicin pueda controlar ms de una accin, escriba unos puntos suspensivos (...) en la
columna Condicin para cada accin subsiguiente que desee que se aplique a la condicin. Si la expresin
devuelve False, No o 0 (cero), no se ejecutar ninguna de las acciones. Si la condicin devuelve cualquier
otro valor, todas las acciones se ejecutarn.
Para mostrar la columna Condiciones en el Generador de macros, en la ficha Diseo, en el grupo Mostrar u
ocultar, haga clic en Condiciones
Si:
[Ciudad]="Pars"
DCont("[IdPedido]", "Pedidos")>35
SOFTTRAINING
Pedidos.
DCont("*", "Detalles de pedido",
"[IdPedido]=Formularios![Pedidos]![IdPedido]")>3
Formularios![Productos]![UnidadesEnStock]<5
EsNulo([Nombre])
[PasRegin]="UK" Y Formularios![TotalVentas]!
[TotalPedidos]>100
CuadroMsj("Confirmar cambios?",1)=1
[Variables temporales]![ResultadoCuadroMsj]=2
SUGERENCIA
Para hacer que Access omita temporalmente una accin, especifique False como condicin.
Omitir temporalmente una accin puede ser de utilidad cuando est tratando de solucionar problemas en una
macro.
Acciones de macro
Las acciones son los bloques de creacin para generar las macros. Access proporciona una gran cantidad de
acciones entre las que elegir, que habilitan una amplia variedad de comandos. Por ejemplo, algunas de las
acciones ms utilizadas sirven para abrir un informe, buscar un registro, mostrar un cuadro de mensaje o
aplicar un filtro a un formulario o un informe.
SOFTTRAINING
10
En versiones anteriores de Access, muchas funciones de las ms habituales no se podan ejecutar sin escribir
cdigo de VBA. En Office Access 2007, se han integrado nuevas caractersticas y acciones de macro para
ayudar a eliminar la necesidad de cdigo. De esta forma, resulta ms sencillo mejorar la funcionalidad de la
base de datos y sta gana en seguridad.
no est resaltado en el
Generador de macros, las nicas acciones de macro y argumentos de EjecutarComando que estn
disponibles para el uso son las que no requieren estado de confianza para ejecutarse. Una macro
generada con estas acciones se ejecutar aunque la base de datos est en modo deshabilitado
(cuando no se permite la ejecucin de VBA). Las bases de datos que contienen acciones de macro
no incluidas en la lista de confianza (o las bases de datos que tienen cdigo de VBA) requieren que
se les conceda explcitamente el estado de confianza.
SOFTTRAINING
11
acceso a estas variables temporales en VBA, por lo que sirven adems para comunicar datos a
mdulos de VBA y desde ellos.
En la ficha Crear, en el grupo Otro, haga clic en Macro. Si el comando no est disponible, haga
clic en la flecha debajo del botn Mdulo o Mdulo de clase y, a continuacin, haga clic en Macro.
Utilice el Generador de macros para crear la lista de acciones que desea que se lleven a cabo cuando se
ejecute la macro. La primera vez que abra el Generador de macros, aparecern las columnas Accin,
Argumentos y Comentario.
En Argumentos de accin, es donde se especifican y editan los argumentos para cada accin de macro,
cuando son necesarios. Aparece un cuadro que ofrece una breve descripcin de cada accin o argumento.
Haga clic en una accin o en un argumento de accin para leer su descripcin en el cuadro.
SOFTTRAINING
12
En la tabla siguiente, se muestran los comandos que estn disponibles en la ficha Diseo del Generador de
macros.
Grupo
Comando
Descripcin
Herramientas
Ejecutar
Paso a paso
Habilita el modo paso a paso. Cuando se ejecuta la macro en este modo, las
acciones se realizan de una en una. Despus de completar cada accin, se
muestra el cuadro de dilogo Macro paso a paso. Haga clic en Paso a
paso en el cuadro de dilogo para avanzar a la siguiente accin. Haga clic en
Detener todas las macros para detener la macro en curso y cualquiera
otra que se est ejecutando. Haga clic en Continuar para salir del modo
paso a paso y llevar a cabo las acciones restantes sin pararse.
Generador
Insertar filas
Eliminar filas
Mostrar todas
las acciones
Filas
Mostrar u
ocultar
Condiciones
SOFTTRAINING
Argumentos
13
En la ficha Crear, en el grupo Otro, haga clic en Macro. Si el comando no est disponible, haga
clic en la flecha debajo del botn Mdulo o Mdulo de clase y, a continuacin, haga clic en Macro.
2.
Accin.
Escriba la accin que desea utilizar o haga clic en la flecha para mostrar la lista de
necesarios. Para ver una descripcin breve de cada argumento, haga clic en el cuadro del
argumento y lea la descripcin que aparece a la derecha del argumento.
Sugerencias
SOFTTRAINING
14
desde el panel de exploracin hasta una fila vaca del Generador de macros. Si arrastra
una tabla, una consulta, un formulario, un informe o un mdulo hasta el Generador de
macros, Access agrega una accin que abre la tabla, la consulta, el formulario o el
informe. Si arrastra una macro hasta el Generador de macros, Access agrega una
accin que ejecuta la macro.
3.
Para agregar ms acciones a la macro, muvase a otra fila de accin y repita el paso 2. Access
lleva a cabo las acciones en el orden en que se enumeren.
1.
En la ficha Crear, en el grupo Otro, haga clic en Macro. Si el comando no est disponible, haga
clic en la flecha debajo del botn Mdulo o Mdulo de clase y, a continuacin, haga clic en Macro.
2.
si no
NOTA
Los nombres de macro son necesarios en los grupos de macros para distinguir unas macros
de otras. El nombre de macro aparece en la misma lnea que la primera accin de la macro. La
columna Nombre de macro se deja en blanco para las siguientes acciones de la macro. La macro
finaliza en la siguiente entrada de la columna Nombre de macro.
SOFTTRAINING
En la columna Nombre de macro, especifique un nombre para la primera macro del grupo de
macros.
4.
Sugerencias
15
SOFTTRAINING
16
6.
7.
NOTAS
Cuando guarde el grupo de macros, el nombre que especifique ser el nombre del grupo
completo. Este nombre aparece en Macros en el panel de exploracin. Para hacer referencia a una
macro individual incluida en un grupo de macros, use esta sintaxis:
nombre_de_grupo_de_macros.nombre_de_macro
SOFTTRAINING
17
no hay que realizar un seguimiento de otros objetos macro que contienen macros para un formulario o un
informe. Siga este procedimiento para crear una macro incrustada.
NOTA
Las macros incrustadas no se pueden convertir a Visual Basic for Applications (VBA) usando la
datos. Si desea convertir en ltima instancia las macros a cdigo VBA, puede resultar adecuado crear macros
independientes en lugar de macros incrustadas. Entonces, podr usar la herramienta Convertir macros a
Visual Basic para convertirlas a VBA.
1.
o Vista Presentacin
..
2.
3.
Haga clic en el control o en la seccin que contiene la propiedad de evento en la que desea
incrustar la macro.
Para seleccionar el formulario o el informe entero, haga clic en Informe en la lista desplegable en la
parte superior de la hoja de propiedades.
4.
5.
6.
junto al cuadro.
SOFTTRAINING
18
7.
8.
9.
10.
11.
y despus en Cerrar
NOTA
Access permite generar un grupo de macros como una macro incrustada. Sin embargo, slo se
ejecutar la primera macro del grupo cuando se desencadene el evento. Las macros subsiguientes se omiten,
a no ser que se les llame desde dentro de la propia macro incrustada (por ejemplo, mediante la accin
AlOcurrirError).
1.
2.
SOFTTRAINING
3.
4.
5.
Haga clic en
6.
19
Aceptar.
7.
Argumentos
CuadroMsj
CancelarEve
nto
[sin argumentos]
8.
Tenga en cuenta que la tabla precedente muestra los argumentos tal como se presentan en la
columna Argumentos. En realidad, se establecen en Argumentos de accin, como se indica en la
tabla siguiente.
Argumento de la
accin
9.
Valor
Mensaje
No se encontraron
registros.
Bip
Tipo
Informacin
Ttulo
Sin datos
SOFTTRAINING
20
La prxima vez que ejecute el informe y no se encuentren registros, aparecer el cuadro de mensaje. Si hace
clic en Aceptar en el cuadro de mensaje, el informe se cancelar sin mostrar la pgina vaca.
..
Para eliminar una fila de accin Haga clic en la fila de la accin que desea eliminar y, a
continuacin, en la ficha Diseo, en el grupo Filas, haga clic en Eliminar filas
Para mover una fila de accin Seleccione la accin haciendo clic en el selector de filas a la
izquierda del nombre de la accin. Arrastre el selector de filas para mover la accin a una nueva
posicin.
en la ficha Diseo
mientras la macro est en la vista Diseo; de otro modo, la macro slo se ejecutar cuando se desencadene
su evento asociado.
SOFTTRAINING
21
En la ficha Herramientas de base de datos, en el grupo Macro, haga clic en Ejecutar macro
, haga clic en la macro en la lista Nombre de macro y, a continuacin, haga clic en Aceptar.
en la ficha Diseo, en el
grupo Herramientas. Para abrir la macro en la vista Diseo, haga clic con el botn secundario en
ella en el panel de exploracin y, a continuacin, seleccione Vista Diseo
En la ficha Herramientas de base de datos, en el grupo Macro, haga clic en Ejecutar macro
y, a continuacin, haga clic en la macro en la lista Nombre de macro.
Access incluye una entrada para cada macro en cada grupo de macros, con el formato
nombre_de_grupo_de_macros.nombre_de_macro.
SOFTTRAINING
22
nombre_de_grupo_de_macros.nombre_de_macro
Por ejemplo, el valor de propiedad de evento siguiente ejecuta una macro denominada Categoras
en un grupo de macros denominado Botones del panel de control del formulario:
Para ejecutar una macro que est en un grupo de macros desde un procedimiento de VBA,
utilice el mtodo RunMacro del objeto DoCmd, con la sintaxis indicada previamente para hacer
referencia a la macro.
Para agregar la accin EjecutarMacro a una macro, haga clic en EjecutarMacro en la lista de
acciones en una fila de accin en blanco y, a continuacin, establezca el argumento Nombre de
macro en el nombre de la macro que desea ejecutar.
SOFTTRAINING
23
1.
2.
Abra la hoja de propiedades del formulario o el informe, o de una seccin o un control del
formulario o el informe.
3.
4.
Haga clic en la propiedad de evento correspondiente al evento que desee que desencadene la
macro. Por ejemplo, para iniciar la macro cuando se produzca el evento Change, haga clic en la
propiedad Al cambiar.
5.
6.
SOFTTRAINING
24
Antes de empezar
Nuestros deseos:
Espero que este manual (tu manual) dentro de un par de meses est
completamente destrozado. No porque lo hayas roto de rabia, sino porque hayas
pasado sus pginas miles de veces y hayas escrito es sus mrgenes cientos de
notas.
Notacin Utilizada:
clic
significa
doble clic
o
clic-clic
significa
[Aceptar]
significa
Men Formato
Ancho de columna...
Ajuste perfecto
significa
hacer clic en la opcin Formato de la barra de
mens.
hacer clic en la opcin Ancho de columna... de
la nueva ventana que aparece y volver a hacer
clic en la opcin Ajuste perfecto de la nueva
ventana.
SOFTTRAINING
[Return]
significa
pulsar la tecla:
[Tab]
significa
pulsar la tecla:
TuCarpeta significa
25
1
Fundamentos de VBA
a) Ejecuta el Access:
CLIC en [Inicio]
Cursor en Programas
CLIC en Microsoft Access
-
SOFTTRAINING
26
Men Ver
Ventana Inmediato
SOFTTRAINING
27
Escribe:
Programa1
y pulsa [Return]
d) Ejecuta el Access:
CLIC en [Inicio]
Cursor en Programas
SOFTTRAINING
28
CLIC en [Abrir]
Escribe lo siguiente:
Sub Programa2()
MsgBox "Esto es el primer mensaje"
'Esto es un comentario, porque al principio _
de la lnea he escrito un apstrofe
MsgBox "Esto es el segundo mensaje"
'Esto es otro comentario que ocupa una lnea
MsgBox "Esto es el tercer mensaje"
End Sub
SOFTTRAINING
29
y pulsa [Return]
y [Return]
SOFTTRAINING
30
[Aceptar]
MsgBox mensaje
Aparece una ventana que contiene el mensaje y un botn [Aceptar]. Al
hacer CLIC en el [Aceptar] anterior, se contina la ejecucin del programa.
Ya veremos ms adelante que el MsgBox es otro tipo de programa, ya
incorporado al VBA, llamado funcin.
SOFTTRAINING
31
El Programa 4 sirve para sumar dos nmeros: el programa nos pedir los dos
nmeros (InputBox) y nos dar (MsgBox) el resultado de sumarlos.
Integer quiere decir que el valor que tomarn las variables son nmeros
enteros entre 32.768 y 32.767
SOFTTRAINING
32
El programa nos pedir otro nmero (segundo InputBox), una vez escrito, el
programa lo asignar a la variable n2.
Pulsa [CTRL][G]
SOFTTRAINING
33
Selecciona el Programa4
CLIC en el icono Copiar o Men Edicin Copiar
Sita el cursor al final del Programa4, en una lnea nueva.
CLIC en el icono Pegar
Corrige el 4 de la copia por un 5
Corrige los Integer de la copia por Double
SOFTTRAINING
34
Ejecuta el Programa6
i)
Ejecuta el programa
Grbalo.
SOFTTRAINING
35
Sub Programa9()
Dim A As String
A = InputBox("Quieres continuar (S/N)?")
If A = "S" Or A = "s" Then
SOFTTRAINING
36
MsgBox "Pepe"
End If
End Sub
Ejecuta el Programa9
SOFTTRAINING
37
Ejecuta el programa
SOFTTRAINING
38
contador = 1
Inicializamos (asignamos) la variable contador a un valor igual a la
unidad.
Do While condicin
Instruccin 1
Instruccin 2
Loop
o) Se trata de hacer un programa que nos escriba tantas veces como queramos
PEPE
La solucin podra ser la siguiente:
Sub Programa13()
Dim pregunta As String * 1
pregunta = "S"
Do While pregunta = "S" Or pregunta = "s"
MsgBox "PEPE"
pregunta = InputBox("Quieres continuar?")
Loop
End Sub
SOFTTRAINING
39
p) Se trata de hacer un programa que vaya sumando los nmeros (enteros) que
queramos.
La solucin podra ser la siguiente:
Sub Programa14()
Dim num As Integer, total As Integer
total = 0
num = InputBox("Escribe un nmero")
Do While num <> 0
total = total + num
num = InputBox("Escribe un nuevo valor")
Loop
MsgBox "La Suma total es " & total
End Sub
Est claro, que debido a la condicin de nuestro While, para acabar hemos de
escribir 0.
num.
SOFTTRAINING
40
SOFTTRAINING
41
Observa:
Definimos dos variables Integer, la primera: num, que indicar el
nmero de mensajes, en nuestro caso el nmero de veces que se ha
de repetir el ciclo For To Next. La segunda variable integer i,
corresponde al ndice del ciclo For To Next
La variable nom, tipo texto (String) almacenar nuestro nombre.
El programa nos pregunta: cuntas veces queremos el saludo, que
no es ms que el valor de la variable num o nmero de veces que
queremos se repita el ciclo For To Next.
Observa la sentencia que est en el ciclo For To Next:
SOFTTRAINING
42
Discriminante
2a
Discriminante
2a
Si Discriminante = 0
La nica solucin de la ecuacin es:
X=
b
2a
Si Discriminante < 0
La ecuacin no tiene soluciones reales
-
SOFTTRAINING
43
a=0
a = 1, b = 1, c = 1
a = 1, b = -4, c = 4
a = 1, b = 1, c = -6
Prubalo tambin para valores decimales
Recuerda que es muy importante grabar el trabajo que vas haciendo (CLIC
en el icono Guardar)
SOFTTRAINING
44
For i = 1 To 3
Debug.Print "A(" & i & ")= " & A(i)
Next
End Sub
Veamos:
varias
veces,
observando
Martes
Mircoles
Jueves Viernes
SOFTTRAINING
8
14
10,5
17
45
6
13,5
9
13
7
18
Sub Programa19()
Dim A(1 To 2, 1 To 5) As Double
Dim i As Byte, j As Byte
For j = 1 To 5
For i = 1 To 2
A(i, j) = InputBox("hora inicio y despus hora finalizacin, para cada da de la semana,
empezando por el lunes y acabando en el jueves")
Next
Next
For j = 1 To 5
For i = 1 To 2
Debug.Print A(i, j)
Next
Next
End Sub
SOFTTRAINING
46
Dim i, j As Byte
Definimos 2 variables tipo Byte. Byte no es ms que un nmero de 0 a 255.
Ya que stas variables (i, j) correspondern a los ndices de dos ciclos FOR
TO NEXT, no hay necesidad de declararlas Integer. La nica diferencia
es que las variables Byte ocupan menos memoria que las Integer
For j=1 To 5
For i=1 To 2
A(i,j) = InputBox(..)
Next
Next
Se trata de dos ciclos for to next anidados, veamos como funcionan:
Al inicio j=1
For i=1 To 2
A(i,1)= InputBox(.)
Next
Es decir:
J=1
I=1
A(1,1)=
I=2
A(2,1)=
J=2
I=1
A(1,2)
I=2
A(2,2)
J=3
I=1
A(1,3)
SOFTTRAINING
47
I=2
A(2,3)
Etc.
Etc.
For j=1 To 5
For i=1 To 2
Debug.Print A(i,j)
Next
Next
Se trata de dos ciclos for to next anidados, igual que los anteriores, con
la nica diferencia que en este caso nos escribe en la ventana de depuracin los
valores que hemos guardado en los anteriores ciclos for to next anidados.
Sub Programa20()
Dim A(1 To 2, 1 To 5) As Double
Dim i As Byte, j As Byte
Dim suma As Double, diaria As Double
For j = 1 To 5
For i = 1 To 2
A(i, j) = InputBox("Introduce los valores igual que antes")
Next
Next
suma = 0
For j = 1 To 5
diaria = A(2, j) - A(1, j)
suma = suma + diaria
Debug.Print "Una jornada= " & diaria
Next
Debug.Print "Toda la Semana= " & suma
End Sub
SOFTTRAINING
48
SOFTTRAINING
49
Ejecuta el programa anterior varias veces, hasta que descubras para qu sirve
la instruccin Exit For
SOFTTRAINING
50
z) En VBA hay diferentes tipos de programas. Todos los programas que hemos
hecho hasta ahora se llaman procedimientos y tienen la estructura:
Sub NombrePrograma()
.
.
End Sub
Veamos otro tipo de programa en VBA, que se llama funcin.
SOFTTRAINING
51
Est claro con lo hecho hasta ahora que una funcin es un programa, pero de
un tipo distinto a un procedimiento.
End Function
SOFTTRAINING
52
Los argumentos de la funcin son los valores que necesitar la funcin para
ejecutarse. En nuestro caso al escribir: Media(2,3) estamos llamando a la
funcin Media, con n1=2 y n2=3.
Una funcin siempre devuelve algn valor, que debe declararse. En nuestro
caso es Double y la forma de declarar es:
Function nombre ( , ..) As Double
Escribe: ?Raiz4(-7)
SOFTTRAINING
53
Prueba el programa 24
SOFTTRAINING
54
SOFTTRAINING
55
Sentencia 3
Sentencia 4
Case Else
Sentencia 5
Sentencia 6
End Select
Segn el valor de la variable se ejecutarn unas lneas de programa u
otras. Si la variable no toma ninguno de los valores que nos interesan, podemos
agrupar las lneas de programa en Case Else. La opcin Case Else es opcional.
SOFTTRAINING
56
Para saber ms
Declaracin de Variables
Es un buen hbito de programacin la declaracin de los tipos de variable
que se van a utilizar en un procedimiento, antes de que vayan a ser utilizadas.
Esto aumenta la legibilidad de los programas.
El VB no nos obliga a declarar previamente las variables que utilizamos en
un programa, a diferencia de otros lenguajes de programacin como el C/C++.
Seria interesante obligar al Visual Basic a la declaracin de variables, ya que el
error tpico de programacin consiste en cambiar el nombre de una variable por
error; si el VB nos obligara a declarar todas las variables, detectaramos
inmediatamente el error.
Para obligar a la declaracin previa de variables, basta escribir en la parte
General de un mdulo la lnea: Option Explicit
SOFTTRAINING
57
Valor
0 a 255
True o False
-32768 a 32767
-2147483648 a 2147483647
(nmeros decimales positivos y/o
negativos)
1/1/100 a 31/12/9999
(cadena alfanumrica)
(tipo de datos por defecto)
SOFTTRAINING
58
Funcin MsgBox
El MsgBox es una funcin incorporada en el VB que tiene muchas
posibilidades, vemoslo:
-
SOFTTRAINING
59
Observa detenidamente lo que sucede y ejectalo varias veces para verlo mejor.
El primer MsgBox:
MsgBox(Hola & nom)
es el tipo de cuadro que ya habamos utilizado
Si observamos el segundo:
MsgBox Hola & nom
llegamos a la conclusin que tanto da poner o no poner parntesis.
SOFTTRAINING
60
Devuelve el nmero
Constante
1
vbOK
2
vbCancel
3
vbAbort
4
vbRetry
5
vbIgnore
6
vbYes
7
vbNo
Funcin InputBox
Igual que sucede con el MsgBox, el InputBox tiene ms posibilidades que las
vistas hasta ahora.
SOFTTRAINING
61
SOFTTRAINING
62
1) Informacin rpida
Siempre que escribimos una palabra reservada, seguida de un espacio o de un
parntesis, aparece una nota en pantalla que contiene la sintaxis del elemento
escrito. Un ejemplo sera cuando escribimos MsgBox(
2) Lista de propiedades y mtodos
Cuando escribimos el nombre de un objeto y el punto, aparece un cuadro que
contiene todas las propiedades y mtodos del objeto en cuestin.
Un ejemplo sera cuando escribimos Debug y un punto.
Basta seleccionar la propiedad o mtodo del cuadro y pulsar la tecla [Tab].
Ya veremos ms adelante, qu es exactamente un objeto, propiedad y mtodo.
3) Lista de constantes
La tercera posibilidad de IntelliSense es que aparece un listado con todas las
constantes incorporadas de VB, segn el objeto y propiedad.
Lo habrs observado al comenzar a escribir vb...; basta seleccionar una de las
constantes y pulsar [Tab].
Si te molesta la ayuda inteligente basta que pulses la tecla [Esc] cuando
aparece.
SOFTTRAINING
63
SOFTTRAINING
64
SOFTTRAINING
65
Escribe: Programa7
El programa que tenemos en el mdulo del formulario:
Private Sub Comando0_Click()
Programa7
End Sub
Es lo que se llama procedimiento de evento (ya los estudiaremos en detalle ms
adelante), que se ejecutar al hacer clic en el botn [Saludo] (el nombre del botn
en realidad es Comando0), por esta razn el nombre del procedimiento es
Comando0_Click
-
SOFTTRAINING
66
Vuelve a acceder al men contextual del segundo botn del formulario y clic
en la opcin Generar evento ...
Escribe:
Private Sub Comando1_Click()
Programa14
End Sub
SOFTTRAINING
67
SOFTTRAINING
68
Sitate en el Editor VB
SOFTTRAINING
69
SOFTTRAINING
70
Autoevaluacin 1
Es muy importante que antes de continuar intentes hacer los siguientes
ejercicios. Si no te ves capaz de hacer alguno de ellos, consulta su solucin que
se encuentra ms adelante. En algunos de ellos, la solucin contiene alguna
instruccin de VBA nueva, posiblemente encontrars otra forma de rehacerlos,
pero es interesante consultar la solucin y el comentario o indicacin que te doy.
En la base de datos Programas, crea un nuevo mdulo de nombre
Autoevaluacin1, donde has de escribir los siguientes procedimientos:
1) Haz un programa de nombre Prog1, que funcione de la siguiente forma:
- El programa nos pide que escribamos dos nmeros positivos menores de 57.
- El programa nos da como resultado el producto de los dos nmeros.
- Si los nmeros no son positivos o son mayores de 57, el programa nos lo dice
y salimos del programa.
- El programa nos pregunta al final si queremos volver a empezar.
2) Escribe un procedimiento de nombre Prog2, que nos vaya pidiendo nmeros.
Si escribimos el nmero 9999 se acaba; por ltimo, el programa nos da como
resultado el nmero de nmeros introducidos, exceptuando el 9999.
3) Escribe un procedimiento de nombre Prog3, que haga lo mismo que el
anterior, pero adems nos d la suma de todos los nmeros introducidos,
exceptuando el 9999
4) Escribe un procedimiento de nombre Prog4, que haga lo mismo que el
anterior, pero adems nos d el producto de los nmeros introducidos,
exceptuando el 9999.
SOFTTRAINING
71
SOFTTRAINING
72
14) Escribe un procedimiento de nombre Prog14, que nos pida dos sumandos y
nos d la suma de sus cuadrados y su diferencia (utiliza las funciones:
SumaCuadrado y RestaCuadrado)
SOFTTRAINING
Soluciones de Autoevaluacin 1
Prog1
Sub Prog1()
Dim num1 As Double, num2 As Double
Dim opc As String * 1
opc = "S"
Do While opc = "S" Or opc = "s"
num1 = InputBox("Escribe un nmero positivo menor de 57")
If (num1 < 0 Or num1 > 57) Then
MsgBox ("El nmero es errneo")
Exit Sub
End If
num2 = InputBox("Escribe otro nmero positivo menor de 57")
If (num2 < 0 Or num2 > 57) Then
MsgBox ("El nmero es errneo")
Exit Sub
End If
MsgBox "El producto de los dos nmeros es = " & (num1 * num2)
opc = InputBox("Quieres volver a empezar (S/N)")
Loop
End Sub
Podemos salir del programa, desde cualquier punto del mismo, sin ms que
utilizar la instruccin Exit Sub
Prog2
Sub Prog2()
Dim num As Double, contador As Integer
contador = 0
num = InputBox("Escribe un nmero 'para acabar escribe 9999'")
Do While num <> 9999
contador = contador + 1
num = InputBox("Escribe un nmero 'para acabar escribe 9999'")
Loop
MsgBox "Has escrito " & contador & " nmeros distintos del 9999"
End Sub
73
SOFTTRAINING
74
Observa el uso de un contador, para contar las veces que se repite el bucle Do
While
Prog3
Sub Prog3()
Dim num As Double, contador As Integer
Dim sum As Double
contador = 0: sum = 0
num = InputBox("Escribe un nmero 'para acabar escribe 9999'")
Do While num <> 9999
contador = contador + 1: sum = sum + num
num = InputBox("Escribe un nmero 'para acabar escribe 9999'")
Loop
MsgBox "Has escrito " & contador & " nmeros distintos del 9999" & vbCrLf _
& "Y la suma de todos ellos es " & sum
End Sub
Prog4
Sub Prog4()
Dim num As Double, contador As Integer
Dim sum As Double, prod As Double
contador = 0: sum = 0: prod = 1
num = InputBox("Escribe un nmero 'para acabar escribe 9999'")
Do While num <> 9999
contador = contador + 1: sum = sum + num: prod = prod * num
num = InputBox("Escribe un nmero 'para acabar escribe 9999'")
Loop
MsgBox "Has escrito " & contador & " nmeros distintos del 9999" & vbCrLf _
& "Y la suma de todos ellos es " & sum & vbCrLf _
& "Y el producto es " & prod
End Sub
Prog5
Sub Prog5()
Dim mul As Double, sum As Double
Dim salida As String
mul = 0: sum = 0: salida = ""
Do While mul < 1000
salida = salida & " - " & mul
mul = mul + 23
sum = sum + mul
SOFTTRAINING
75
Loop
MsgBox "Mltiplos de 23 inferiores a 1000: " & vbCrLf _
& salida & vbCrLf _
& "Su SUMA = " & (sum - mul)
End Sub
Observa la tcnica de salida = salida & ..., para conseguir acumular todo lo
que aparecer en un cuadro MsgBox.
Prog6
Sub Prog6()
Dim x1 As Double, x2 As Double
Dim x As Double, y As Double
Dim incr As Double, salida As String
salida = "Tabla de y=sen(7x-5) " & vbCrLf
x1 = InputBox("Escribe el valor minimo de 'x'")
x2 = InputBox("Escribe el valor maximo de 'x'")
incr = InputBox("Escribe el incremento de 'x'")
For x = x1 To x2 Step incr
y = Sin(7 * x - 5)
salida = salida & x & " --- " & y & vbCrLf
Next
MsgBox salida
End Sub
Prueba lo que sucede para x1=1, x2=1000, incr=1. Debers pulsar [Return] para
cerrar el MsgBox.
Observa cmo se calcula un seno en Visual Basic.
Prog7
Sub Prog7()
Dim hipot As Double, cat1 As Double, cat2 As Double
Dim opc As String * 1, salida As String
salida = "TEOREMA DE PITGORAS" & vbCrLf & _
"====================" & vbCrLf & vbCrLf
opc = "S"
Do While opc = "S" Or opc = "s"
hipot = InputBox("Escribe el valor de la hipotenusa")
cat1 = InputBox("Escribe el valor del cateto")
If cat1 > hipot Then
MsgBox "No puede ser"
Exit Sub
End If
cat2 = Sqr(hipot * hipot - cat1 * cat1)
MsgBox salida & "Hipotenusa = " & hipot & " Cateto = " & cat1 & vbCrLf _
& "El valor del otro CATETO es = " & cat2
SOFTTRAINING
Prog8
Sub Prog8()
Dim mult As Double, sum As Double, prod As Double
Dim opc As String * 1, salida As String
opc = "S"
Do While opc = "S" Or opc = "s"
sum = 0: prod = 1: salida = ""
For mult = 7 To 7 * 15 Step 7
salida = salida & " - " & mult
sum = sum + mult
prod = prod * mult
Next
MsgBox salida & vbCrLf & "Suma = " & sum & _
" Producto = " & prod
opc = InputBox("Quieres Repetir (S/N)")
Loop
End Sub
Prog9
Sub Prog9()
Dim opc As String * 1, x As String * 1
Dim bt As Double, at As Double, art As Double
Dim br As Double, ar As Double, arr As Double
Dim radi As Double, arcir As Double
opc = "S"
Do While opc = "S" Or opc = "s"
x = InputBox("Tringulo (T), Rectngulo (R), Crculo (C)")
Select Case x
Case "T"
bt = InputBox("base tringulo")
at = InputBox("altura tringulo")
art = bt * at / 2
MsgBox "rea tringulo = " & art
76
SOFTTRAINING
Case "R"
br = InputBox("base rectngulo")
ar = InputBox("altura rectngulo")
arr = br * ar
MsgBox "rea rectngulo = " & arr
Case "C"
radi = InputBox("radio crculo")
arcir = 3.141592 * radi * radi
MsgBox "rea crculo = " & arcir
Case Else
MsgBox "Esta opcin no existe"
End Select
opc = InputBox("Quieres volver a empezar(S/N)")
Loop
End Sub
Prog10
Sub Prog10()
Dim A As Integer, b As Integer
Dim i As Integer, j As Integer
Dim salida As String
salida = ""
A = InputBox("Altura")
b = InputBox("Base")
For i = 1 To A
For j = 1 To b
salida = salida & "*"
Next
salida = salida & vbCrLf
Next
MsgBox salida
End Sub
Prog11
Sub Prog11()
Dim A As String * 1
Dim i As Integer, j As Integer
Dim salida As String
salida = ""
A = InputBox("Caracter")
b = InputBox("Lado del cuadrado")
For i = 1 To b
For j = 1 To b
salida = salida & A
Next
salida = salida & vbCrLf
Next
77
SOFTTRAINING
MsgBox salida
End Sub
Prog12
Sub Prog12()
Dim num As Integer, i As Integer
Dim salida As String
salida = ""
num = InputBox("Tabla del nmero")
For i = 1 To 9
salida = salida & num & " * " & i & " = " & num * i & vbCrLf
Next
MsgBox salida
End Sub
Prog13
Function sum(n1 As Double, n2 As Double) As Double
sum = n1 + n2
End Function
Function neperiano(x As Double) As Double
neperiano = Log(x)
End Function
Function raizcua(n As Double) As Double
raizcua = Sqr(n)
End Function
Sub Prog13()
Dim x As Double, y As Double, num As Double
Dim z As Double, opc As String
opc = InputBox("(S)uma, (R)az cuadrada, (L)ogaritmo neperiano")
Select Case opc
Case "S"
x = InputBox("Primer sumando")
y = InputBox("Segundo sumando")
MsgBox "Suma = " & sum(x, y)
Case "R"
num = InputBox("valor a extraer la raz cuadrada")
MsgBox "Raz cuadrada de " & num & " es " & raizcua(num)
Case "L"
z = InputBox("valor a calcular su logaritmo neperiano")
MsgBox "El Logaritmo neperiano de " & z & " es " & neperiano(z)
Case Else
MsgBox "Opcin no correcta"
End Select
End Sub
78
SOFTTRAINING
Prog14
Function SumaCuadrado(x As Double, y As Double) As Double
SumaCuadrado = x * x + y * y
End Function
Function RestaCuadrado(A As Double, b As Double) As Double
RestaCuadrado = A * A - b * b
End Function
Sub Prog14()
Dim n1 As Double, n2 As Double
n1 = InputBox("Primer sumando")
n2 = InputBox("Segundo sumando")
MsgBox "La suma de los cuadrados es " & SumaCuadrado(n1, n2) & vbCrLf _
& "La diferencia de los cuadrados es " & RestaCuadrado(n1, n2)
End Sub
Prog15
Function Media10(A() As Double) As Double
Dim sum As Double, i As Integer
sum = 0
For i = 1 To 10
sum = sum + A(i)
Next
Media10 = sum / 10
End Function
Sub Prog15()
Dim i As Integer, x(1 To 10) As Double
Dim des(1 To 10) As Double
Dim med As Double, d As Double
Dim descua(1 To 10) As Double
Dim var As Double, destip As Double
Dim salida As String
For i = 1 To 10
x(i) = InputBox("Valor")
Next
med = Media10(x())
For i = 1 To 10
des(i) = Abs(x(i) - med)
Next
d = Media10(des())
For i = 1 To 10
descua(i) = des(i) * des(i)
Next
79
SOFTTRAINING
80
var = Media10(descua())
destip = Sqr(var)
salida = "Valores: "
For i = 1 To 10
salida = salida & x(i) & " -"
Next
salida = salida & vbCrLf
salida = salida & "Media = " & med & vbCrLf
salida = salida & "Desviaciones respecto a la Media = "
For i = 1 To 10
salida = salida & des(i) & " - "
Next
salida = salida & vbCrLf
salida = salida & "Desviacin Media = " & d & vbCrLf
salida = salida & "Varianza = " & var & vbCrLf
salida = salida & "Desviacin Tpica = " & destip
MsgBox salida
End Sub
Observa:
- Si una funcin tiene por argumento una matriz, siempre hemos de declararla
sin dimensin: Function Media10( A() As Double) As Double
- Las desviaciones respecto a la media son las diferencias de cada valor y la
media, pero en valor absoluto. Abs() calcula el valor absoluto
- Observa la importancia que tiene la tcnica salida = salida & ..., para
conseguir mucha informacin en un nico MsgBox.
Prog16
Sub Prog16()
Dim num(1 To 25) As Double
Dim den(1 To 25) As Double
Dim i As Integer, salida As String
For i = 1 To 25
num(i) = 3 * i + 1
den(i) = 2 * i - 1
Next
salida = ""
For i = 1 To 25
salida = salida & num(i) & "/" & den(i) & " , "
Next
salida = salida & vbCrLf & vbCrLf & vbCrLf & "Valores de la Sucesin = "
For i = 1 To 25
salida = salida & num(i) / den(i) & " , "
Next
MsgBox salida
End Sub
SOFTTRAINING
81
2
Introduccin a la Programacin Visual
SOFTTRAINING
82
SOFTTRAINING
83
Haz CLIC en cualquier punto del formulario, fuera de la etiqueta del cuadro de
texto.
Puedes mover la etiqueta del cuadro de texto, sin ms que situar el cursor
del ratn en el extremo superior - izquierdo, y en el momento que aparece un
dedo, arrastra el cursor hasta situar la etiqueta donde quieras.
SOFTTRAINING
84
Si quieres mover la etiqueta junto con el cuadro de texto, debes situar el cursor
del ratn en cualquier borde y cuando el cursor del ratn cambia a una mano
extendida, arrastra el cursor adonde quieras.
Haz CLIC en cualquier punto del formulario, que no sea en el cuadro de texto.
SOFTTRAINING
85
SOFTTRAINING
86
Si aparece una ventana que nos permite elegir entre tres generadores, haz
CLIC en Generador de cdigo y [Aceptar]
SOFTTRAINING
87
Debes salir del Editor de Visual Basic, para volver al Access. Es decir, CLIC
en el icono Ver Microsoft Access:
SOFTTRAINING
88
SOFTTRAINING
89
CLIC en [BORRAR]
CLIC en [VALE]
CLIC en [BORRAR]
Est claro lo que hemos conseguido, verdad?
SOFTTRAINING
90
SOFTTRAINING
91
Graba el formulario PROG1 con todos sus cambios con el mismo nombre.
92
SOFTTRAINING
SOFTTRAINING
93
SOFTTRAINING
94
i)
-
Veamos:
-
SOFTTRAINING
95
SOFTTRAINING
96
Men ?
Ayuda de Microsoft Access
Men ?
Ayuda de Microsoft Access
Es conveniente maximizar la ventana de ayuda
Activa la Solapa: ndice
Escribe en el campo Escriba palabras clave: Year y CLIC en [Buscar]
Observa que la lnea: Ejemplo de las funciones DateSerial, Day Month y
Year ha quedado seleccionada, y a la derecha de la pantalla aparece la
explicacin correspondiente.
Cuando est claro para qu sirve Year, cierra la ventana de la ayuda.
SOFTTRAINING
97
Se trata de hacer una nueva funcin parecida a PrimeroMes(), pero que sirva
para cualquier fecha
Men Insertar
Procedimiento
Tipo: Funcin
mbito: Pblico
Escribe:
Public Function PrimeroMesCualquiera(Cual As Date) As Date
PrimeroMesCualquiera=DateSerial(Year(Cual), Month(Cual)+1, 1)
End Function
SOFTTRAINING
98
k) Cierra la base de datos VISUAL y crea una nueva base de datos (en tu
carpeta) de nombre VISUAL1.
-
SOFTTRAINING
99
I el icono Rectngulo:
SOFTTRAINING
100
SOFTTRAINING
101
Botn 1:
Botn 2:
SOFTTRAINING
102
Bien, la parte visual del programa ya est hecha, vamos a por la parte de
creacin de cdigo...
Se trata de hacer el siguiente programa:
Al hacer CLIC en [CALCULAR], el programa nos pregunta cul es la base y
la altura del tringulo y a continuacin nos escribe en el formulario la base y la
altura que hemos introducido y tambin nos escribe en el campo correspondiente,
el rea del tringulo.
Veamos:
SOFTTRAINING
103
CLIC en [Nuevo]
SOFTTRAINING
104
SOFTTRAINING
Cuadro de Texto 2:
Cuadro de Texto 3:
Etiqueta = ALTURA
Propiedad Nombre = altura
Cuadro de Texto 4:
Etiqueta = REA
Propiedad Nombre = trapecio
105
SOFTTRAINING
106
Caractersticas:
SOFTTRAINING
107
Para el botn 1:
Private Sub tringulo_Click()
DoCmd.OpenForm TRINGULO
End Sub
Para el botn 2:
Private Sub trapecio_Click()
DoCmd.OpenForm TRAPECIO
End Sub
Para el botn 3:
Private Sub fuera_Click()
DoCmd.Quit acExit
End Sub
SOFTTRAINING
108
Ejecuta y prueba los botones del formulario PROGRAMA1, pero antes graba el
formulario.
Aspecto:
Caractersticas:
SOFTTRAINING
109
SOFTTRAINING
110
Aspecto:
Caractersticas:
SOFTTRAINING
111
Salir
p) Como el formulario PROGRAMA3 nos ha quedado muy bien, nos gustara que
se autoejecutara al abrir la B. de D. VISUAL1. Haz lo siguiente:
SOFTTRAINING
112
q) Vamos a hacer en este apartado, un programa que sirva para calcular el I.V.A.
Intentaremos que sea un programa cerrado es decir que no se pueda modificar
(una vez acabado) y que tenga un aspecto profesional...
-
SOFTTRAINING
Aspecto:
Caractersticas:
113
SOFTTRAINING
114
SOFTTRAINING
115
Aspecto:
Caractersticas:
SOFTTRAINING
CANTIDAD
I.V.A.
P.V.P.
PESETAS
canpts
ivapts
pvppts
116
EUROS
caneur
ivaeur
pvpeur
<< Escribimos en el cuadro de texto [cantidad] del formulario Clculo del IVA
un nmero, seleccionamos PTS o EUROS, seleccionamos uno de los tres % de
IVA. Al pulsar el botn [Aceptar] pretendemos que se abra el formulario
RESULTADO con sus 6 campos que nos muestran el resultado de los clculos
>>.
Veamos:
SOFTTRAINING
117
Forms![RESULTADO].[caneur] = [cantidad]
End If
If Forms![RESULTADO].[canpts] = "" Then Forms![RESULTADO].[canpts] = _
Forms![RESULTADO].[caneur] * 166.386
If Forms![RESULTADO].[caneur] = "" Then Forms![RESULTADO].[caneur] = _
Forms![RESULTADO].[canpts] / 166.386
If [IVA] = 1 Then
Forms![RESULTADO].[ivapts] = Forms![RESULTADO].[canpts] * 0.04
Forms![RESULTADO].[ivaeur] = Forms![RESULTADO].[caneur] * 0.04
End If
If [IVA] = 2 Then
Forms![RESULTADO].[ivapts] = Forms![RESULTADO].[canpts] * 0.07
Forms![RESULTADO].[ivaeur] = Forms![RESULTADO].[caneur] * 0.07
End If
If [IVA] = 3 Then
Forms![RESULTADO].[ivapts] = Forms![RESULTADO].[canpts] * 0.16
Forms![RESULTADO].[ivaeur] = Forms![RESULTADO].[caneur] * 0.16
End If
Forms![RESULTADO].[pvppts] = CDbl(Forms![RESULTADO].[canpts]) _
+ CDbl(Forms![RESULTADO].[ivapts])
Forms![RESULTADO].[pvpeur] = CDbl(Forms![RESULTADO].[caneur]) _
+ CDbl(Forms![RESULTADO].[ivaeur])
End Sub
En las dos ltimas lneas del programa aparece una nueva funcin
incorporada: CDbl. Utilizamos esta nueva funcin que convierte el
contenido de un cuadro de texto, en nmero tipo Double. En los dems
casos no nos hemos preocupado de la conversin, porque al
multiplicar o dividir un cuadro de texto por un nmero, el VB los
convierte implcitamente. En las ltimas lneas del programa anterior
hemos de convertir los dos cuadros de texto explcitamente con la
funcin CDbl, porque sumamos. El signo de sumar en dos cuadros de
SOFTTRAINING
118
Cambia la propiedad:
Bloqueado = S
del
formulario
SOFTTRAINING
119
SOFTTRAINING
120
Men Herramientas
Inicio...
Resulta que ahora que ya hemos acabado y protegido nuestro programa, nos
gustara cambiar alguna cosa.
No hay problema, haz lo siguiente:
SOFTTRAINING
121
SOFTTRAINING
122
SOFTTRAINING
123
MsgBox "El valor x = " & x & " es " & TypeName(x)
y = InputBox("Escribe un nmero decimal")
MsgBox "El valor y = " & y & " es " & TypeName(y)
z = InputBox("Escribe lo que quieras")
MsgBox "El valor z = " & z & " es " & TypeName(z)
End Sub
-
Existe una alternativa a la instruccin Dim, que nos permite declarar variables,
y es la instruccin Static, aunque no es exactamente lo mismo ...
SOFTTRAINING
124
Conclusin
Cada vez que se ejecuta una instruccin Dim, la variable correspondiente se
inicializa (0 para numrico, vaco para String). En cambio una instruccin Static,
no inicializa el valor de la variable: conserva el valor anterior. Dicho de otra
forma, las dos instrucciones siguientes:
Static s As Integer
s=0
son equivalentes a Dim s As Integer
Si repasas los programas del captulo anterior, vers que en muchos casos no era
necesario inicializar las variables, porque utilizamos Dim; pero en algn caso s
era necesario, por ejemplo en una variable que acumula un producto: es necesario
inicializar la variable a 1, ya que en caso contrario el producto acumulado
siempre nos dar 0.
-
Cuadro de Texto 1:
Etiqueta: Nmero Entero
Propiedad Nombre: x
Cuadro de Texto 2:
Etiqueta: Otro Entero
Propiedad Nombre: y
Cuadro de Texto 3:
Etiqueta: Suma
Propiedad Nombre: sum
Cuadro de Texto 4:
Etiqueta: Producto
Propiedad Nombre: prod
-
SOFTTRAINING
125
SOFTTRAINING
126
s) Hasta ahora nos hemos dedicado a programar en VBA sin utilizar datos de la
base de datos subyacente a nuestros programas. Aunque en los ltimos ejercicios
hemos utilizado formularios, slo los hemos utilizado como soporte visual.
Vamos a comenzar a trabajar con datos de nuestras bases de datos. Piensa, que
en realidad la programacin en Visual Basic del Access, ha de ser un
instrumento para mejorar la gestin de nuestras bases de datos Access.
En algunos de los ejercicios anteriores hemos utilizado rdenes propias del
Access, como DoCmd.OpenForm Tringulo; veremos en este apartado una
forma muy fcil de estudiar este tipo de instrucciones.
-
SOFTTRAINING
127
Tipo de datos
Texto
Texto
Texto
Texto
Texto
SOFTTRAINING
128
Cuadro 1:
Etiqueta: Socio Anterior
Propiedades:
Nombre: SocioA
Activado: No
Cuadro 2:
Etiqueta: (ninguna)
Propiedades:
Nombre: Nom
Activado: No
Cuadro 3:
Etiqueta: Nivel de Confianza
Propiedades:
Nombre: Nivel
ndice de tabulacin: 1
SOFTTRAINING
129
Registro: ltimo
IrARegistro
Registro: Nuevo
SOFTTRAINING
130
SOFTTRAINING
131
Con el cursor del ratn en el punto negro pulsa el botn derecho del ratn y
accede a sus propiedades.
SOFTTRAINING
132
[Nom] = y
End Sub
Observemos el programa:
Al abrir el formulario (Form_Open)
Declaramos dos variables x, y de tipo String
Nos situamos en el ltimo registro (acLast)
Asignamos a x e y los valores de los campos NumSocio y
NombreApell, que sern los ltimos, porque estamos situados en el
ltimo registro.
Nos situamos en un nuevo registro (acNewRec)
Asignamos a los controles SocioA y Nom, los valores de las variables x
e y.
Vamos a ver si funciona:
-
Supongo que te das cuenta del problema: estamos en un nuevo registro pero
los datol que aparecen en los dos primeros controles del formulario, no
corresponden al ltimo registro.
Vamos a intentar solucionar el problema:
Sitate en la pantalla de diseo del formulario Socios
Inserta un botn de comando con las siguientes propiedades:
Nombre: NRegistro
Ttulo: Otro
Accede al mdulo del formulario y escribe el siguiente procedimiento de
evento:
Private Sub NRegistro_Click()
Dim x As String, y As String
DoCmd.GoToRecord , "", acLast
x = [NumSocio]: y = [NombreApell]
DoCmd.GoToRecord , "", acNewRec
[SocioA] = x
SOFTTRAINING
133
[Nom] = y
End Sub
Como puedes observar se trata de exactamente el mismo programa
Form_Open
-
Vamos a resolver la segunda parte del problema que nos habamos propuesto
(el del Nivel de Confianza), que ser muy fcil de solucionar gracias a la nueva
instruccin:
NombreCampo.SetFocus: coloca el foco en NombreCampo
SOFTTRAINING
134
Observa:
Al salir del campo NombreApell (NombreApell_Exit)
Si en el control Nivel hay un 1 (If [Nivel]=1)
Entonces sitate en el campo Telfono (Then Telfono.SetFocus)
Es decir, que en la prctica nos saltaremos los campos NIF y Direccin.
SOFTTRAINING
135
Para saber ms
Evento
Es una accin del usuario o del sistema que afecta a un objeto (control) y
provoca la ejecucin del cdigo correspondiente.
BOTN1_Click : al hacer click en el botn de nombre BOTN1
Form_Open: al abrir el formulario
NIF_Exit: al salir del control NIF
Ya veremos en el siguiente ejercicio otros eventos.
Mdulos y Procedimientos
El mdulo es la estructura del Access que nos permite introducir cdigo
VBA. Hay de dos tipos:
-
Mdulos estndar:
Accedemos a ellos a travs de la pantalla inicial de la BD, objeto:
Mdulos y click en [Nuevo] o [Diseo]
En dichos mdulos escribimos los procedimientos Sub y las funciones.
MDULO ESTNDAR
MDULO DE FORMULARIO
SOFTTRAINING
136
Controles
Eventos
Procedimientos
Cuadro
y funciones
Objeto
mbito de un procedimiento:
Un procedimiento puede ser:
-
Private:
Indica que el procedimiento slo es accesible para los procedimientos
restantes del mdulo en el que se encuentra.
Public:
Indica que el procedimiento es accesible para todos los procedimientos de
todos los mdulos.
Declaracin de Variables
SOFTTRAINING
137
A nivel de mdulo:
Private Nombre As String
Public FechaNacimiento As Date
SOFTTRAINING
138
SOFTTRAINING
139
Autoevaluacin 2
1) Haz un programa que nos permita calcular el rea y la longitud de una
circunferencia a partir del radio, pero de forma visual.
De la siguiente forma:
-
SOFTTRAINING
140
SOFTTRAINING
141
a) Haz el formulario:
Segunda
columna
Tercera
Columna
SOFTTRAINING
142
Segunda columna: b0, b1, b2, b3, b4, b5, b6, b7, b8
Tercera columna: c0, c1, c2, c3, c4, c5, c6, c7, c8.
-
El cdigo es muy sencillo si utilizas 3 matrices: a(0 To 8), b(0 To 8), c(0 To 8)
En la primera matriz asignas: 1, 2, 3, 4, 5, 6, 7, 8, 9.
En la segunda matriz asignas a cada elemento el nmero que tenemos
en [num]
En la tercera matriz asignas el producto del elemento correspondiente
de la primera y segunda matriz.
Por ltimo asignas a nuestros campos del formulario, los valores de las
matrices: [a0] = a(0) : [a1] = a(1) : ....
SOFTTRAINING
143
Deber crear una funcin que calcule el mximo comn divisor de dos
nmeros (MCD)
La mejor forma de programar el MCD de dos nmeros es utilizar el mtodo
de Euclides.
Recordemos el mtodo de Euclides con un ejemplo:
1) Dividimos el mayor entre el menor:
48 entre 36 resulta: Cociente =1 y Resto=12
2) Dividimos el divisor entre el resto:
36 entre 12 resulta: Cociente = 3 y Resto =0
3) Continuamos dividiendo de esta ltima forma: divisor entre resto, hasta
que la divisin sea exacta.
4) El MCD es el ltimo resto distinto de cero (el divisor que nos da la divisin
exacta. Es decir, en nuestro ejemplo: MCD(48, 36) = 12
La function correspondiente podra ser la siguiente:
Function MCD(a As Integer, b As Integer) As Integer
SOFTTRAINING
144
Observa:
- x Mod y es un operador de Visual Basic que nos da el resto de la divisin
entera entre x e y
- Observa la forma de conseguir que la variable a corresponda al nmero
mayor:
If a < b Then
aux = a
a=b
b = aux
End If
Utilizamos lo que se llama una variable auxiliar (aux)
-
SOFTTRAINING
145
SOFTTRAINING
146
Crea otro procedimiento de evento para el Formul1 (Al cerrar el Formul1), que
genere una ventana con el mensaje: Atencin, se va a cerrar el
formulario.
Soluciones de Autoevaluacin 2
1) Eval2A
Private Sub radio_Exit(Cancel As Integer)
DoCmd.OpenForm "Formul2"
Dim r As Double, l As Double, a As Double
If [radio] = "" Then
Exit Sub
End If
r = [radio]
l = 2 * 3.141592 * r
a = 3.141592 * r * r
Forms![Formul2].[longitud] = l
Forms![Formul2].[area] = a
End Sub
SOFTTRAINING
2) Eval2B
Private Sub num_Exit(Cancel As Integer)
Dim a(0 To 8) As Integer
Dim b(0 To 8) As Integer
Dim c(0 To 8) As Integer
For i = 0 To 8
a(i) = i + 1
b(i) = [num]
c(i) = a(i) * b(i)
Next
[a0] = a(0): [a1] = a(1): [a2] = a(2): [a3] = a(3)
[a4] = a(4): [a5] = a(5): [a6] = a(6): [a7] = a(7): [a8] = a(8)
[b0] = b(0): [b1] = b(1): [b2] = b(2): [b3] = b(3)
[b4] = b(4): [b5] = b(5): [b6] = b(6): [b7] = b(7): [b8] = b(8)
[c0] = c(0): [c1] = c(1): [c2] = c(2): [c3] = c(3)
[c4] = c(4): [c5] = c(5): [c6] = c(6): [c7] = c(7): [c8] = c(8)
End Sub
147
SOFTTRAINING
[num] = ""
[a0] = "": [a1] = "": [a2] = "": [a3] = ""
[a4] = "": [a5] = "": [a6] = "": [a7] = "": [a8] = ""
[b0] = "": [b1] = "": [b2] = "": [b3] = ""
[b4] = "": [b5] = "": [b6] = "": [b7] = "": [b8] = ""
[c0] = "": [c1] = "": [c2] = "": [c3] = ""
[c4] = "": [c5] = "": [c6] = "": [c7] = "": [c8] = ""
[num].SetFocus
End Sub
Private Sub salir_Click()
DoCmd.Quit acExit
End Sub
3) Eval2C
Private Sub otra_Click()
[x1] = "": [x2] = "": [x3] = ""
[x4] = "": [x5] = "": [x6] = ""
[x7] = "": [x8] = "": [x9] = ""
[x10] = ""
[des1] = "": [des2] = "": [des3] = ""
[des4] = "": [des5] = "": [des6] = ""
[des7] = "": [des8] = "": [des9] = ""
[des10] = ""
[descua1] = "": [descua2] = "": [descua3] = ""
[descua4] = "": [descua5] = "": [descua6] = ""
[descua7] = "": [descua8] = "": [descua9] = ""
[descua10] = ""
[med] = "": [d] = "": [var] = "": [destip] = ""
[x1].SetFocus
End Sub
148
SOFTTRAINING
149
End Sub
4) Eval2D
Private Sub cden1_Exit(Cancel As Integer)
SOFTTRAINING
5) Eval2E
Private Sub Campo3_Exit(Cancel As Integer)
If [Campo3] > 1000 Then
[Campo7] = "Demasiado grande"
[Campo4] = "Mayor que 1000"
[Campo6].SetFocus
Else
[Campo7] = "Vale"
[Campo4] = "No es mayor que 1000"
End If
End Sub
Private Sub Form_Close()
MsgBox "Atencin, se va a cerrar el formulario"
End Sub
150