- Objetivos
- Nombres Automáticos en
VB - Valores
- Resumen de tipos de
datos - Subrutinas y
Funciones - For…Next
(Instrucción) - Mejoras a
la interfaz
- Facilidad para extender e interactuar con otras
aplicaciones. - Llamadas al API
- Msdn.Microsoft.com
- Soporte de componentes de terceros
- Contiene Herramientas
integradas al ambiente
para depuración e incremento de productividad.
Ediciones de VB
- Aprendizaje
- Profesional
- Empresarial
Edición de Aprendizaje
- Creación de aplicaciones para Windows
95/98/Me/NT/XP - Controles Intrínsecos
- Controles Adicionales
- Curso de "Aprenda Visual Basic
6.0 Ya" - Librería de documentación en Pantalla
Edición Profesional
- Todo lo de la Edición de Aprendizaje,
menos el curso de visual basic - Controles Adicionales
- Generación de Controles
- Generación de Aplicaciones para
IIS - Herramientas para modelado y acceso a datos.
- Todo lo de la Edición Profesional
- Generación de Aplicaciones
Distribuidas - Aplicaciones que se ejecutan en un Navegador de
Internet.
- Aplicaciones que se ejecutan en un Navegador de
- Componentes del BackOffice
- BackOffice = Suite de Programas que se instalan en un servidor para poder
ofrecer diferentes servicios.
- SQL Server
- Para el Manejo y Administración de Bases de
Datos.
- Para el Manejo y Administración de Bases de
- MTS (Microsoft Transaction Server)
- IIS (Internet Information Server)
- SNA (System Network Architecture)
- Visual Source Safe
- ASP (Active Server Pages)
- BackOffice = Suite de Programas que se instalan en un servidor para poder
Ejemplo de programación en base a Eventos
1.5.1 Nombres
Automáticos en VB
Prefijos
Para ver el gráfico seleccione la
opción ¨Descargar
trabajo¨
del menú superior
Ejemplo
lblSalir = Etiqueta con el Nombre Salir.
MsgBox (Función)
Muestra un mensaje en un cuadro de diálogo,
espera a que el usuario haga clic en un botón y devuelve
un tipo Integer correspondiente al botón elegido por el
usuario.
Sintaxis
MsgBox(prompt[, buttons][, title][, helpfile,
context])
La sintaxis de la función MsgBox consta de
estos argumentos con
nombre:
Para ver
el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
El argumento
buttons tiene estos valores:
Para ver
el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
El primer grupo de
valores (0 a 5) describe el número y el tipo de los
botones mostrados en el cuadro de diálogo; el segundo
grupo (16, 32, 48, 64) describe el estilo del icono, el tercer
grupo (0, 256, 512) determina el botón predeterminado y el
cuarto grupo (0, 4096) determina la modalidad del cuadro de
mensajes. Cuando se suman números para obtener el valor final
del argumento buttons, se utiliza solamente un número de
cada grupo.
Nota Estas constantes
las especifica Visual Basic for
Applications. Por tanto, el nombre de las mismas puede utilizarse
en cualquier lugar del código
en vez de sus valores reales.
Valores devueltos
Para
ver el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Cuando se proporcionan tanto helpfile como context, el
usuario puede presionar F1 para ver el tema de Ayuda
correspondiente al context. Algunas aplicaciones
host, por ejemplo Microsoft
Excel, también agregan automáticamente un
botón Ayuda al cuadro de diálogo.
Si el cuadro de diálogo cuenta con un
botón Cancelar, presionar la tecla ESC tendrá el
mismo efecto que hacer clic en este botón. Si el cuadro de
diálogo contiene un botón Ayuda, se suministra
ayuda interactiva para ese cuadro de diálogo. Sin embargo,
no se devuelve valor alguno hasta que se hace clic en uno de
estos botones.
Nota Si desea especificar más
que el primer argumento con nombre, debe utilizar MsgBox en
una expresión.
Si desea omitir algún argumento de
posición, debe incluir el delimitador de coma
correspondiente.
InputBox (Función)
Muestra un mensaje en un cuadro de diálogo,
espera que el usuario escriba un texto o haga
clic en un botón y devuelve un tipo String con el
contenido del cuadro de texto.
Sintaxis
InputBox(prompt[, title][, default][, xpos][, ypos][,
helpfile, context])
La sintaxis de la función InputBox consta de
estos argumentos con
nombre:
Para ver
el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Cuando se especifica tanto helpfile como context, el
usuario puede presionar F1 para ver el tema de Ayuda
correspondiente a context. Algunas aplicaciones
host, por ejemplo, Microsoft Excel,
también agregar automáticamente un botón
Ayuda al cuadro de diálogo. Si el usuario hace clic en
Aceptar o presiona Entrar , la función InputBox devuelve
lo que haya en el cuadro de texto. Si el usuario hace clic en
Cancelar, la función devuelve una cadena de caracteres de
longitud cero ("").
Nota Si desea especificar más
que el primer argumento con nombre, debe utilizar InputBox en
una expresión.
Si desea omitir algunos argumentos
de posición, debe incluir el delimitador de coma
correspondiente.
Descripción del alcance de las
variables
El alcance de una variable define qué partes del
código son conscientes de su existencia. Cuando declara
una variable en un procedimiento,
sólo el código de dicho procedimiento puede tener
acceso o modificar el valor de la variable; tiene un alcance que
es local al procedimiento. A veces, sin embargo, se necesita usar
una variable con un alcance más general, como aquella cuyo
valor está disponible para todos los procedimientos
del mismo módulo o incluso para todos los procedimientos
de toda la aplicación. Visual Basic le permite especificar
el alcance de una variable cuando la declara.
Establecer el alcance de las variables
Dependiendo de cómo se declara, una variable
tiene como alcance un procedimiento (local) o un
módulo.
Para ver el gráfico seleccione la
opción ¨Descargar trabajo¨ del menú
superior
Variables utilizadas en un procedimiento
Las variables a
nivel de procedimiento sólo se reconocen en el
procedimiento en el que se han declarado. Se las conoce
también como variables locales. Se declaran mediante las
palabras clave Dim o Static. Por ejemplo:
Dim intTemp As Integer
–o bien–
Static intPermanent As Integer
Los valores de variables locales declaradas con Static
existen mientras se ejecuta la aplicación, mientras que
las variables declaradas con Dim sólo existen mientras se
ejecuta el procedimiento.
Las variables locales resultan una elección
apropiada para cálculos temporales. Por ejemplo, puede
crear una docena de procedimientos distintos que contengan una
variable llamada intTemp. Como cada intTemp se ha declarado como
una variable local, cada procedimiento sólo reconoce su
propia versión de intTemp. Cualquier procedimiento puede
alterar el valor de su intTemp local sin que ello afecte a las
variables intTemp de los demás procedimientos.
Variables utilizadas en un módulo
De forma predeterminada, una variable a nivel de
módulo está disponible para todos los
procedimientos del módulo, pero no para el código
de otros módulos. Cree variables a nivel de módulo
declarándolas con la palabra clave Private en la
sección Declaraciones al principio del módulo. Por
ejemplo:
Private intTemp As Integer
A nivel de módulo, no hay diferencia entre
Private y Dim, pero es preferible Private porque contrasta con
Public y hace que el código sea más fácil de
comprender.
Variables utilizadas por todos los
módulos
Para hacer que una variable a nivel de módulo
esté disponible para otros módulos, utilice la
palabra clave Public para declarar la variable. Los valores de
las variables públicas están disponibles para todos
los procedimientos de la aplicación. Al igual que todas
las variables a nivel de módulo, las variables
públicas se declaran en la sección Declaraciones al
principio del módulo. Por ejemplo:
Public intTemp As Integer
Nota No puede declarar variables
públicas en un procedimiento, sólo en la
sección Declaraciones de un módulo.
Para obtener más información Para obtener
más información acerca de las variables, vea "Temas
avanzados sobre variables" en este capítulo.
Dim (Instrucción)
Declara variables y
les asigna espacio de almacenamiento.
Sintaxis
Dim [WithEvents] nombre_variable[([subíndices])]
[As [New] tipo] [, [WithEvents]
nombre_variable[([subíndices])] [As [New] tipo]] . .
.
La sintaxis de la instrucción Dim consta de las
siguientes partes:
Para ver el
gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Las variables declaradas con Dim en el nivel de
módulo están disponibles para
todos los procedimientos disponibles sólo dentro de
ese módulo.
En el nivel de
procedimiento, las variables sólo
están disponibles dentro de ese procedimiento.
Utilice la instrucción Dim en el nivel de
módulo o de procedimiento para declarar el tipo de datos
de una variable. Por ejemplo, la siguiente instrucción
declara una variable como Integer.
Dim NúmeroDeEmpleados As Integer
También puede utilizar una instrucción Dim
para declarar el tipo de objeto de una variable. La siguiente
línea declara una variable para una nueva instancia de una
hoja de
cálculo.
Dim X As New Worksheet
Si no utiliza la palabra clave New al declarar una
variable de objeto, la variable que se refiere al objeto debe
asignarse a un objeto existente mediante la instrucción
Set antes de su uso. Hasta que se le asigne un objeto, la
variable de objeto declarada tiene el valor especial Nothing, el
cual indica que no se refiere a ninguna instancia en particular
de un objeto.
También puede utilizar la instrucción Dim
con paréntesis vacíos para declarar matrices
dinámicas. Después de declarar una matriz
dinámica, use la instrucción ReDim
dentro de un procedimiento para definir el número de
dimensiones y elementos de la matriz. Si intenta volver a
declarar una dimensión para una variable de matriz cuyo
tamaño se ha especificado explícitamente en una
instrucción Private, Public o Dim, ocurrirá un
error.
Si no especifica un tipo de datos o un tipo de objeto y
no existe ninguna instrucción Deftipo en el módulo,
la variable predeterminada será Variant.
Cuando se inicializan variables, una variable
numérica se inicializa con 0, una cadena de longitud
variable se inicializa con una cadena de longitud 0 ("") y una
cadena de longitud fija se llena con ceros. Las variables Variant
se inicializan con Empty. Cada
elemento de una variable de un tipo definido por el usuario se
inicializa como si fuera una variable distinta.
Nota Cuando utiliza la
instrucción Dim en un procedimiento, generalmente pone la
instrucción Dim al principio del mismo.
Public (Instrucción)
Se usa en el nivel de
módulo para declarar variables
públicas y asignarles espacio para
almacenamiento.
Sintaxis
Public [WithEvents]
nombre_variable[([subíndices])] [As [New] tipo]
[,[WithEvents] nombre_variable[([subíndices])] [As [New]
tipo]] . . .
La sintaxis de la instrucción Public consta de
las siguientes partes:
Para ver el gráfico seleccione la
opción ¨Descargar trabajo¨ del menú
superior
Comentarios
Las variables declaradas mediante la instrucción
Public están disponibles para todos los procedimientos en
todos los módulos de todas las aplicaciones, a menos que
Option Private Module esté en efecto; en este caso, las
variables sólo son públicas dentro del
proyecto
en el que residen.
Precaución La instrucción
Public no se puede usar en un módulo de clase para
declarar una variable de cadena de longitud fija.
Use la instrucción Public para declarar el tipo
de datos de una variable. Por ejemplo, la instrucción
siguiente declara una variable como de tipo Integer:
Public NúmeroDeEmpleados As Integer
Utilice también la instrucción Public para
declarar el tipo de objeto de una variable. La instrucción
siguiente declara una variable para una nueva instancia de una
hoja de cálculo.
Public X As New Worksheet
Si no utiliza la palabra clave New al declarar una
variable de objeto, la variable que se refiere a un objeto debe
asignarse a un objeto existente mediante la instrucción
Set antes de que se pueda usar. Hasta que se le asigne un objeto,
la variable de objeto declarada tiene el valor especial Nothing,
el cual indica que no se refiere a ninguna instancia en
particular de un objeto.
También puede utilizar una instrucción
Public con paréntesis vacíos para declarar matrices
dinámicas. Después de declarar una matriz
dinámica, use la instrucción ReDim dentro de un
procedimiento para definir el número de dimensiones y
elementos de la matriz. Si intenta volver a declarar un
dimensión para una matriz cuyo tamaño se ha
especificado explícitamente en una instrucción
Private, Public o Dim, ocurrirá un error.
Si no especifica un tipo de datos o un tipo de objeto y
no existe una instrucción Deftipo en el módulo, la
variable es Variant de manera predeterminada.
Cuando se inicializan las variables, una variable
numérica se inicializa a 0, una cadena de longitud
variable se inicializa a una cadena de longitud cero ("") y una
cadena de longitud fija se rellena con ceros. Las variables
Variant se inicializan a Empty. Cada
elemento de una variable de un tipo definido por el usuario se
inicializa como si fuera una variable distinta.
La tabla siguiente muestra
los tipos de
datos compatibles, incluyendo el tamaño
de almacenamiento y el intervalo.
Para ver el gráfico seleccione la opción
¨Descargar trabajo¨ del menú superior
Nota Las matrices de
cualquier tipo de datos requieren 20 bytes de memoria
más cuatro bytes para cada dimensión de matriz,
más el número de bytes que ocupan los propios
datos. Puede calcular la memoria que
ocupan los datos multiplicando el número de elementos de
datos por el tamaño de cada elemento. Por ejemplo, los
datos de una matriz unidimensional que consten de cuatro
elementos de datos tipo Integer de dos bytes cada uno, ocupan
ocho bytes. Los ocho bytes que requieren los datos más los
24 bytes necesarios para la matriz suman un requisito total de
memoria de 32 bytes para dicha matriz.
Un tipo Variant que contiene una matiz requiere 12 bytes
más que la matriz por sí sola.
Load (Instrucción)
Carga en memoria un formulario o un control.
Sintaxis
Load objeto
El marcador de posición objeto es el nombre de un
objeto Form, un objeto MDIForm o un elemento de una matriz de
controles para cargar.
Comentarios
No es necesario usar la instrucción Load con
formularios a
menos que desee cargar un formulario sin presentarlo. Cualquier
referencia a un formulario (excepto en una instrucción Set
o If…TypeOf) lo carga automáticamente si no está
ya cargado. Por ejemplo, el método
Show carga los formularios antes de presentarlos. Una vez cargado
el formulario, la aplicación puede alterar sus propiedades
y controles, sea o no visible actualmente el formulario. En
algunas circunstancia, puede que desee cargar todos los
formularios en la inicialización y presentarlos
después cuando sean necesarios.
Cuando Visual Basic carga un objeto Form, establece las
propiedades del formulario a sus valores iniciales y
después ejecuta el procedimiento de evento Load. Cuando se
inicia una aplicación, Visual Basic carga y presenta
automáticamente el formulario inicial de la
aplicación.
Si carga un objeto Form cuya propiedad
MDIChild es True (es decir, el formulario secundario) antes de
cargar el objeto MDIForm, el objeto MDIForm se carga
automáticamente antes que el formulario secundario. Los
formularios MDI
secundarios no pueden estar ocultos y, por
tanto, son visibles inmediatamente después de terminar el
procedimiento de evento Form_Load.
No es necesario cargar, mostrar o descargar los cuadros
de diálogo estándar producidos por funciones de
Visual Basic como MsgBox y InputBox; se pueden invocar
directamente.
Hide (Método)
Oculta un objeto MDIForm o Form pero no lo
descarga.
Sintaxis
objeto.Hide
El marcador de posición objeto representa
una expresión de
objeto que da como resultado un objeto de la
lista Se aplica a. Si se omite objeto, se supone que objeto es el
formulario que tenga el enfoque.
Comentarios
Cuando se oculta un formulario, se quita de la pantalla
y su propiedad Visible queda establecida a False. Los controles
de un formulario oculto no son accesibles para el usuario, pero
están disponibles para la aplicación de Visual
Basic en ejecución y para otros procesos que
se estén comunicando con la aplicación mediante
DDE, así como para los eventos del
control Timer.
Cuando se oculta un formulario, el usuario no puede
interactuar con la aplicación hasta que el código
del procedimiento de evento que ha provocado la ocultación
del formulario haya terminado de ejecutarse.
Si el formulario no está cargado cuando se llama
al método Hide, el método Hide carga el formulario
pero no lo presenta.
Nota Al cerrar un formulario modal que
se ha abierto desde otro formulario modal, el siguiente
código funcionaba en versiones anteriores de Visual
Basic:
Me.Hide
Me.Hide ' Esto ahora provoca un error.
En versiones actuales de Visual Basic, este
código falla en el segundo Me.Hide. Puede sustituir
Me.Hide con Me.Visible = False como se muestra a
continuación:
Me.Visible = False
Me.Visible = False ' No sucede ningún
error.
Unload (Instrucción)
Descarga de memoria un formulario o un
control.
Sintaxis
Unload objeto
El marcador de posición objeto es el nombre de un
objeto Form o de un elemento de una matriz de controles
para descargar.
Comentarios
La descarga de un formulario o de un controle puede ser
necesaria o conveniente en aquellos casos en los que la memoria
utilizada sea necesaria para alguna otra tarea o cuando sea
necesario restablecer las propiedades a sus valores
originales.
Antes de descargar un formulario se produce el evento
Query_Unload, seguido del procedimiento de evento Form_Unload. Si
establece el argumento cancelar a True en alguno de estos eventos
no se descargará el formulario. En los objetos MDIForm se
produce el procedimiento de evento Query_Unload del objeto
MDIForm, seguido del procedimiento de evento Query_Unload y del
procedimiento de evento Form_Unload de cada formulario
secundario
MDI; finalmente se produce el procedimiento de
evento Form_Unload del objeto MDIForm.
Cuando se descarga un formulario, todos los controles
colocados en el formulario en tiempo de
ejecución no son accesibles. Los
controles colocados en el formulario en tiempo de
diseño permanecen intactos; sin embargo,
cualquier cambio en
tiempo de
ejecución sobre dichos controles y sus propiedades se
pierden cuando se vuelve a cargar el formulario. También
se pierden todos los cambios realizados en las propiedades del
formulario. El acceso a algún control del formulario hace
que éste se vuelva a cargar.
Nota Cuando se descarga un formulario,
sólo se descarga el componente mostrado. El código
asociado al módulo del formulario permanece en
memoria.
Con la instrucción Unload sólo se pueden
descargar los elementos de las matrices de controles agregados a
un formulario en tiempo de ejecución. Las propiedades de
los controles descargados se reinicializan cuando se cargan de
nuevo los controles.
Show (Método)
Presenta un objeto MDIForm o Form. No acepta
argumentos con
nombre.
Sintaxis
objeto.Show estilo, formularioPropietario
La sintaxis del método Show consta de las
siguientes partes:
Para ver el
gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Si el formulario especificado no está cargado
cuando se invoca el método Show, Visual Basic lo carga
automáticamente.
Cuando Show presenta un formulario no modal,
continúa con la ejecución del código que
haya a continuación. Cuando Show presenta un formulario
modal, el código que hay a continuación no se
ejecuta hasta que el formulario se oculta o se
descarga.
Cuando Show presenta un formulario modal, no hay
entradas (de teclado o del
mouse) excepto
sobre los objetos del formulario modal. El programa debe
ocultar o descargar los formularios modales (normalmente como
respuesta a alguna acción
del usuario) antes de que pueda producirse la entrada en otro
formulario. Los formularios MDIForm no pueden ser
modales.
Aunque los demás formularios de la
aplicación están deshabilitados cuando se presenta
un formulario modal, los de las demás aplicaciones no lo
están.
El formulario inicial de una aplicación se
muestra automáticamente después de invocar su
evento Load.
He aquí un ejemplo de cómo se utiliza el
argumento formularioPropietario con el método
Show:
Private Sub cmdShowResults_Click()
' Muestra un formulario modal llamado
frmResults.
frmResults.Show vbModal, Me
End Sub
SetFocus (Método)
Mueve el enfoque al
control o formulario especificado.
Sintaxis
objeto.SetFocus
El marcador de posición objeto representa
una expresión de
objeto que da como resultado un objeto de la
lista Se aplica a.
Comentarios
El objeto debe ser un objeto Form, un objeto MDIForm o
un control que pueda recibir el enfoque. Después de
invocar el método SetFocus, cualquier entrada del usuario
se dirige al formulario o al control especificado.
El enfoque sólo se puede mover a un formulario o
un control visible. Como un formulario y los controles de un
formulario no son visibles hasta que el evento Load del
formulario ha terminado, no puede usar en su propio evento Load
el método SetFocus para mover el enfoque al formulario que
se está cargando a menos que use primero el método
Show para mostrar el formulario antes de que el procedimiento de
evento Form_Load haya terminado.
Tampoco puede mover el enfoque a un formulario o un
control si su propiedad Enabled es False. Si la propiedad Enabled
se ha establecido a False en tiempo de
diseño, primero debe establecerla a True
antes de poder recibir el enfoque mediante el método
SetFocus.
método
Una acción que un objeto es capaz de realizar.
Por ejemplo, los cuadros de lista tienen métodos
llamados AddItem, RemoveItem y Clear para mantener el contenido
de las listas. Vea también objeto.
propiedad
Un atributo con nombre de un objeto. Las propiedades
definen las características del objeto, como su
tamaño y nombre, o el estado de
un objeto, como habilitado o deshabilitado. Se pueden establecer
propiedades para tablas, columnas, índices, restricciones,
claves y relaciones.
evento
Una acción, reconocida por un objeto, para la
cual puede escribir código de respuesta. Los eventos
pueden estar generados por una acción del usuario, como
hacer clic con el mouse o presionar una tecla, por código
de programa o por el sistema, como
ocurre con los cronómetros.
Form (Objeto), Forms
(Colección)
Un objeto Form es una ventana o un cuadro de
diálogo que forma parte de la interfaz de usuario de una
aplicación.
Forms es una colección
cuyos elementos representan cada formulario cargado en una
aplicación. La colección incluye el formulario
MDI, el formulario secundario
MDI y formularios no MDI de la
aplicación. La colección Forms tiene una
única propiedad, Count, que especifica el número de
elementos de la colección.
Sintaxis
Form
Forms(índice)
El marcador de posición índice representa
un entero entre 0 y Forms.Count – 1.
Comentarios
Puede usar la colección Forms para iterar a
través de todos los formularios cargados en una
aplicación. Identifica una variable global
intrínseca denominada Forms. Puede pasar
Forms(índice) a una función cuyo argumento se
especifica como una clase Forms.
Los formularios tienen propiedades que determinan
aspectos de su apariencia (como posición, tamaño y
color) y aspectos
de su comportamiento
(como si puede ajustar o no su tamaño).
Los formularios también pueden responder a
eventos iniciados por un usuario o desencadenados por el sistema.
Por ejemplo, podría escribir código en el
procedimiento de evento Click de un formulario que permitiera al
usuario cambiar el color de un formulario haciendo clic en
él.
Además de propiedades y eventos, puede emplear
métodos para manipular formularios mediante código.
Por ejemplo, puede usar el método Move para cambiar la
ubicación y el tamaño de un formulario.
Un tipo especial de formulario, el formulario MDI, puede
contener otros formularios llamados formularios secundarios MDI.
Un formulario MDI se crea con el comando Agregar formulario MDI
del menú Proyecto; un
formulario secundario MDI se crea eligiendo Nuevo formulario en
el menú Archivo y, a
continuación, estableciendo la propiedad MDIChild a
True.
Puede crear múltiples instancias de formularios
en código si utiliza la palabra clave New en instrucciones
Dim, Set y Static.
Al diseñar formularios, establezca la propiedad
BorderStyle para definir el borde del formulario y establezca la
propiedad Caption para colocar texto en la barra de
título. En el código puede usar los métodos
Hide y Show para hacer que los formularios sean invisibles o
visibles en tiempo de
ejecución.
Nota Si establece BorderStyle a 0 se
eliminará el borde. Si desea que el formulario tenga borde
sin barra de título, cuadro del menú Control,
botón Maximizar y botón Minimizar, elimine texto de
la propiedad Caption y establezca a False las propiedades
ControlBox, MaxButton y MinButton.
Form es un tipo de datos
Object. Puede declarar variables como de tipo
Form antes de establecerlas a una instancia de un tipo de
formulario que se ha declarado en tiempo de
diseño. Del mismo modo, puede pasar un
argumento a un procedimiento como de tipo Form.
Los formularios pueden actuar como origen en una
conversación DDE, con un control Label, PictureBox o
TextBox proporcionando los datos.
Puede tener acceso a la colección de controles de
un Form mediante la colección Controls. Por ejemplo, para
ocultar todos los controles de un Form puede usar código
similar al siguiente:
For Each Control in Form1.Controls
Control.Visible = False
Next Control
Crear tipos de datos
propios
Se pueden combinar variables de varios tipos diferentes
para crear tipos definidos por el usuario (conocidos como structs
en el lenguaje de
programación C). Los tipos definidos por el usuario
son útiles si se quiere crear una única variable
que registre varias unidades de información
relacionadas.
Puede crear un tipo definido por el usuario con la
instrucción Type, que debe colocar en la sección
Declaraciones del módulo. Los tipos definidos por el
usuario pueden declararse como Private o como Public mediante la
palabra clave apropiada. Por ejemplo:
Private Type MiTipoDeDatos
–o bien–
Public Type MiTipoDeDatos
Por ejemplo, podría crear un tipo definido por el
usuario que registrara información acerca del sistema de
un equipo:
' Declaraciones (de un módulo
estándar).
Private Type SystemInfo
CPU As Variant
Memory As Long
VideoColors As Integer
Cost As Currency
PurchaseDate As Variant
End Type
Declarar variables de un tipo definido por el
usuario
Para el mismo tipo definido por el usuario puede
declarar variables locales, variables privadas de módulo o
variables públicas de módulo:
Dim MiSistema As SystemInfo, SuSistema As
SystemInfo
En la tabla siguiente se ilustra dónde y con
qué alcance puede declarar los tipos definidos por el
usuario y sus variables.
Para ver
el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Nota Si realiza declaraciones de
variables usando la palabra clave Dim, los tipos definidos por el
usuario en módulo de clase o estándar serán
Public de forma predeterminada. Si quiere que un tipo definido
por el usuario sea privado, asegúrese de declararlo usando
la palabra clave Private.
Asignar y recuperar valores
Asignar y recuperar los valores de los elementos de esta
variable es similar a establecer y obtener
propiedades:
MiSistema.CPU =
"486"
If MiSistema.PurchaseDate > #1/1/92# Then
También puede asignar una variable a otra si
ambas son del mismo tipo definido por el usuario. En la
línea de código siguiente se asignan todos los
elementos de una variable a los mismos elementos de la otra
variable.
SuSistema = MiSistema
Tipos definidos por el usuario que contienen
matrices
Un tipo definido por el usuario puede contener una
matriz normal (de tamaño fijo). Por ejemplo:
Type SystemInfo
CPU As Variant
Memory As Long
DiskDrives(25) As String ' Matriz de tamaño
fijo.
VideoColors As Integer
Cost As Currency
PurchaseDate As Variant
End Type
También puede contener una matriz
dinámica.
Type SystemInfo
CPU As Variant
Memory As Long
DiskDrives() As String ' Matriz
dinámica.
VideoColors As Integer
Cost As Currency
PurchaseDate As Variant
End Type
Puede tener acceso a los valores de una matriz dentro de
un tipo definido por el usuario de la misma manera en que tiene
acceso a las propiedades de un objeto.
Dim MiSistema As SystemInfo
ReDim MiSistema.DiskDrives(3)
MiSistema.DiskDrives(0) = "1.44 MB"
También puede declarar una matriz de tipos
definidos por el usuario:
Dim TodosSistemas(100) As SystemInfo
Siga las mismas reglas para tener acceso a los
componentes de esta estructura de
datos.
TodosSistemas(5).CPU = "386SX"
TodosSistemas(5).DiskDrives(2) = "SCSI de 100
MB"
Pasar tipos definidos por el usuario a
procedimientos
Puede pasar argumentos de procedimiento mediante un tipo
definido por el usuario.
Sub FillSystem (UnSistema As SystemInfo)
UnSistema.CPU = lstCPU.Text
UnSistema.Memory = txtMemory.Text
UnSistema.Cost = txtCost.Text
UnSistema.PurchaseDate = Now
End Sub
Nota Si desea pasar un tipo definido
por el usuario a un módulo de formulario, el procedimiento
debe ser privado.
Puede devolver tipos definidos por el usuario desde
funciones y puede pasar una variable de un tipo definido por el
usuario a un procedimiento como un argumento. Los tipos definidos
por el usuario siempre se pasan por referencia, de modo que el
procedimiento puede modificar el argumento y devolverlo al
procedimiento que lo ha llamado, como se muestra en el ejemplo
anterior.
Nota Debido a que los tipos definidos
por el usuario siempre se pasan por referencia, todos los datos
contenidos en dichos tipos se pasarán y se
devolverán desde el procedimiento. En el caso de tipos
definidos por el usuario con matrices de gran tamaño, esto
podría originar una reducción de las prestaciones,
especialmente en aplicaciones cliente/servidor,
en las que el procedimiento se puede ejecutar desde un equipo
remoto. En tal caso, es preferible extraer y pasar
únicamente los datos necesarios del tipo definido por el
usuario.
Para obtener más
información Para obtener más
detalles acerca del paso por referencia, vea "Pasar argumentos a
procedimientos" en "Fundamentos de
programación".
Tipos definidos por el usuario que contienen
objetos
Los tipos definidos por el usuario también pueden
contener objetos.
Private Type AccountPack
frmInput as Form
dbPayRollAccount as Database
End Type
Sugerencia Como el tipo de datos
Variant puede almacenar muchos tipos de datos diferentes, puede
usar una matriz Variant en muchas situaciones en las que
usaría un tipo definido por el usuario. De hecho, una
matriz Variant es más flexible que un tipo definido por el
usuario, ya que puede modificar el tipo de los datos almacenados
en cada elemento en cualquier momento y puede convertir la matriz
en dinámica para modificar su tamaño cuando sea
necesario. Sin embargo, una matriz Variant siempre utiliza
más memoria que un tipo definido por el usuario
equivalente.
Anidar estructuras de
datos
El anidamiento de estructuras de datos puede ser tan
complejo como se quiera. De hecho, los tipos definidos por el
usuario pueden contener otros tipos definidos por el usuario,
como se muestra en el ejemplo siguiente. Para hacer que el
código sea más legible y fácil de depurar,
procure escribir en un único módulo todo el
código de los tipos de datos definidos por el
usuario.
Type DriveInfo
Type As String
Size As Long
End Type
Type SystemInfo
CPU As Variant
Memory As Long
DiskDrives(26) As DriveInfo
Cost As Currency
PurchaseDate As Variant
End Type
Dim AllSystems(100) As SystemInfo
AllSystems(1).DiskDrives(0).Type = "Floppy"
UNIDAD II
Sub (Instrucción)
Declara el nombre, los argumentos, y
el código que componen el cuerpo de un procedimiento
Sub.
Sintaxis
[Private | Public | Friend] [Static] Sub nombre
[(lista_argumentos)]
[instrucciones]
[Exit Sub]
[instrucciones]
End Sub
La sintaxis de la instrucción Sub consta de las
siguientes partes:
Para ver el
gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
El argumento lista_argumentos consta de las siguientes
partes y sintaxis:
[Optional] [ByVal | ByRef] [ParamArray]
nombre_variable[( )] [As tipo] [=
valor_predeterminado]
Para ver el
gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Si no se especifica explícitamente mediante
Public, Private o Friend, los procedimientos Sub son
públicos de manera predeterminada. Si no se usa Static, el
valor de las variables locales no se mantiene entre distintas
llamadas. La palabra clave Friend solamente se puede usar en
módulos de clase. Sin embargo, los procedimientos en
cualquier módulo de un proyecto pueden acceder a los
procedimientos Friend. Un procedimiento Friend no aparece en
la biblioteca
de tipo de su clase primaria, ni se puede
enlazar posteriormente.
Precaución Los procedimientos
Sub pueden ser recursivos; es decir, se pueden llamar a sí
mismos para realizar una tarea determinada. Sin embargo, esto
puede llevar al desbordamiento de la pila. La palabra clave
Static generalmente no se utiliza con procedimientos recursivos
Sub.
Todo código ejecutable debe estar en
procedimientos.
No puede definir un procedimiento Sub dentro de otro
procedimiento Sub, Function o Property.
Las palabras clave Exit Sub causan la inmediata salida
de un procedimiento Sub. La ejecución del programa
continúa con la instrucción que sigue a la
instrucción que llamó el procedimiento Sub.
Cualquier número de instrucciones Exit Sub puede aparecer
en cualquier lugar de un procedimiento Sub.
Al igual que un procedimiento Function, un procedimiento
Sub es un procedimiento distinto que toma argumentos, lleva a
cabo una serie de instrucciones y cambia el valor de sus
argumentos. Sin embargo, a diferencia de un procedimiento
Function, el cual devuelve un valor, un procedimiento Sub no se
puede utilizar en una expresión.
Para llamar a un procedimiento Sub, use el nombre del
procedimiento seguido de la lista de argumentos. Consulte la
instrucción Call para obtener información
específica acerca de cómo llamar a los
procedimientos Sub.
Las variables usadas en procedimientos Sub se dividen en
dos categorías: las que están explícitamente
declaradas dentro del procedimiento y las que no lo están.
Las variables declaradas explícitamente en un
procedimiento (mediante Dim o un equivalente) siempre son locales
del procedimiento. Otras variables usadas pero no declaradas
explícitamente en un procedimiento también son
locales, a menos que se declaren explícitamente en
algún nivel superior fuera del procedimiento.
Precaución Un procedimiento
puede usar una variable que no esté declarada
explícitamente en el procedimiento, pero puede ocurrir un
conflicto de
nombres si cualquier cosa que ha definido en el nivel de
módulo tiene el mismo nombre. Si el
procedimiento se refiere a una variable no declarada que tiene el
mismo nombre que otro procedimiento, constante o variable, se
supone que el procedimiento se está refiriendo al nombre
de ese nivel de módulo. Para evitar este tipo de conflictos,
declare las variables explícitamente. Puede usar una
instrucción Option Explicit para forzar la
declaración explícita de variables.
Nota No se puede usar GoSub, GoTo o
Return para obtener acceso o salir de un procedimiento
Sub.
Function (Instrucción)
Declara el nombre, los argumentos y
el código que componen el cuerpo de un procedimiento
Function.
Sintaxis
[Public | Private | Friend] [Static] Function nombre
[(lista_argumentos)] [As tipo]
[instrucciones]
[nombre = expresión]
[Exit Function]
[instrucciones]
[nombre = expresión]
End Function
La sintaxis de la instrucción Function consta de
las siguientes partes:
Para ver
el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
El argumento lista_argumentos tiene la siguiente
sintaxis y partes:
[Optional] [ByVal | ByRef] [ParamArray]
nombre_variable[( )] [As tipo] [=
valor_predeterminado]
Para ver el
gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Si no se especifican de forma explícita mediante
Public, Private o Friend, los procedimientos Function son
públicos de manera predeterminada. Si no se emplea Static,
el valor de las variables locales no se conserva entre distintas
llamadas. La palabra clave Friend sólo puede usarse en
módulos de clase. Sin embargo, puede accederse a los
procedimientos Friend por procedimientos en cualquier
módulo de un proyecto. Un procedimiento Friend no aparece
en la biblioteca de
tipos de su clase primaria.
Precaución Los procedimientos
Function pueden ser recursivos; es decir, pueden llamarse a
sí mismos para realizar una tarea determinada. Sin
embargo, la recursión puede provocar el desbordamiento de
pila. La palabra clave Static no se suele utilizar con
procedimientos Function recursivos.
Todo el código ejecutable debe estar dentro de
procedimientos. No puede definir un procedimiento Function dentro
de otro procedimiento Function, Sub o Property.
La instrucción Exit Function produce una salida
inmediata de un procedimiento Function. La ejecución del
programa continúa con la instrucción que sigue a la
instrucción que llamó al procedimiento Function. En
cualquier lugar de un procedimiento Function puede aparecer
cualquier número de instrucciones Exit
Function.
Al igual que un procedimiento Sub, un procedimiento
Function es un procedimiento independiente que puede adoptar
argumentos, realizar una serie de instrucciones y cambiar los
valores de sus argumentos. Sin embargo, a diferencia de un
procedimiento Sub, puede utilizar un procedimiento Function en el
lado derecho de una expresión
de la misma forma en que utiliza cualquier función
intrínseca, como Sqr, Cos o Chr, cuando desea emplear el
valor devuelto por la función.
Para llamar a un procedimiento Function, utilice en una
expresión el nombre de función seguido de la lista
de argumentos entre paréntesis. Consulte la
instrucción Call para obtener información
específica acerca de cómo llamar a los
procedimientos Function.
Para devolver un valor de una función, asigne el
valor al nombre de la función. En cualquier lugar del
procedimiento puede aparecer cualquier número de
asignaciones de este tipo. Si no se asigna ningún valor a
nombre, el procedimiento devolverá un valor
predeterminado: una función numérica devuelve 0,
una función de cadena devuelve una cadena de longitud cero
("") y una función Variant devuelve Empty. Una
función que devuelve una referencia de objeto devuelve
Nothing si no se asigna ninguna referencia de objeto a nombre
(mediante Set) dentro del procedimiento Function.
El ejemplo siguiente muestra cómo asignar un
valor de retorno a una función llamada BinarySearch. En
este caso, False se asigna al nombre para indicar que no se
encontró algún valor.
Function BinarySearch(. . .) As Boolean
. . .
' Valor no encontrado. Devuelve un valor
False.
If lower > upper Then
BinarySearch = False
Exit Function
End If
. . .
End Function
Las variables empleadas en procedimientos Function se
dividen en dos categorías: las que se declaran
explícitamente dentro del procedimiento y las que no. Las
variables que se declaran explícitamente en un
procedimiento (mediante Dim u otra instrucción
equivalente) siempre son locales del procedimiento. Las variables
que se utilizan pero no se declaran explícitamente en un
procedimiento también son locales, a menos que se hayan
declarado explícitamente en algún nivel superior
fuera del procedimiento.
Precaución Un procedimiento
puede utilizar una variable que no se ha declarado
explícitamente en el procedimiento, pero puede ocurrir un
conflicto de nombres si algo que definió en un
nivel de
módulo tiene el mismo nombre. Si su
procedimiento hace referencia a una variable no declarada que
tiene el mismo nombre que otro procedimiento, constante o
variable, se supone que el procedimiento hace referencia a ese
nombre a nivel de módulo. Declare explícitamente
las variables para evitar este tipo de conflicto. Puede utilizar
una instrucción Option Explicit para forzar la
declaración explícita de variables.
Precaución Visual Basic puede
reorganizar las expresiones aritméticas para mejorar su
eficacia
interna. Evite utilizar un procedimiento Function en una
expresión aritmética cuando la función
cambie el valor de las variables de la misma
expresión.
IF … ENDIF (Comando)
Ejecuta condicionalmente un conjunto de comandos
dependiendo del resultado de una expresión lógica.
Sintaxis
IF lExpresión [THEN]
Comandos
[ELSE
Comandos]
ENDIF
Argumentos
lExpresión
Especifica la expresión lógica evaluada.
Si lExpresión da como resultado verdadero (.T.), se
ejecutarán cualesquiera instrucciones posteriores a IF y
anteriores a ELSE o ENDIF (lo que suceda primero).
- Si lExpresión es falsa y se incluye ELSE, se
ejecutan los comandos situados después de ELSE y antes
de ENDIF. - Si lExpresión es falsa (.F.) y no se incluye
ELSE, se pasarán por alto todas las instrucciones entre
IF y ENDIF. En este caso la ejecución del programa
continuará con la primera línea de comando a
continuación de ENDIF.
Comentarios
Puede anidar IF … ENDIF dentro de otro
bloque IF … ENDIF.
Los comentarios precedidos de && se pueden
colocar en la misma línea después de IF, ELSE y
ENDIF. Estos comentarios se pasan por alto durante la
compilación y la ejecución del programa.
If…Then…Else (Instrucción)
Ejecuta condicionalmente un grupo de instrucciones,
dependiendo del valor de una expresión.
Sintaxis
If condición Then [instrucciones]-[Else
instrucciones_else]
Puede utilizar la siguiente sintaxis en formato de
bloque:
If condición Then
[instrucciones]
[ElseIf condición-n Then
[instrucciones_elseif] …
[Else
[instrucciones_else]]
End If
La sintaxis de la instrucción If…Then…Else
consta de tres partes:
Para ver
el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Puede utilizar la forma de una sola línea
(Sintaxis 1) para pruebas cortas
y sencillas. Sin embargo, el formato de bloque (Sintaxis 2)
proporciona más estructura y
flexibilidad que la forma de línea simple y, generalmente,
es más fácil de leer, de mantener y de
depurar.
Nota Con la sintaxis es posible
ejecutar múltiples instrucciones como resultado de una
decisión If…Then, pero todas deben estar en la misma
línea y separadas por dos puntos, como en la
instrucción siguiente:
If A > 10 Then A = A + 1 : B = B + A : C = C +
B
Una instrucción con formato de bloque If debe ser
la primera de la línea. Las partes Else, ElseIf y End If,
de la instrucción, solamente pueden ir precedidas de
un número de
línea o una etiqueta de
línea. El bloque If debe terminar con una
instrucción End If.
Para determinar si una instrucción If es un
bloque, examine lo que sigue a la palabra
Then. Si lo que aparece detrás de Then en la misma
línea no es un comentario,
la instrucción se considera como una instrucción If
de una sola línea.
Las cláusulas Else y ElseIf son opcionales. Puede
tener en un bloque ElseIf, tantas cláusulas If como desee,
pero ninguna puede aparecer después de una cláusula
Else. Las instrucciones de bloque If se pueden anidar; es decir,
unas pueden contener a otras.
Cuando se ejecuta un bloque If (Sintaxis 2), se prueba
condición. Si condición es True, se ejecutan las
instrucciones que están a continuación de Then. Si
condición es False, se evalúan una a una las
condiciones ElseIf (si existen). Cuando se encuentra una
condición True se ejecutan las instrucciones que siguen
inmediatamente a la instrucción Then asociada. Si ninguna
de las condiciones ElseIf es True (o si no hay cláusulas
ElseIf), se ejecutan las instrucciones que siguen a Else.
Después de la ejecución de las instrucciones que
siguen a Then o Else, la ejecución continúa con la
instrucción que sigue a End If.
Sugerencia Select Case puede ser
más útil cuando se evalúa una única
expresión que tiene varias acciones
posibles. Sin embargo, la cláusula TypeOf nombre_objeto Is
tipo_objeto no se puede utilizar en una instrucción Select
Case.
Nota No se puede usar TypeOf con tipos
de datos predefinidos como Long, Integer y así
sucesivamente, excepto en el tipo de datos Object.
Select Case (Instrucción)
Ejecuta uno de varios grupos de
instrucciones,
dependiendo del valor de una expresión.
Select Case expresión_prueba
[Case lista_expresion-n
[instrucciones-n]] …
[Case Else
[instrucciones_else]]
End Select
La sintaxis de la instrucción Select Case consta
de las siguientes partes:
Para
ver el gráfico seleccione la opción ¨Descargar
trabajo¨ del menú superior
Comentarios
Si expresión_prueba coincide con cualquier
lista_expresión asociada con una cláusula Case, las
instrucciones que siguen a esa cláusula Case se ejecutan
hasta la siguiente cláusula Case o, para la última
cláusula, hasta la instrucción End Select. El
control pasa después a la instrucción que sigue a
End Select. Si expresión_prueba coincide con una
expresión de lista_expresión en más de una
cláusula Case, sólo se ejecutan las instrucciones
que siguen a la primera coincidencia.
La cláusula Case Else se utiliza para indicar las
instrucciones que se van a ejecutar si no se encuentran
coincidencias entre expresión_prueba y una
lista_expresión en cualquiera de las otras selecciones de
Case. Aunque no es necesario, es buena idea tener una
instrucción Case Else en el bloque Select Case para
controlar valores imprevistos de expresión_prueba. Cuando
no hay una instrucción Case Else y ninguna
expresión de la lista en las cláusulas Case
coincide con la expresión de prueba, la ejecución
continúa en la instrucción que sigue a End
Select.
Se pueden utilizar expresiones múltiples o
intervalos en cada cláusula Case. Por ejemplo, la
línea siguiente es válida:
Case 1 To 4, 7 To 9, 11, 13, Is >
MaxNumber
Nota El operador de comparación
Is no es lo mismo que la palabra clave Is utilizada en la
instrucción Select Case.
También puede especificar intervalos y
expresiones múltiples para cadenas de caracteres. En el
siguiente ejemplo, Case coincide con las cadenas que son
exactamente iguales a todo, cadenas que están entre nueces
y sopa en orden alfabético y el valor actual de
ElemPrueba:
Case "iguales a todo", "nueces" To "sopa",
ElemPrueba
Las instrucciones Select Case se pueden anidar. Cada
instrucción Select Case debe tener su correspondiente
instrucción End Select.
Unidad III