Sunteți pe pagina 1din 18

F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 1

Trabajando con formularios, impresoras y manejando errores

Inclusin de nuevos formularios en un programa
Hasta ahora, cada programa que hemos desarrollado slo ha utilizado un formulario para
entrada y salida. En muchos casos, un formularios es suficiente para realizar la comunicacin del
programa con el usuario. No obstante, si desea aadir ms pantallas o informacin a un
programa, o si necesita obtener ms informacin del usuario, Visual Basic le permitir manejar
ms de un formulario con el mismo programa.
Cada nuevo formulario se considera un nuevo objeto y cuenta con sus propios objetos,
propiedades y procedimientos de suceso. El primer formulario de un programa se llama Form1 y
los formularios siguientes Form2, Form3, etc. En la siguiente tabla se muestran algunos de los
posibles usos de los formularios adicionales que utilice en sus programas.

Formulario o formularios Descripcin
Pantalla de presentacin Pantalla que muestra un mensaje de bienvenida, una imagen
o informacin sobre los derechos de propiedad intelectual al
comienzo del programa.
Instrucciones de programa Pantalla que muestra informacin y consejos para utilizar el
programa.
Cuadros de dilogo Cuadros de dilogo personalizados que aceptan la entrada de
informacin y muestran la salida del programa.
Contenido de documentos y
grfico
Pantalla que muestra el contenido de uno o ms archivos
utilizados en el programa.


Formularios vacos o prediseados

Podr crear un nuevo formulario ejecutando la opcin Agregar Formulario contenido en el men
Proyecto. Al hacerlo, en su pantalla aparecer un cuadro de dilogo solicitndole que especifique
el tipo de formulario que desea crear (cada versin de Visual Basic cuenta con su propio
conjunto de formularios prediseados). Tendr la posibilidad de crear un formulario vaco o
parcialmente desarrollado para llevar a cabo tareas especficas.

Cmo se utilizan los formularios

En Visual Basic, el uso de formularios es una actividad realmente frecuente. Puede hacer que
todos los formularios de un programa sean visibles de forma simultanea o podr cargar y
descargar formularios a medida que el programa los vaya necesitando. Si decide mostrar ms de
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 2

un formulario a la vez, podr permitir al usuario que pase de un formulario a otro o podr
controlar e l orden en que dichos formularios vayan a ser utilizados. Un formulario que tenga que
ser utilizado cuando se muestre por pantalla se denomina formulario modal (el formulario
acaparar la atencin del programa hasta que el usuario pulse Aceptar, Cancelar o sea eliminado
por otros medios).
Un formulario que el usuario puede seleccionar o ignorar en pantalla recibe el nombre de
formulario no modal. La mayora de la aplicaciones desarrolladas para Microsoft Windows utilizan
formularios no modales para mostrar informacin, ya que proporcionan ms flexibilidad de
empleo al usuario. Por ello, cada vez que cree un formulario nuevo, el tipo implcito es el no
modal. Tambin podr establecer de forma independiente cualquier propiedad de un formulario,
incluyendo su ttulo, tamao, estilo de borde, colores de primer y segundo plano, fuente y
dibujo.

Instrucciones de formulario en el cdigo del programa

Despus de crear un nuevo formulario en el entorno de programacin, podr cargarlo en
memoria y acceder al mismo utilizando sentencias especficas en el procedimiento de suceso. La
sentencia utilizada para cargar un nuevo formulario tiene la siguiente sintaxis:
Load NombreForm
Donde NombreForm es el nombre del formulario que se desea cargar. Por ejemplo, la sentencia:
Load Form2
cargar en memoria el segundo formulario de un programa cuando la sentencia se ejecute desde
Visual Basic. Una vez cargado el formulario, podr utilizarlo desde cualquier procedimiento de
suceso del programa y podr acceder a cualquier propiedad o mtodo que desee utilizar del
mismo. Por ejemplo, para asignar la propiedad Caption del segundo formulario de su programa
el valor Universidad Tecnolgica, podra introducir la siguiente sentencia de programa en
cualquier procedimiento de suceso:
Form2.Caption = " Universidad Tecnolgica "
Cuando desee mostrar un formulario cargado deber utilizar el mtodo Show haciendo constar si
es modal o no modal. La sintaxis del mtodo Show es:
NombreForm.Show modo
Donde NombreForm es el nombre del formulario y modo es 0 para no modal (valor implcito) o 1
para modal. Por ejemplo, para mostrar Form2 como formulario no modal (el implcito) podr
utilizar el mtodo Show sin especificar un modo:
Form2.Show
Para mostrar Form2 como formulario modal deber escribir la siguiente instruccin:
Form2.Show 1
Si utiliza el mtodo Show antes de utilizar la sentencia Load, Visual Basic cargar y mostrar
automticamente el formulario especificado. Visual Basic cuenta con una sentencia Load para
permitir que los programadores puedan cargar previamente formularios en memoria, de forma
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 3

que el mtodo Show funcione con mayor rapidez y los usuarios no adviertan ningn retardo en
la ejecucin del programa. La precarga de formularios es una buena costumbre, especialmente
si contienen muchos objetos o imgenes.

Cmo ocultar y descargar formularios

Con el mtodo Hide podr ocultar formularios y podr descargar de la memoria los formularios
utilizando la sentencia Unload. Estas palabras clave son las contrarias a Show y Load,
respectivamente. Al ocultar un formulario lo har desaparecer de la pantalla pero seguir
estando cargado en memoria con lo que podr utilizarlo ms adelante en el programa (ocultar
un formulario es equivalente a hacerlo invisible utilizando la propiedad Visible). Descargar un
formulario es eliminarlo de la memoria. De esta forma, liberar la memoria RAM utilizada para
guardar los objetos y grficos del formulario, pero no liberar el espacio utilizado por los
procedimientos de suceso del formulario. Estos siempre estarn en la memoria. Si, por ejemplo,
desea ocultar y descargar de la memoria el formulario Form2, deber utilizar las palabras claves
Hide y Unload en la siguiente forma:
Form2.Hide
Unload Form2
Cuando descargue un formulario, sus valores y propiedades en tiempo de ejecucin se perdern.
Si vuelve a cargar el formulario, ste contendr los valores originales asignados en el cdigo de
programa.

Minimizacin de formularios

Tambin podr minimizar el tamao de un formulario (colocarlo en la barra de tareas) o
maximizarlo (expandirlo para que ocupe toda la pantalla) mediante el uso de la propiedad
WindowState. Por ejemplo, la siguiente sentencia minimizar Form1 en un programa:
Form1.WindowState = 1
Para maximizar Forml, deber utilizar la siguiente sentencia:
Form1.WindowState = 2
para devolver Form1 a su tamao normal deber utilizar:
Forml.WindowState = 0

Inclusin de formularios preexistentes en un programa

Visual Basic le permitir reutilizar sus formularios previamente desarrollados en nuevos
proyectos de programacin. Para aadir un formulario ya existente a un proyecto de
programacin, seleccione la opcin Agregar Formulario contenido en el men Proyecto de Visual
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 4

Basic y pulse sobre la pestaa Existente. La pestaa Existente muestra un cuadro de dilogo que
lista todos los formularios contenidos en la carpeta actual de Visual Basic (es decir, la ltima
carpeta que haya utilizado con Visual Basic). Para aadir un formulario existente, realice una
doble pulsacin sobre su nombre de archivo en el cuadro de dilogo. Visual Basic aadir el
formulario especificado al proyecto y podr ver el formulario y modificar sus procedimientos de
suceso pulsando los botones Ver Objeto y Ver cdigo de la ventana Proyecto. Podr especificar el
formulario de inicio de su programa (el primer formulario que se cargar) ejecutando el mandato
Propiedades del men Proyecto, pulsando la pestaa General y seleccionando el formulario
apropiado en el cuadro de lista desplegable denominado Objeto inicial. Si modifica un formulario
preexistente en un nuevo proyecto deber, en primer lugar, almacenarlo con un nombre
diferente. En caso contrario, los dems proyectos que utilicen dicho formulario no volvern a
comportarse en la forma adecuada.

Empleo de formularios mltiples

En los siguientes ejercicios se muestra cmo se puede utilizar un segundo formulario para
visualizar textos en un programa que maneja los datos personales de los odontlogos que
trabajan en la clnica Smile.
Cree una nueva aplicacin y disee un formulario similar al siguiente:



Aqu se utiliza un control ListBox para mostrar los odontlogos que trabajan en la clnica. Al
cargarse el formulario deber llenar la misma mediante el siguiente cdigo:
Private Sub Form_Load()
List1.AddItem "Vaquero Marcelo"
List1.AddItem "Arcuri Jorgelina"
List1.AddItem "Olivieri Natalia"
List1.AddItem "Brozzo Alejandro"
List1.AddItem "Covani Ignacio"
List1.AddItem "Dotti Santiago"
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 5

List1.AddItem "Berger Guillermo"
End Sub

Creacin de un segundo formulario en el programa

1. Ejecute la opcin Agregar formulario contenido en el men Proyecto. En su pantalla
aparecer el cuadro de dilogo denominado Agregar formulario, mostrando una serie de
formularios predefinidos dentro de la pestaa Nuevo.
2. Pulse el botn Abrir para crear un formulario nuevo y vaco en el proyecto. En el entorno
de programacin aparecer un formulario vaco denominado Form2.
3. Ajuste el tamao del segundo formulario para que tenga la forma y dimensiones de un
pequeo cuadro de dilogo. Preste atencin y modifique el tamao de la ventana Form2,
no el de la ventana Proyectol que contiene al formulario.
4. Coloque en el formulario Form2, cinco controles Label, la primera para mostrar el
nombre del odontlogo seleccionado (lblNombre), dos para mostrar los datos
pertenecientes a la direccin (lblDireccion) y telfono (lblTelefono) del odontlogo y
otras dos, situadas a la izquierda de las anteriores que se utilizarn para especificar los
datos que sern mostrados. Agregue adems un botn de pulsacin que ser utilizado
para cerrar la ventana. El formulario se muestra a continuacin.



Guarde ahora en el disco el nuevo proyecto y el nuevo formulario. Como ya sabe, Visual Basic
requiere que cada formulario se guarde con su propio nombre de archivo. La idea es que un
mismo formulario pueda ser utilizado en ms de un proyecto. Antes de guardar Form2
asegrese de que el formulario se encuentra activo, es decir, est seleccionado en el entorno de
programacin (ahora debe estarlo).
El segundo formulario se guardar en disco y se registrar en la ventana Proyecto. Podr pasar
de un formulario a otro sin ms que pulsar sobre los formularios o resaltar su nombre en la
ventana Proyecto y pulsar despus el botn Ver Objeto.

F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 6

Acceso al segundo formulario desde un procedi miento de suceso

Pulse el primer formulario (Form1) y pulse dos veces el objeto List1 del mismo. El procedimiento
de suceso Listl_DblClick aparecer en la ventana Cdigo. En este procedimiento de suceso se
utilizar una estructura de decisin Select Case. La estructura de decisin comprueba cul ha
sido la eleccin realizada por el usuario y asigna a las variables direccin y telefono el valor
adecuado.
Private Sub List1_DblClick()
Dim direccion As String
Dim telefono As String
Select Case List1.ListIndex
Case 0
direccion = "Roca 1256"
telefono = "4523698"
Case 1
direccion = "Pellegrini 1362"
telefono = "4493905"
Case 2
direccion = "Paraguay 845"
telefono = "4845211"
Case 3
direccion = "Corrientes 836"
telefono = "4851236"
Case 4
direccion = "San Juan 745"
telefono = "4256984"
Case 5
direccion = "Santa Fe 895"
telefono = "4125896"
Case 6
direccion = "San Lorenzo 785"
telefono = "4265874"
End Select

F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 7

Load Form2
Form2.lblNombre = List1.Text
Form2.lblDireccion = direccion
Form2.lblTelefono = telefono
Form2.Show
End Sub
Luego de la estructura de seleccin Select Case, se encuentra el cdigo correspondiente a la
asignacin sobre el segundo formulario. La primera sentencia carga Form2 en memoria (tambin
podr precarga formulario introduciendo esta instruccin en el procedimiento de suceso
Form_Load). Una vez cargado en memoria, podr cambiar las propiedades formulario y tenerlo
listo para mostrarlo por pantalla. La segunda instruccin introduce una copia del nombre del
odontlogo seleccionado en la lista en la primera etiqueta de Form2. La tercera lnea asigna la
variable direccion a la etiqueta lblDireccion del nuevo formulario. La cuarta lnea asigna la
variable telefono a la etiqueta lblTelefono del nuevo formulario. Por ltimo, el mtodo Show sirve
para mostrar el formulario completo en la pantalla.
Aada ahora una sentencia al botn Cerrar de Form2 para cerrar el formulario cuando el usuario
termine de utilizarlo.
Cierre la ventana Cdigo, pulse Form2 (o bralo desde la ventana Proyecto) realice una doble
pulsacin sobre el botn Cerrar.
El procedimiento de suceso cmdCerrar_Click aparecer en la venta Cdigo. Este es el
procedimiento asociado con el primer botn de Form2, no con el primer botn de Form1. Los
objetos pertenecientes a distintos formularios pueden compartir el mismo nombre y Visual Basic
no tiene problemas para distinguirlos. No obstante, si para usted supone un problema utilizar
nombres iguales o parecidos, puede cambiarlos a su gusto utilizando la ventana Propiedades.
Para cambiar el nombre de un objeto, seleccione el objeto en el formulario y utilice la ventana
Propiedades para cambiar su propiedad Name. La propiedad Name almacena el nombre que
utilizar Visual Basic para identificar al objeto, por lo que, si modifica dicho nombre, deber
asegurarse de hacerlo en todo el cdigo del programa. Los nombres de objeto deben seguir una
lgica que permita identificar con facilidad cul es su funcin. Los nombres de objetos igual que
los de variables tambin pueden utilizar prefijos identificativos por ejemplo, un botn de orden
utilizado para salir de un programa podra llamarse cmdSalir.
Escriba la siguiente sentencia de programa en el procedimiento de suceso:
Form2.Hide
Esta sentencia utiliza el mtodo Hide para hacer invisible Form2 cuando el usuario pulse el botn
Cerrar. Como Form2 se ha visualizado en estado no modal, el usuario podr pasar libremente
entre Forml y Form2 en tiempo de ejecucin. El usuario puede cerrar Form2 pulsando el botn
Cerrar.
Pulse el botn iniciar para ejecutar el programa.
Realice una doble pulsacin sobre algn odontlogo contenido en el cuadro de lista.
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 8

El programa mostrar los datos personales de la persona en el segundo formulario, tal como se
muestra en la siguiente ilustracin:



Pulse el botn Cerrar del segundo formulario. El programa ocultar el formulario. Pulse Salir en
el primer formulario. El programa terminar y Visual Basic descargar ambos formularios.
Volver a aparecer el entorno de programacin.

Cmo enviar la salida del programa a la impresora

Visual Basic permite enviar a una impresora la salida de un programa mediante el mtodo Print.
Para enviar la salida a una impresora conectada, deber utilizar el mtodo Print con el objeto
Printer. Por ejemplo: la siguiente lnea enva la cadena de texto Visual Basic a la impresora
predeterminada de Windows:
Printer.Print "Visual Basic"
Antes de imprimir podr utilizar el objeto Printer para ajustar algunas caractersticas de la
fuente. Por ejemplo, el siguiente cdigo imprime Visual Basic con un tamao de fuente de 14
puntos:
Printer.FontSize = 14
Printer.Print "Visual Basic"
En total, el objeto Printer cuenta con varias docenas de propiedades y mtodos que podr
utilizar para controlar distintos aspectos de la impresin. Muchas de estas propiedades y
mtodos son similares a algunas palabras clave que ya hemos utilizado en el manejo de
formularios y objetos creados utilizando los controles del cuadro de herramientas. Sin embargo,
las propiedades de Printer difieren en un aspecto fundamental de los formularios y objetos
creados desde el cuadro de herramientas: no podr modificar los valores asignados a las
propiedades del objeto Printer desde la ventana Propiedades. Todas sus propiedades debern
asignarse mediante cdigo de programa en tiempo de ejecucin.
Para obtener una lista completa de sus mtodos y propiedades busque Printer, objeto en la
ayuda interactiva de Visual Basic.
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 9

Tambin puede utilizar propiedades para configurar su impresora (el procedimiento Form_Load
es un buen lugar para llevar a cabo este tipo de asignaciones que utilizar siempre que se
ejecute el cdigo). En las tablas siguientes se muestran algunas de las propiedades y mtodos
ms tiles del objeto Printer.

Mtodo Descripcin
Print Imprime el texto especificado en la impresora.
NewPage Inicia una nueva pgina en el trabajo de
impresin.
EndDoc Marca el final del trabajo de impresin.
KillDoc Finaliza el trabajo de impresin actual.

Propiedad Descripcin
FontName Establece la fuente para el texto.
FontSize Establece el tamao de fuente para el texto.
FontBold Si es True escribe el texto en negrita.
FontItalic Si es True escribe el texto en cursiva.
Page Contiene el nmero de pgina que se est
imprimiendo.

En el siguiente ejercicio se mostrar cmo aadir soporte de impresin al programa que cre
anteriormente. Utilizar las propiedades FontName, FontSize y FontBold para cambiar el estilo
del texto; el mtodo Print para enviar definiciones a la impresora y el mtodo EndDoc para
marcar el final del trabajo de impresin.

Cmo aadir soporte de impresin al programa

1. Abra el proyecto si no est ya abierto.
2. Muestre el segundo formulario del proyecto. Este es el formulario que muestra los datos
personales del odontlogo sobre el que el usuario ha realizado una doble pulsacin. El
objetivo es ahora aadir un botn Imprimir al formulario para que el usuario pueda
obtener una copia impresa de los datos.
3. Pulse el control CommandButton contenido en el cuadro de herramientas para crear un
botn de orden a la izquierda del botn Cerrar.
Cuando haya terminado, su formulario tendr un aspecto similar al mostrado a continuacin:

F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 10



4. Realice una doble pulsacin sobre el nuevo botn para editar su procedimiento de
suceso. El procedimiento de suceso cmdImprimir_Click aparecer en la ventana Cdigo.
5. Introduzca las siguientes sentencias de impresin en el procedimiento de suceso:
Private Sub cmdImprimir_Click()
Printer.Print ""
Printer.FontName = "Arial"
Printer.FontSize = 18
Printer.FontBold = True
Printer.Print lblNombre.Caption
Printer.FontBold = False
Printer.Print "Direccin: " & lblDireccion.Caption
Printer.Print "Telfono: " & lblTelefono.Caption
Printer.EndDoc
End Sub
El propsito de estas sentencias es bien sencillo. Veamos su significado una por una:
La primera instruccin inicializa el objeto Printer para preparar la salida.
La propiedad FontName define la fuente de la impresora a Arial, un tipo de fuente
TrueType.
La propiedad FontSize define el tamao de la fuente a 18 puntos.
Al definir como True la propiedad FontBold se activa el atributo negrita.
La quinta, sptima y octava lneas utilizan el mtodo Print para imprimir el nombre del
odontlogo, su direccin y telfono.
La ltima lnea finaliza el trabajo de impresin y lo enva a la impresora.
Si desea permitir que el usuario imprima varias definiciones de palabras en una misma pgina,
deber posponer el uso del mtodo EndDoc hasta que el usuario pulse el botn Salir para
terminar el programa.
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 11

Ejecute ahora el programa si tiene conectada alguna impresora a su computadora. Su aplicacin
utilizar la impresora predeterminada especificada en la carpeta Impresoras de Windows, de
forma que puede ser una impresora local, una impresora de red o un programa de fax mdem.
Verifique que la impresora est conectada y encendida.
1. Pulse el botn Iniciar contenido en la barra de herramientas. El programa se ejecutar
en el entorno de programacin.
2. Pulse dos veces el nombre del odontlogo del cuadro de la lista. Los datos personales del
mismo aparecer en su pantalla tal y como se muestra e siguiente figura:



Pulse el botn Imprimir del formulario para imprimir los datos personales del odontlogo Marcelo
Vaquero.
Visual Basic enviar el documento a la impresora seleccionada.
Si su impresora no est preparada para imprimir, Windows puede devolver un error a Visual
Basic que su programa no estar preparado para manejar. Esta situacin provocar un error en
tiempo de ejecucin y el programa fallar. Ms adelante en este captulo, se mostrar cmo
gestionar los errores de ejecucin asociados con unidades de disco, impresoras y otros
dispositivos.

Impresin de un formulario completo utilizando el mtodo PrintForm

Como alternativa a la impresin de lneas individuales utilizando el mtodo Print podr enviar el
contenido completo de uno o ms formularios a la impresora mediante el mtodo PrintForm.
Esta tcnica le permitir organizar en un formulario el texto, grficos y otros elementos de la
interfaz de usuario y enviarlo todo de forma conjunta a la impresora.
Podr utilizar la palabra clave PrintForm por s sola para imprimir el formulario activo por defecto
o especificar un nombre de formulario para que se imprima el especificado. Por ejemplo, para
imprimir el contenido del segundo formulario del programa, podr escribir la sentencia.
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 12

Form2.PrintForm
en cualquier procedimiento de suceso de programa.

Errores utilizando manejadores de error

Se ha enfrentado ya con algn error de Visual Basic en tiempo de ejecucin? Un error en
tiempo de ejecucin o ruptura de programa, es un suceso no esperado que ocurre durante la
ejecucin del programa y que Visual Basic no puede controlar. Tal vez se haya enfrentado con su
primer error en tiempo de ejecucin en este captulo, cuando intent imprimir y algo no march
correctamente (puede que la impresora no tuviera papel o que alguien se olvidara encenderla,
por lo que recibi un mensaje de error emitido por Visual Basic o Windows). Los errores en
tiempo de ejecucin se producen siempre que Visual Basic ejecuta una sentencia que, por
alguna razn, no puede completarse como era de esperar. No es que Visual Basic no pueda
manejar el error; es que s implemente, el compilador no ha recibido ninguna indicacin de lo que
debe hacer cuando este tipo de situaciones se produzcan.
Por fortuna, no tendr que convivir con errores ocasionales que provoquen un fallo en su
programa. Visual Basic le permitir escribir rutinas especiales, llamadas manejadores de error,
para responder a los errores en tiempo de ejecucin. Un manejador de error controla el error en
tiempo de ejecucin indicando al programa cmo debe continuar si alguna sentencia no funciona
correctamente. Los manejadores de error se sitan en los mismos procedimientos de suceso en
los que puede producirse el error, y resuelven el problema utilizando un objeto manejador de
errores denominado Err. El objeto Err cuenta con una propiedad denominada Number que
identifica el error y permite que el programa pueda responder al mismo. Por ejemplo, si una
unidad de disquete causa un error, el manejador de error podra mostrar un mensaje
relacionado con el problema y desactivar las operaciones de disco hasta que el usuario resuelva
al conflicto.

Cundo se deben utilizar los manejadores de error

Podr utilizar manejadores de error en cualquier situacin en la que una accin no esperada
pueda provocar un error en tiempo de ejecucin. Tpicamente, los manejadores de error se
utilizan para procesar sucesos externos que afectan a un programa: por ejemplo sucesos
causados por un fallo en una unidad de red, una puerta abierta de una unidad de disquetes o
una impresora que no se encuentre encendida. En la tabla siguiente se muestran algunos
problemas potenciales que pueden gestionarse mediante manejadores de error.

Problemas Descripcin
Con la red Unidades o recursos de red que fallan
inesperadamente.
Con unidades de disquete Discos no formateados o formateados
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 13

incorrectamente, puerta de la unidad abierta o
sectores defectuosos en disco.
Con impresoras Impresoras apagadas, sin papel o no disponibles
por otros motivos.
Errores de
desbordamiento
Demasiada informacin textual o grfica en un
formulario.
Errores de falta de
memoria
Insuficiente espacio en Windows para ejecutar
una aplicacin o para utilizar ciertos recursos.
Con el Portapapeles Problemas de transferencia de datos o del propio
Portapapeles de Windows.
Errores lgicos Errores sintcticos o lgicos no detectados
previamente por el compilador y las pruebas
realizadas (como nombres de archivo mal
escritos).

Poner una trampa: la instruccin On Error

La sentencia de programa utilizada para detectar un error en tiempo de ejecucin es On Error.
Deber introducir esta sentencia en el procedimiento de suceso, justo antes de utilizar la
sentencia que puede provocar el error. La sentencia On Error activa un detector de errores
indicando a Visual Basic qu lneas de cdigo debe ejecutar si se produce error. La sintaxis de la
sentencia On Error es
On Error GoTo etiqueta
donde etiqueta es el nombre del manejador de error.
Los manejadores de error se escriben al final del procedimiento de suceso a continuacin de la
sentencia On Error. Cada manejador de error cuenta con su propia etiqueta que deber ir
seguida por el carcter dos puntos (:) (por ejemplo, ManejaError: o ErrorImpresin: ).
Los manejadores de error suelen tener dos partes. En la primera parte se utiliza normalmente la
propiedad Err.Number en una estructura de decisin (tal como If...Then o Select Case) y luego
se muestra un mensaje o se asigna una propiedad, dependiendo error. La segunda parte es una
sentencia Resume que devuelve el control al programa para que ste pueda continuar.

Resume

En la sentencia Resume podr utilizar la palabra Resume simplemente, las palabra Resume Next
o la palabra Resume acompaada de una etiqueta donde saltar el control del programa, todo
depender de la parte del programa por la que desee continuar.
La palabra clave Resume devuelve el control a la sentencia que provoc el error (con la
esperanza de que el error haya sido subsanado o que no vuelva a ocurrir otra vez). Emplear la
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 14

palabra reservada Resume es una buena estrategia si ha pedido previamente al usuario que
resuelva el problema, por ejemplo, cerrando la unidad de disco abierta o conectando la
impresora.
Las palabras clave Resume Next pasan el control del programa a la sentencia siguiente a la que
provoc el error. Esta estrategia ser la que deba utilizar cuando desee ignorar la instruccin
conflictiva y seguir con el programa. Tambin podr utilizar la palabra Resume seguida del
nombre de una etiqueta a la que saltar en caso de error. Esta forma de actuar le proporcionar
la flexibilidad de moverse a cualquier parte del procedimiento de suceso donde quiera seguir con
la ejecucin del problema. Una ubicacin habitual para la etiqueta es la ltima lnea del
procedimiento.

Manejador de error de una unidad de disquete

En el siguiente ejercicio se muestra la forma de crear un manejador de error para controlar
errores asociados con unidades de disquete. Aadir el manejador de error a un programa que
tratar de cargar un archivo de imagen desde la unidad A. Podr utilizar la misma tcnica para
aadir manejadores de error a cualquier programa desarrollado con Visual Basic, bastar con
cambiar los nmeros de error y los mensajes.
El siguiente programa utiliza un nmero de error (de la propiedad Err.Number) para diagnosticar
un error en tiempo de ejecucin. Si desea ver una lista completa de los nmeros de error ms
comunes busque errores, nmeros en la ayuda interactiva de Visual Basic.

Creacin de un manejador de error de una unidad de disco

El formulario estar compuesto por un control Image y un botn de pulsacin. El diseo del
mismo es el siguiente:



Realice una doble pulsacin sobre el botn Cargar imagen desde A:\ contenido en el formulario.
El procedimiento de suceso Command1_Click aparecer en la ventana Cdigo. Escriba lo
siguiente:
Private Sub Command1_Click()
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 15

On Error GoTo ErrorDisco
Image1.Picture = LoadPicture("a:\Smile.jpg")
Exit Sub 'salir procedimiento

ErrorDisco:
If Err.Number = 71 Then 'si el disco no est preparado
If MsgBox("La unidad A no est preparada.", vbCritical + _
vbRetryCancel, "Disco no preparado") = vbRetry Then Resume
Else
MsgBox ("No se encuentra Smile.jpg en A:\."), , _
"Archivo no encontrado"
Resume PararPrueba
End If
PararPrueba:
End Sub
Este procedimiento de suceso carga un archivo llamado Smile.jpg desde el directorio raz de la
unidad de disquete A. Por lo tanto, se generar un error si el archivo no existe o si la unidad de
disco est abierta.
La primer sentencia activa el manejador de error del procedimiento e indica a Visual Basic dnde
debe saltar si se produce el error. A continuacin, deber aadir el manejador de error
ErrorDisco en la parte final del procedimiento suceso.
La expresin condicional de la sentencia If...Then comprueba la propiedad Err.Number para ver
si contiene el nmero 71, el cdigo de error devuelto cuando una unidad de disco no funciona
correctamente. Si se produce un error de disco, el programa dar al usuario la oportunidad de
resolver el problema (bien cerrando la unidad o insertando un nuevo disco) y despus contina
con la operacin de carga (se intentar ejecutar de nuevo la funcin LoadPicture al utilizar la
palabra clave Resume).
Si el error no est relacionado con la unidad de disco, el programa asume que el disco es vlido
pero que el archivo no se encuentra en el directorio raz del mismo. En ese caso, el manejador
de error salta a la etiqueta PararPrueba: situada al final del procedimiento. En ambos casos, el
manejador de error muestra un mensaje al usuario y evita que el programa termine de forma
prematura. Podr aadir ms sentencias ElseIf y nmeros de error al manejador de error para
proporcionar al usuario mayor informacin acerca del problema de disco.
Si el programa no se encuentra con ningn problema de disco, o si el usuario resuelve el error
inicial, el programa continuar ejecutndose hasta que la sentencia Exit Sub termine la ejecucin
del procedimiento. Exit Sub es una sentencia de propsito general que podr utilizar para salir
de un procedimiento de Visual Basic antes de llegar a la sentencia End Sub. En este caso, Exit
Sub evita que el manejador de error se ejecute despus de que el programa cargue
correctamente el archivo.
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 16

Utilice el Explorador de Windows para copiar el archivo Smile.jpg desde la carpeta actual a un
disquete contenido en 1a unidad A (necesitar un disquete formateado para completar este
paso).
Asegrese de copiar el archivo en la carpeta raz del disco (A:\).
Saque el disquete de la unidad o deje abierta la puerta de la misma.
Pulse el botn Iniciar para ejecutar el programa.
Pulse el botn Cargar imagen desde A:\ del formulario.
Visual Basic generar un error en tiempo de ejecucin y el manejador de error mostrar el
mensaje de error que aparece en la siguiente figura:



Inserte el disquete que contiene el archivo y cierre la puerta de la unidad.
Pulse Reintentar para cerrar el manejador de error y vuelva a intentar la operacin de carga.
Pasados unos segundos, el archivo Smile.jpg aparecer en el formulario, tal como se muestra en
la figura.



Si sigue apareciendo el mensaje de error, puede que el problema sea otro. Intente ejecutar el
programa paso a paso desde la ventana Depuracin. Los errores se detectan fcilmente desde
esta ventana y el proceso le mostrar grficamente el funcionamiento de los manejadores de
error.


F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 17

Ms tcnicas de manejadores de error

El objeto Err contiene algunas propiedades adicionales que podr utilizar para mostrar
informacin extra con sus manejadores de error. Por ejemplo, la propiedad Err.Description
contiene el mensaje de error devuelto a Visual Basic cuando se produce un error en tiempo de
ejecucin. Podr utilizar este mensaje como informacin adicional para el usuario, tanto si
piensa resolver el error desde el programa como si no. Por ejemplo siguiente manejador de error
utiliza la propiedad Description para mostrar un mensaje de error si se produce un error durante
la operacin de carga de una imagen desde disquete.
On Error GoTo ErrorDisco
Image1.Picture = LoadPicture("a:\Smile.jpg")
Exit Sub 'salir procedimiento

ErrorDisco:
MsgBox (Err.Description),, "Error de carga"
Resume
Puede utilizar esta tcnica para solucionar nuevos problemas relacionados con las unidades de
disquete, tales como discos sin formato, archivos perdidos o unidad de disco abierta. El
manejador de error utiliza la sentencia Resume para intentar de nuevo la operacin de carga
cuando el usuario corrija el error y pulse Aceptar en el cuadro de mensaje. Cuando se cargue el
archivo, la sentencia Exit Sub finalizar el procedimiento.
Si se mete en un bucle de error y no puede salir, pulse CTRL.+INTER.

Cmo especificar un periodo de reintento

Otra estrategia que podr utilizar en un manejador de error consiste en permitir que el usuario
intente la operacin un nmero fijo de veces, despus de las cuales, si no se ha resuelto el
problema, el programa saltar automticamente a otra sentencia.
Por ejemplo, el siguiente manejador de error utiliza una variable contadora denominada Intentos
para controlar el nmero de veces que aparece el mensaje de error. Si el mensaje de error
ocurre dos veces, el programa ignorar la instruccin de carga y continuar en la siguiente
sentencia:
Intentos = 0 'inicializa la variable contadora
On Error GoTo ErrorDisco
Image1.Picture = LoadPicture("a:\Smile.jpg")
Exit Sub 'salir procedimiento

ErrorDisco:
F FU UN ND DA AM ME EN NT TO OS S D DE E IIN NF FO OR RM M T TIIC CA A D De ep pa ar rt ta am me en nt too d de e I In ng ge en ni ie er r a a E El l c ct t r ri ic ca a

Visual Basic 18

MsgBox (Err.Description),, "Error de carga"
Intentos = Intentos + 1 'incrementa el contador de errores
If Intentos >= 2 Then
Resume Next
Else
Resume
End If
Esta es una tcnica til cuando el error que se est intentando manejar es un problema que
puede ser resuelto en ciertas ocasiones por el usuario. Lo ms importante que debe recordar es
que Resume vuelve a intentar ejecutar la sentencia que provoc el error, mientras que Resume
Next salta la sentencia problemtica y, pasa a la siguiente lnea del procedimiento de suceso.
Cuando utilice Resume Next, asegrese de que la sentencia siguiente es realmente la que desea
ejecutar, y compruebe que no vuelve a ejecutar accidentalmente el manejador de error. Una
buena forma de salvar el manejador de error consiste en utilizar la sentencia Exit Sub; tambin
podr utilizar Resume Next con una etiqueta que indique a Visual Basic que salte a una
sentencia despus del manejador de error.

S-ar putea să vă placă și