Você está na página 1de 100

Capítulo1 - Introducción al Tutorial de Visual Basic 6.

1 - Introducción
Bienvenido a la introducción de este tutorial básico de visual basic

Esta guía esta destinado para aquellos que nunca han entrado en contacto con este lenguaje
de programación. ( para que te des una idea se va a realizar en este capítulo algo parecido al
Hola mundo), si sos nuevo puede venirte como anillo al dedo, si no, te recomiendo que no
pierdas ni un segundo leyendo de gusto y cierres la ventana, jeje.

Este tutorial está basado en la versión 6.0 de visual basic, aunque con otras versiones no
creo que tengas problemas.

Entrando en el tema, con este lenguaje de programación podés realizar casi cualquier tipo
de programa para plataformas windows, esto quiere decir, que podés programar utilitarios
para windows, bases de datos, aplicaciones comerciales y de gestión, juegos, etc.. .

Sin embargo lo que no podés desarrollar son por ejemplo: aplicaciones que administren
bases de datos gigantes, drivers para dispositivos , juegos que utilicen una interfaz gráfica
compleja, ya que tendrías que utilizar otro entorno de desarrollo o lenguaje , como por
ejemplo el C, el C++, Delphi , .NET u otros, es decir lenguajes que sean mas rápidos y que
tengan soporte para este tipo de proyectos y programas.

2 - Breve historia y alcance del lenguaje


Las siglas Basic significan (beginner's all-purpose simbolic instruction Codic). El
lenguaje Basic fue creado en el año 1964 y se modificó varias veces hasta que en el año
1978 se estableció el Basic estándar. Este anteriormente se llamo "gwbasic", luego
"QuickBasic" y asi fue evolucionando y finalmente llegamos al "Visual Basic", todas con
sus diferentes versiones, la 1, 2 , etc.. hasta la 6.0

Las aplicaciones que se puden desarrollar con visual basic 5 y 6 son aplicaciones de 32
bits solo para plataformas Windows.

Mas información sobre la historia de visual basic en la Wikipedia

3 - La interface del Vb - El IDE


El IDE significa interface de entorno de desarrollo, y se refiere a la interface del propio
programa, es decir a las distintas partes que componen el propio Visual Basic para poder
desarrollar nuestros proyectos (es el entorno de trabajo)

En esta parte, se describirá un pantallazo de las secciones principales de este entorno

Para inicializar el programa, luego de haberlo instalado obviamente, desde el menú inicio >
programas > microsoft visual basic 6.0, te podés crear un Acceso directo en tu escritorio
para tenerlo mas a mano.

En la imagen superior podés ver la barra de controles. Esta barra contiene los controles
estándar de Visual Basic. Se los llama estándar porque que son los controles que por
defecto añade Visual Basic cuando creamos un programa desde 0. A los controles no
estándar, u otro tipo de controles, por ejemplo los creados por nosotros, los que tengamos
instalados en el sistema, y demás que se instalan con el VB, hay que agregarlos a mano,
es decir uno mismo, esto se hace desde el Menú Componentes o presionando las
combinaciones de tecla Ctrl+T. Cuando se agrega un control no estándar, se añade a la
barra y ya lo podés utilizar..

Los controles estándar son los controles básicos, por ejemplo los Command Button o
botones de comando, Control TextBox o caja de texto, Picture Box o caja de imagen.
El control FileListBox para ver archivos, y varios otros que se explican en los siguientes
capítulos.
La imagen anterior, nos muestra los formularios (ventanas) , módulos de código, y otros
tipos de objeto que componen el proyecto que estamos realizando.

Desde esta ventana podemos hacer varias operaciones, por ejemplo al seleccionar un
formulario, en los botones "Ver Objeto" y "Ver código" en la parte superior, accedemos a
la vista de diseño del formulario, mientras que si elegimos Ver código, se abre una
ventana que muestra el código de ese formulario seleccionado.

También podemos desde esta ventana, Guardar el formulario, eliminarlo y varias otras
acciones.

Esta otra ventana acoplable que está debajo de la ventana de Proyecto, se llama Ventana
de propiedades de Visual Basic.

Desde la Ventana de Propiedades podemos modificar las características del objeto o control
seleccionado actualmente. Por ejemplo si agrego un formulario y lo selecciono, puedo
establecerle el color de fondo, el ancho, alto, el nombre que va a tener para poder
identificarlo y muchas otras propieades.

Lo importante que quede claro es que esta ventana cambia cada ves que seleccionamos un
objeto o control diferente, si seleccionamos un botón o Command Button, visualizará las
propiedades de ese botón, si seleccionamos un formulario las propiedades de ese
formulario, si seleccionamos un TextBox, mostrará ls propiedades de ese textBox , etc..

Esta es la barra de menues y barra de herramientas de Visual Basic. Para no hacerla


pesada y describir todas las opciones ya que no tiene sentido describir todo, desde aquí se
puede configurar todo el entorno o IDE, elegir el tipo de proyecto que vamos a crear, ( por
ejemplo un programa Exe común , una Dll ActiveX o un Proyecto Ocx), También Compilar
el proyecto en un ejecutable, Acceder a la ayuda, (tenés que tener instalados los CD del
Msdn), Abrir un proyecto, Guardar, El acceso a los distintos modos y opciones de
depuración de errores, y muchas opciones mas.

4 - Formularios, propiedades, métodos y eventos

En esta parte se realizará un ejemplo simple que consistirá en una ventana o formulario
que contendrá un botón, y al presionar este botón nos mostrará o abrirá otra ventana con un
mensaje, como las que utiliza windows cuando nos informa sobre algo . Este mensaje
visualizará un texto con la descripción"Mi primer programa". Pero antes de realizar este
ejercicio veamos un par conceptos básicos necesarios

Formulario

Es la ventana o contenedor donde colocamos y agregamos controles de comando , como


un botón, una caja de texto, un control de imagen, etc... Cuando hacemos un programa
podemos tener varios formularios. Por ejemplo podemos tener un formulario1 con un
botón y al presionar este botón hacer aparecer otro formulario en este caso un
formulario2.

Propiedades:

Cuando hablamos de propiedades nos estamos refiriendo a las características que puede
tener un control u objeto, por ejemplo: los botones llamados commandbutton tienen una
propiedad llamada caption. Esta propiedad establece el texto que va a mostrar el botón en
el propio botón.

Los formularios también poseen esta propiedad caption y muchos otros controles también
la poseen, pero no todos. Otro ejemplo de una propiedad puede ser el color de fondo de un
control, el ancho, el alto, el nombre que lleva para poder identificarlos, etc.. .
En resumen las propiedades, haciendo una comparación, serían como para las personas
tener 2 brazos, 2 piernas, el color del pelo, el color de los ojos, el nombre de la persona,
donde vive, su código postal, etc...

Los Eventos

Los controles y objetos poseen Eventos, pero no son todos iguales para todos los controles.
Ejemplos de eventos serian:
Para un botón: el evento click (cuando lo presionamos), para un formulario: load (este
evento se ejecuta cuando se carga el formulario en la memoria), para un textbox o caja de
texto: keypress (este evento se dispara cuando presionamos una tecla y el foco está puesto
dentro de la caja de texto).

Los Métodos

Los métodos de un objeto son funciones propias que tiene cada objeto. Por ejemplo los
formularios poseen un método llamado show , y lo que hace es cargarlo y hacerlo visible.
Para un control combobox este tiene un método llamado additem, y lo que hace es agregar
elementos en dicho control. Pero los métodos al igual que las propiedades y eventos, no
están presentes en todos los controles de manera igual, es decir algunos objetos y controles
pueden compartirlos, pero otros no. Por ejemplo el método Show de los formularios, no lo
posee ningún control estándar excepto los formularios.

5 - Pasos para realizar el ejemplo


1 - Abrí el Visual Basic y te aparecerá una ventana para que puedas elegir el tipo de
Proyecto o programa que querés realizar. Como verás hay muchas opciones, nosotros
elegiremos la opción Estándar EXE como muestra la imagen:
2 - Ya abierto el VB podés ver que tenés un formulario llamado Form1, este es agregado
automáticamente cuando comenzás un nuevo programa o proyecto, y es el nombre por
defecto que se le asigna, obviamente esto se puede cambiar utilizando la propiedad Name
queposeen los controles.

3 - Como se dijo nuestro programa va a consistir en un formulario con un botón que al


presionarlo muestre un texto diciendo "Mi Primer programa", entonces agregá un botón a
nuestro formulario. Para agregarlo lo podés hacer desde la barra de controles, en la parte
izquierda del IDE, y buscá entre todos ellos un control llamado Command Button (Botón
de comando). Haciendo doble click sobre el control, o dibujandolo sobre el formulario.

4 - Como te darás cuenta, el texto que muestra el botón por defecto es "Command1".
Nosotros lo vamos a cambiar por "Mostrar mensaje". Para ello tenemos que cambiarle la
propiedad Caption del botòn. Entonces seleccioná con un click el command1 (serciorate
que esté seleccionado, cuando al rededor del botòn aparece unos puntos azules) y en la
ventana de propiedades de los controles que esta ubicada en la parte derecha del IDE, te
mostrará las propiedades del control que está seleccionado actualmente. En este caso como
está seleccionado el botón solo nos mostrarà las propiedades del Command1. Ahora buscá
en la lista de propiedades la propiedad Caption y verás que dice Command1, borrala y
escribe: "Mostrar mensaje". Como podés ver el texto o leyenda del botón a cambiado.

NOTA: Nosotros todavía no hemos ejecutado nuestro programa por que obviamente lo
estamos diseñando. A esto se lo denomina trabajar en "Tiempo de diseño". La otra forma
de trabajo se denomina "Tiempo de ejecución", que es cuando nuestro programa está
siendo ejecutado o cargado en memoria.

Tendrías que tener algo por el estilo en tu formulario Form1

5 - Ahora vamos a agregar las instrucciones o líneas de código para que cuando pulsés el
botón se despliegue un mensaje. Hacé Doble click sobre el botòn y podés ver que se habre
una ventana donde escribir el código. Esta se llama precisamente ventana de Código. Al
abrirse la ventana muestra una serie de instrucciones

Private Sub Command1_Click()

End Sub

A esto se lo llama Subrutina o procedimiento de código, y estas subrutinas tienen un


comienzo y un fin.

Después se explica mas adelante que es eso de Private sub, End Sub, procedimientos,
funciones...etc

Por ahora lo que te tiene que quedar claro es que nosotros vamos a ingresar el còdigo
necesario para mostrar, por medio de una ventana, el mensaje "mi primer programa".

Entre la declaración Private sub Command1_click y End sub escribe lo siguiente

Msgbox "Mi primer programa"

El código tendría que quedarte de la siguiente manera


Private Sub Command1_click()

MsgBox "Mi primer programa"

End Sub

6 - Acá lo que se hizo fue utilizar una función llamada MsgBox , que sirve para mostrar
mensajes. Ya podemos ejecutar o probar el ejemplo, para ello hay varias opciones y
formas:

• Desde la barra de herramientas y presionas la flecha azul


• Ir al menú Ejecutar > opción Iniciar
• La mas sencilla de todas que es presionando la tecla F5.

Cuando ejecutés el programa y presionés el Command1, se mostrará el mensaje.

En este momento nuestro programa está en ejecución, para volver a la pantalla de vista de
diseño y detener el programa , tenemos que presionar el ícono con un cuadrado azul (stop)
o ir al menú ejecutar y elegir la opciòn terminar.

6 - Sobre los proyectos en Visual Basic


Por último para cerrar esta intruducción muy básica una aclaración sobre los Proyectos.

Cada vez que inicias un programa nuevo Standar Exe Visual Basic Hace lo siguiente:

Crea un formulario llamado "Form1" y también un proyecto de trabajo llamado por defecto
"Proyecto1".

Cuando lo guardás, desde el menù Archivo > Guardar proyecto, se creará un archivo
llamado "proyecto1.vbp", otro archivo con los formularios que tengas en el proyecto, en
nuestro caso "Form1.frm" y otro archivo en este caso "Proyecto1.vbw" que es un archivo
de configuraciòn.

Este último archivo a nosotros no nos interesa, ya que lo usa Visual Basic para configurar
el proyecto cada vez que lo abrimos.
Para guardar proyectos, hay que ir al menú archivo y elegir guardar proyecto, también te
pedirá que guardes el formulario form1.frm . En ambos casos puedes asignarle el nombre
que quieras.

Capítulo 2 - Los Formularios

1 - Formularios , propiedades métodos y eventos


En esta sección se ven las características principales de los Formularios.

Como vimos en la página anterior, los formularios son las ventanas que contienen a otros
controles y en ellos podemos incluir controles de comando, como botones, cajas de texto,
controles para bases de datos, y por supuesto el código necesario de nuestros programas.

También se dijo, los controles e inclusive los Formularios tienen sus propias características,
como las propiedades (un ejemplo el color del fondo o propiedad Backcolor), sus
eventos (el evento load que se ejecuta cuando cargamos el formulario en memoria), y sus
métodos (por ejemplo el método show que es para mostrar el formulario y el método hide
que es para ocultarlo, en el caso de un formulario.

Acá hay que hacer una cosa muy importante. Cuando se comienza a programar, suele ser
muy casual confundir métodos y eventos y no son lo mismo. Los métodos son funciones
propias de cada objeto, por ejemplo el método hide de un formulario no lo posee un
command button. Con los eventos suele ocurrir lo mismo. Un formulario posee el evento
load y un command button no lo posee (a no ser que pertenezca un arreglo de controles
pero ese es otro tema que se verá en otra ocación).

Pero otros eventos si los comparten ambos. Siguiendo el ejemplo del formulario y el botón,
los dos tienen un evento llamado click, y todas las instrucciones de código que escribamos
en la rutina de código o procedimiento que estén bajo este evento, se ejecutarán cuando
hagamos un click con el mouse sobre el objeto. El evento Click lo poseen la mayoría de los
controles, pero no tiene porque ser así.

Para seguir con el tema de los métodos y eventos, vamos a hacer un ejemplo simple de
ejercicio. Este ejemplo, consistirá en un formulario que contendrá un botón y , al
presionarlo nos mostrará otro formulario.

1.1 - Ejemplo sobre métodos y eventos


Pasos a seguir para el ejemplo:

1 - Comenzá un nuevo proyecto Exe. Por defecto visual basic te agrega un formulario
llamado Form1. este formulario contendrá el botón que al presionarlo muestre otro
formulario, en este caso un Form2.

2 - Desde la barra de controles agregá un Commandbutton al formulario. Por defecto el


texto que muestra es Command1 , nosotros lo cambiaremos por : "Mostrar formulario
2".

Ahora selecciona el botón para que te muestre la lista de propiedades del mismo. Por si ya
te olvidaste, la ventana de propiedades está a la derecha y te muestra las propiedades del
objeto seleccionado actualmente en el entorno de trabajo del vb. Una ves seleccionado el
botón, buscá la propiedad caption y escribí : mostrar formulario 2

3 - Ahora hay que agregar el otro formulario es decir el Form2 a nuestro proyecto. Como en
la barra de controles no tienes la opción de agregar otros formularios, tendrás que agregarlo
desde la barra de menú >proyecto> Agregar formulario.

Te va a aparecer un cuadro de diálogo y eliges la opción formulario. Como podés ver se ha


agregado otro formulario llamado form2, y la ventana del explorador de proyectos ahora
contiene 2 formularios.
4 - Ahora tenemos que introducir el código en el command1 que insertamos en el Form1,
para que cuando ejecutemos el programa , al presionar el Command1 nos muestre el form2
que agregamos anteriormente. Para esto tenés que volver a ir al Form1, haciendo un click
en la ventana de explorador de proyectos (la imagen de arriba) y seleccioná el form1.

5 - Para ingresar el código al botón, hacé doble click en el mismo e ingresá la siguiente
instrucción de código: Form2.show.

La rutina de código del botón command1 te quedaría algo parecido a esto:

Nota: Como seguro te diste cuenta, cuando escribís Form2 y presionas el punto ".", visual
basic te muestra una lista con todas las propiedades y métodos que tiene form2, y así
ocurre con todos los objetos que tienen propiedades y métodos. En este caso el método
show mostrará el Form2 en pantalla, es decir el método Show lo que hace es cargar en la
memoria un formulario y automáticamente lo hace visible.

6 - Corre el programa pulsando la tecla F5 para ver como funciona. Para terminarlo pulsa el
ícono con la imagen de un cuadrado azul desde la barra de herramientas.

1.2 - Otro ejemplo sobre formularios


Ahora vamos a hacer un programa de ejemplo parecido al anterior, pero con algunas
variantes.

En la primera parte, el programa que hicimos consistía en un formulario que tenía un botón
(Command1), y al presionarlo mostraba otro formulario . Este lo llevamos a cabo con el
método show que tienen los formularios y sirve para mostrarlos en pantalla.

El objetivo de este programa es mostrar cuatro métodos que poseen los formularios, ellos
son: Load, Unload, Hide y Show.

El método Load tiene la función de cargar el formulario en la memoria y unload


descargarlo de la memoria. Esto no significa que si el método load carga el formulario,
automáticamente se muestre en la pantalla, quiere decir que solo permanece cargado en
memoria, luego para mostrarlo tendríamos que utilizar el método show por ejemplo (hay
otras opciones para hacer lo mismo pero no vienen al caso detallarlas para este ejemplo).

El método Hide oculta el formulario pero sigue permaneciendo en la memoria. Para


descargarlo completamente de la memoria ram, tendríamos que usar el método Unload.

Imagen previa del ejemplo:

Pasos a seguir
1 - Crea un nuevo proyecto exe.

2 - Desde la barra de controles agrega 4 command button.

3 - Ahora selecciona el Command1 y en la propiedad caption borrale el "command1" y


escribe "Cargar formulario en memoria (Load)".
A hora lo mismo pero en el command2 desde la propiedad caption escribí "Mostrar
formulario 2 (Show)".

En el Command3 "Descargar formulario de la memoria (UnLoad)"


E n el Command4 , "Ocultar formulario (Hide)".

4 - Ya terminando, ubicá los botones en el formulario de forma similar, como muestra la


imagen anterior.
Para mover los botones o cualquier otro objeto dentro de un formulario, solo tenés que
seleccionar el objeto que quieras, mantener presionado el botón izquierdo del mouse y
soltarlo en el lugar que quieras. lo mismo pasa con el tamaño de los controles, cuando los
seleccionas podés cambiarle el tamaño.

5 - Ahora vamos a escribir el código para los botones. Por si ya te olvidaste lo que íbamos a
hacer, lo que harán estos botones son:

El Command1 Cargar en la memoria mediante Load el Formulario pero no lo hace visible.

El Command2 hace las 2 cosas al mismo tiempo, es decir lo carga y lo hace visible.

El Command3 Descarga completamente el Formulario de memoria

El Command4, mediante Hide lo oculta, aunque esté oculto sigue permaneciendo cargado.

En el Command1 entonces , hacé doble click en dicho botón y tipea: Load Form2 .

Para el Command2 que mostrará el Form2: Form2.show.

El botón Command3: Unload form2

El Command4: Form2.hide .

6 - El último paso que nos queda para poder correr nuestro programa es ingresar un nuevo
formulario, entonces desde el menú proyecto eliges la opción agregar formulario y agregas
uno nuevo al proyecto.

Ahora pulsá F5 y prueba el programa.

Nota : seguro que te preguntarás para que sirve el método Load, si para que aparezca en
pantalla el Form2 tengo que usar la instrucciónshow. Supongamos que tenemos un
programa con varios formularios y que estos tienen muchos controles y es medio "pesado"
(me refiero en bytes), entonces a veces conviene cargar dichos formularios en la memoria,
para que cuando necesitamos llamarlos o mostrarlos en pantalla, estos se muestren de forma
mas rápida. Esta es una de las posibilidades del uso no es la única.
El código completo sería el siguiente:

'Carga el form2 pero no lo muestra


Private Sub command1_click()
Load Form2
End Sub

'Carga y muestra el Form2


Private Sub command2_click()
Form2.Show
End Sub

'Descarga completamente de la memoria el Form2


Private Sub command3_click()
Unload Form2
End Sub

'lo oculta pero no descarga el Form2 de la memoria


Private Sub command4_click()
Form2.Hide
End Sub

Nota Sobre los comentarios en el código

Para colocar comentarios en nuestros programas, se antepone la comilla simple o la palabra


Rem (esta última prácticamente no se utiliza).

Es fundamental escribir comentarios sobre los bloques de código que componen las
distintas partes del programa, para que cuando echemos una mirada al código sepamos de
que se trata. Estos comentario o líneas descriptivas no se ejecutan y no influye en nada a la
ejecución de los procedimientos, solo es información que ayuda a entender cada línea o
sección de un bloque de código.

2 - Controles Estándar de Visual basic


Para ver una descripción básica de los controles estándar de visual basic, es decir los que
aparecen por defecto en el cuadro de controles en la parte izquierda del IDE, podés acceder
a esta sección apartada del tutorial en el siguiente enlace, donde se explica el
funcionamiento básico de los mismos con algunos ejemplos prácticos: Tutorial de los
controles de Visual Basic ,
Capítulo 3 - Variables y Tipos de datos

1 - Introducción
Todos los lenguajes utilizan este sistema o metodología para la programación de
aplicaciones, pero varían la forma en que se utilizan, su sintaxis etc...

Cuando uno recién empieza a programar, parece muy complicado entender estos temas,
pero con la práctica todo se va aclarando.

Lo bueno de comprender los fundamentos de la programación, es que nos permite luego


poder programar en casi cualquier lenguaje, por que la forma de programar en general no
varía demasiado, lo que cambia en cada uno de ellos es su sintaxis y funciones y cosas
propias del lenguaje. Aunque tampoco es tan así, ya que esto no significa que por que uno
sea experto por ejemplo programando en lenguaje C, lo sea en Visual Basic y Viceversa.

2 - Las Variables

Las variables, como su nombre lo indica, se utilizan para almacenar valores que tienen la
propiedad de variar el contenido. Cuando hablamos de contenido nos referimos a cualquier
tipo de datos, por ejemplo un nombre, una fecha, un color, un número etc... .

A las variables se les asigna un nombre para poder utilizarlas. Por ejemplo puedo crear una
variable llamada fecha y esta almacenará una fecha. A los nombres de las variables se los
denomina identificadores. Cuando creamos variables, tenemos que tratar de asignarles un
nombre que se relacione con el tipo de dato que queremos almacenar. Por ejemplo no
tendría mucho sentido crear una variable llamada m y allí guardar o almacenar un nombre o
un apellido, por que cuando echemos vista al código resultaría mas difícil deducir que tipo
de dato estoy guardando. Por ejemplo en este último caso sería mucho mas lógico crear una
variable llamada “nombres” y allí guardar "Luciano", "Pedro", "Natalia" etc..

En visual basic a las variables conviene declararlas, o sea, avisarle a vb que vamos a
utilizar dichas variables. A estas se las declara en el comienzo del código y se les antepone
la palabra reservada Dim, luego el nombre que nosotros queramos y seguido el tipo de
dato que almacenará, por ejemplo si quiero almacenar en una variable llamada Numero

Dim numero As Integer

La palabra Integer le avisa a vsiaual basic que voy a guardar un número entero. Después
de declararla le podemos asignar un valor con el operador "=", ejemplo:
Dim numero As Integer

numero = 1500

Pero hay que tener en cuenta que al declarar una variable, en este caso, de tipo integer, no
podríamos almacenar en ella una cadena de caracteres como por ejemplo un nombre o
cualquier otro tipo de datos que no sea un número entero. Si sucedería esto nuestro
programa daría un error en tiempo de ejecución, mostrándonos un feo cartel diciéndoos que
no coinciden los tipos de datos..

3 - Tipos de datos:
Los tipos de datos, indican el tipo de valor que puede almacenar una variable. Los
principales tipos de datos:

Números enteros: dentro de los números enteros tenemos varios tipos de datos
dependiendo el rango que queramos utilizar:

• Byte: puede almacenar números enteros dentro del rango desde 0 a 255
• Integer: puede almacenar números enteros dentro del rango -32.768 a 32.767
• Long: puede almacenar números enteros dentro del rango -2.147.483.648 hasta
2.147.483.648 .

Números decimales: para almacenar números decimales contamos con los siguientes tipos
de datos:

• Single: almacena números decimales en el rango +/- 1e-45 hasta 3e38


• Double: desde +/- 5e-324 hasta 1.8e308

Cadenas de caracteres: las cadenas de caracteres se definen con la palabra String y tienen
un rango de hasta 2 billones de caracteres.

Tipos de valores lógicos: para almacenar tipos de valores lógicos como verdadero o falso,
se utiliza la palabra Boolean y sus 2 posibles valores son True (verdadero) y False (falso).

Fechas y horas: Para almacenar fechas y horas se utiliza la palabra Date

Tipo variant : Las variables de este tipo pueden almacenar cualquier tipo de valor, pero
ocupan mas memoria.

Nota: hay mas tipos de datos, incluso nosotros podemos crear los nuestros.

4 - Constantes:
Las constentes, como las variables, se utilizan para guardar datos y valores para nuestro
programa, pero a diferencia de estas últimas (las variables), el contenido que almacenen no
cambia, siempre es constante.

A diferencia de las variables que se declaran con la palabra Dim, las Constantes se
declaran con la palabra Const.

Ejemplo:

Const numero = 53

En la línea anterior he creado una constante, que la llamé numero y va a almacenar un


número , y este valor, cuando se ejecute mi programa se mantendrá invariable.

Un ejemplo:

1 - En la siguiente línea se declaran 2 tipos de variables de tipo Integer llamadas num1 y


num2. Luego se les asigna un valor a cada una y luego las sumamos, y mediante la función
MsgBox que es una función de Visual Basic para mostrar mensajes, mostramos el resultado
de esa suma.

Coloca un botón (CommandButton) llamado Command1. Hacé dobleClick sobre el botón


para que se abra la ventana de código de Visual Basic. Dentro del procedimiento Click pega
este código:

Dim num1 As Integer


Dim num2 As Integer

num1 = 10
num2 = 20

'se mostrará un mensaje con la suma de las variables con el resultado 30


MsgBox num1 + num2

Al ejecutar el programa, podés ver como se presenta una caja de mensaje con el resultado al
sumar las 2 variables num1 y num2

2 - Ahora vamos a declarar y crear 2 variables de tipo String, es decir vamos a almacenar
cadenas de caracteres en cada una de ellas. En el ejemplo se crean 2 variables, una llamada
nombre y otra apellido. Después le asignamos un valor, y por ultimo mostramos las
variables con un mensaje usando la función MsgBox como en el ejemplo anterior. Pero
antes hay que aclarar algo importante, las cadenas en visual basic se encierran entre
comillas dobles como podés ver en el ejemplo, de lo contrario se va a producir un error.

Dim nombre As String


Dim apellido As String
'le establecemos valores
nombre = "Carlos"
apellido = "Peres"

'mostramos un mensaje con el valor de las variables


MsgBox nombre
MsgBox apellido

3 - Ahora un ejemplo que produce un error en tiempo de ejecución. Creamos 2 variables


exactamente igual que en el ejemplo anterior, pero en ves de declarar las variables nombre
y apellido como de tipo String lo hacemos como de tipo Integer.

Dim Nombre As Integer


Dim Apellido As Integer
'Le establecemos valores numericos
Nombre = "Carlos"
Apellido = "Peres"

Si probás el ejemplo, visual basic te mostrará un mensaje de error como el siguiente: "no
coinciden los tipos de datos":

...ya que las variables están declaradas como de tipo Integer, y le estás asignando un tipo de
dato que no lo acepta.
4 - Un ejemplo que almacena un número en una variable de tipo Byte (números de 0 a
255). Primero declaramos la variable y le damos un nombre, por ejemplo si queremos
almacenar el número 88 hacemos por ejemplo así.

Dim Edad As Byte

Para asignarle un valor a esa variable:

Edad = 88

Para mostrar el valor de la variable Edad en un control TextBox cuando presionamos un


botón Command1, sería de esta manera:

Private Sub Command1_Click()


'Declaramos la variable
Dim Edad As Byte

'Le asignamos un valor que no sea inferior a 0 ni mayor a 255


Edad = 88

'Lo mostramos en el control llamado Text1


Text1 = Edad
End Sub

Si probaras cambiando el valor 88 por ejemplo a 300, ocurriría lo mismo que en el ejemplo
anterior, es decir un Error 13 en tiempo de ejecución "No coinciden los tipos de datos"

5 - Estructuras de control:
Las estructuras de control se utilizan para controlar el flujo del programa en una rutina o
función. Mediante ellas podemos controlar, mediante una condición, que se ejecute una
determinada línea o bloque de líneas de código .. o que no se ejecuten.

Estructura If - Then - Else

Esta estructura permite mediante una condición, que se ejecute o no se ejecute determinada
tarea o línea de código.
Por ejemplo supongamos que tenemos en un formulario un control Label con la propiedad
Caption con el valor 50

If Label1.Caption = "50" Then


msgbox "mi label tiene un valor de 50"
else
msgbox "mi label NO tiene un valor de 50"
end if

Esto traducido al español significaría lo siguiente:

Si (If) la propiedad caption del label1 que tengo en el formulario es igual (=) a "50"
entonces (Then) que muestre un determinado mensaje, si no (Else) que muestre el otro
mensaje.

En conclusión lo que hace esta estructura es evaluar una condición, si se cumple, que se
ejecute determinada tarea. si no se cumple, se ejecutará las líneas de código que estén bajo
la cláusula Else. Luego tenemos que cerrar la estructura con la palabra end if.

Tenemos que aclarar que no es obligatorio usar If y else juntos en la misma cláusula. Por
ejemplo podríamos utilizar solo una estructura If sin else. Por ejemplo:

Private Sub Command1_Click()


'Si la propiedad caption del Label1 es "Hola" entonces se termina el programa
If Label1.Caption = "Hola" Then

End

End If

'Si no, se prosigue con esta línea

MsgBox "No se ejecutó el bloque If Anterior porque el Caption del control Label1 no era
Hola"

End Sub

Coloca un Label1 y un Command1. En la propiedad caption del Label1 escribe "Hola". Al


ejecutar el programa y presionar el Command1, se termina el programa con la sentencia
End de Visual Basic (End sirve para finalizar completamente la ejecución de nuestro
programa). En cambio si ahora le cambia el caption al Label1 y volvés a ejecutar el
proyecto, podés ver que la instrucción End no se ejecuta, si no que la pasa por alto y sigue
con las restantes líneas, en este caso ejecuta la función MsgBox con el mensaje.
Estructura While - Wend

Esta estructura de control repetirá sin detenerse un determinado código mientras se cumpla
una condición.

Por ejemplo supongamos que tenemos una variable llamada x que tiene un valor de 100.

while x = 100
...se ejecutan todas las líneas de código que estén aquí
wend

Esto traducido al español significaría lo siguiente:

Mientras (While) la variable x sea igual a 100, y no cambie su valor, se formará un bucle
interminable, hasta que x cambie a cualquier otro valor disto de 100. Si x cambia el valor,
por ejemplo a 234 saldría del bucle While - wend y seguiría ejecutando el resto del código,
si es que hay mas código o instrucciones a ejecutar.

Un ejemplo, agrega un Command1 al formulario y un control Text1. Cuando ejecutemos


el ejemplo, se deberá escribir un número dentro del control textBox. Entonces se creará un
bucle While, que mostrará en el Caption del formulario, es decir en la barra de título, el
intervalo desde 0 hasta el número que hayamos ingresado en el Text1. Es decir si
ingresamos el número 9000, en el caption del formulario se imprimirán los número desde 0
hasta 9000.

Para hacer esto, dentro del bucle While pondremos una variable llamada Contador, que
en cada pasada se incrementará en 1, pero cuando la variable Contador sea igual al
número que haya en el Text1, se finalizará el bucle y se mostrará un mensaje que finalizó
el mismo

Private Sub Command1_Click()


Dim contador As Integer 'Declaramos la variable

While contador <> Text1

'Mostramos en el formulario el valor de la variable contador


Me.Caption = contador

'Incrementamos la variable en 1
contador = contador + 1

Wend

MsgBox "Terminó el bucle"

End Sub
Estructura For - next

La estructura es utilizada para generar una repetición de instrucciones o bucle, pero no


evalúa una condición como en el caso del bucle While, si no que lo hace entre un número
inicial y un número final que le debemos indicar al mismo.

Por ejemplo, tenemos un formulario con un Label1 y declaramos una variable de tipo
integer llamada "contador" como en el caso anterior

Private Sub Command1_Click()


Dim contador As Integer

For contador = 0 To 1000

Label1.Caption = contador

Next contador

End Sub

Esto traducido significaría lo siguiente:

Primero, tenemos una variable llamada "contador". Mediante el bucle For - next podemos
controlar la cantidad de veces que queremos repetir un determinado proceso o instrucción.
Esta posee un principio y un fin, en este caso el principio sería 0 y el fin 1000, de manera
que la variable contador se incrementará en 1 hasta que llegue a 1000, y repetirá 1000
veces todas las instrucciones que estén bajo la cláusula For-next. En este caso nuestro
control Label1 mostraría el contenido de la variable contador

Para ver en forma detallada y paso a paso esto, pongamos un ejemplo que lo que hace es
repetir 10 veces (desde el 1 hasta el 10 en el intervalo del bucle For) y mostrará un mensaje
con el valor de la variable Contador. Una ves que llegue a 10, terminará.

Colocá un Command1. Doble Click en el botón para escribir dentro del procedimiento que
se ejecutará cuando lo presionemos. El código:

Dim contador As Integer

For contador = 1 To 10

MsgBox "La variable Contador vale: " & contador

Next contador

MsgBox "Fin del bucle For"


Estructura Select case

La estructura Select Case se suele utilizar para evitar el uso de muchas cláusulas If y de
esta manera no tener que anidarlas. La claúsula Select evalúa una condición y las cláusulas
case contienen valores, si el valor que contiene la cláusula case es igual a la condición que
se evaluó, ejecutará las instrucciones en dicha cláusula.

Dim Nombre As String

Nombre = Text1

Select Case Nombre

Case "Jorge"

MsgBox "Se ejecutó la cláusula case: " & Nombre


Case "Pedro"

MsgBox "Se ejecutó la cláusula case: " & Nombre

Case "Carolina"

MsgBox "Se ejecutó la cláusula case: " & Nombre

End Select

Esta estructura es muy práctica. En el ejemplo anterior, la cláusula Select case contiene
como condición el valor de la variable llamada Nombre. Esa Variable toma el valor que
tenga un control Text1, entonces buscará en todas las cláusulas case, y si encuentra una
igual a la condición, ejecutará solo las instrucciones de la cláusula case que tenga el mismo
valor, por ejemplo si ingresara el nombre "Martín" no se ejecutará ninguna cláusula Case.
En cambio si ingreso "Jorge" se ejecutará solo las instrucciones que estén en la sección
Case "Jorge" y asi...

En el caso anterior solo hemos colocado un valor para cada Case. Si quisieramos colocar
mas valores podríamos hacerlo de esta forma:

Private Sub Form_Load()

Dim x As Integer

x = 10 'Le ponemos un valor a x

Select Case x

Case 5, 10
MsgBox "Se ejecutó el case que tiene el 5 y el 10"
'Se ejecuta esta sección
Case 15, 20
'Esto no se ejecuta
Case 25, 30
'Esto tampoco
End Select

End Sub

es decir que podemos listar los valores en los Case separados por comas. En el caso anterior
se ejecutará el case 5, 10 ya que la variable x vale 10

6 - Operadores de Visual basic


Los operadores nos permiten operar, validar, comparar, asignar, distinguir, etc.., los datos e
instrucciones de código de nuestros programas. A continuación los operadores mas
importantes.

Operadores aritméticos

Estos operadores nos permiten trabajar con cálculos matemáticos como la suma (+), resta
(-), división (/) y multiplicación (*).

Ejemplos:

a=5
b = 15
c = a + b ' en este caso la variable c contendría el valor 20

ganancia = 500
perdida = 200
total = ganancia - perdida 'la variable total pasaría a valer 300

x = 100
y = 20

z = x / y ' La Variable z vale 5

x = 100
y = 20
z = x * y ' La Variable z vale 2000

Operadores lógicos

Se utilizan en expresiones para devolver resultados del tipo True o False, es decir
Verdadero o falso. Los mas comunes son el operador And y el operador Or

Ejemplos:

If (x = 10) And (nombre = "maría") Then

'solo se ejecutará el código dentro de este bloque IF si la variable


'x vale 10 y la variable nombre es igual a maría

End If

If (m = 10) Or (nombre = "pedro") Then

'el código se ejecutará si por lo menos una variable es correcta


'es decir si por lo menos se cumple una condición

End If

Operadores de comparación

Los operadores de comparación se utilizan para comparar expresiones de cualquier tipo.


Los mas importantes son: El operador de igualdad (=), menor que (<), mayor que (>),
distinto a(<>)

Ejemplos:

If label1.Caption = "06/08/1978" Then

'si el control label1 en su caption contiene esa fecha


'se ejecutará el código que este aquí

End If
if x > 6 then
'si la variable x es mayor que 6 se ejecutará el código que este aquí
end if

If país <> "Estados unidos" Then


'si la variable país es distinta a "Estados unidos" se ejecutará el código
End If

While c <= 87

'mientras la variable c sea menor o igual a 87 se ejecutará


'el bucle While

Wend

Por último quedaría por ver el operador de concatenación (&) que se utiliza para unir
cadenas de caracteres.

Por ejemplo:

nombre = "Jose"
apellido = "Peralta"

nombrecompleto = nombre & apellido

'La variable nombrecompleto pasaría a contener la unión de las otras dos variables
'es decir Jose Peralta

Nota: hay muchos mas operadores en Visual Basic, estos son los básicos

Capítulo 4 - Subrutinas de código, procedimientos y


funciones en vb

1 - Subrutinas de código
Se denomina subrutina a una porción de código que tiene como principal función ejecutar
una determinada tarea. Estas tienen un nombre para poder identificarlas y luego poder
llamarlas para poder utilizarlas.

Las subrutinas tienen un principio y un fin y estas pueden tener distinto tipo de alcance, o
sea pueden ser de tipo privadas o públicas.
En el siguiente ejemplo se muestra una subrutina que crea visual basic automáticamente
cuando en un formulario insertamos un botón llamado Command1 y desde la ventana de
eventos seleccionamos el evento click del mismo

Private Sub Command1_Click()

End Sub

Ahora, si colocamos por ejemplo un control TextBox llamado TextPedidos y hacemos


doble click sobre el mismo, se crea el procedimiento por defecto para los TextBox, que es
el evento Change

Private Sub TextPedidos_Change()

End Sub

En estos 2 últimos ejemplos tenemos una subrutina o procedimiento de tipo Privado, esto
quiere decir que la podemos utilizar solo en el formulario o módulo donde está declarada o
escrita

La palabra sub le sigue el nombre de la rutina que la identifica. En este caso


Command1_click() y en el otro ejemplo TxtPedidos_Change().

Si quisiéramos que estos procedimientos se puedan llamar desde otro formulario, lo que
tendríamos que hacer es cambiar el alcance del procedimiento, en ves de Private Sub
cambiarlo por Public Sub. si hacemos esto, ese procedimiento de código puede ser utilizado
desde cualquier parte del proyecto.

Subrutinas y Procedimientos propios

También podemos crear nuestros propios Procedimientos y Subrutinas de código para


ejecutar una determinada tarea.

Para crear un procedimiento de código se debe escribir la palabra Private sub o Public sub
(depende el alcance), seguida del nombre del procedimiento (un nombre que queramos) y
los parámetros, si es que le enviaremos parámetros (los parámetros son opcionales).
Además el procedimiento debe ser escrito en un lugar vacío de la ventana de código, es
decir nno se puede crear un procedimiento dentro de otro
Un ejemplo para crear un procedimiento:

Private Sub ProcedimientoBorrar()

label1 = ""
label2 = ""
label3 = ""

End Sub

En este ejemplo creamos un procedimiento muy simple que tendrá la función específica de
borrar el contenido de 3 controles label.

¿ Pero ahora te preguntarás como hago para que se ejecute el procedimiento que he
creado ?.

Muy fácil. Solo debemos escribir el nombre del procedimiento en el lugar donde queremos
que se ejecute. Por ejemplo supongamos que tenemos un formulario con 3 controles Label
(Label1, Label2 y Label3), También un Commandbutton llamado Command1 y en la
ventana de código hemos escrito el procedimiento del ejemplo anterior. Si nosotros
queremos llamar al procedimiento, que borrará el contenido de los label cuando hagamos
click en el Command1 lo haríamos así:

Private Sub command1_click()

ProcedimientoBorrar

End Sub

Al presionar el Command1 visual basic detectaría el nombre ProcedimientoBorrar, y


automáticamente saltaría al lugar donde creamos el procedimiento y ejecutaría las líneas de
código que haya en ese procedimiento.

También podemos llamar a un procedimiento utilizando la palabra Call, que quiere decir
llamar, seguida del nombre del procedimiento, pero en este caso si utilizamos call y nuestro
procedimiento contiene parámetros, debemos pasarlos entre paréntesis ( los parámetros de
procedimientos y funciones se explican a continuación)

una vez que se ha terminado de ejecutar las instrucciones que estén dentro del bloque del
procedimiento, volvería a la línea siguiente de donde fue llamado el mismo, y ejecutaría
todas las líneas restantes de código. En este caso no ejecutaría nada mas por que no hemos
puesto ninguna otra instrucción debajo de ProcedimientoBorrar.
La principal ventaja de crear procedimientos de código es que evita tener que escribir varias
veces las mismas instrucciones en un programa, el código se hace mucho mas funcional y
entendible, se pueden dividir un problema (una rutina), en varios procedimientos y
probarlos independientemente, y además la posibilidad de enviar parámetros a los
procedimientos

1.1 - Pasar parámetros a los procedimientos:


Se utilizan los parámetros en los procedimientos para que el procedimiento no ejecute
siempre las mismas líneas de código y pueda variar, teniendo la posibilidad de hacerlo mas
dinámicamente. En ciertas ocaciones no es necesario enviar parámetros, pero en otras es
prácticamente fundamental. Los parámetros son datos, casi de cualquier tipo, que se pasan
seguido del nombre del procedimiento, y si es mas de uno deben ir separados por comas (,).
Ejemplo:

DatosPersonales "Luciano", 25, "La plata"

En este ejemplo pasamos tres parámetros: El primero es un nombre y es un dato de tipo


String y por ende debe ir entre comillas. El segundo es un número y el tercero también un
string. , o sea una cadena de caracteres

Pero la cosa no queda acá. Si nosotros vamos a pasar parámetros a un procedimiento,


cuando creamos el procedimiento debemos establecer que tipo de parámetros va a recibir el
mismo. Ejemplo:

Private Sub DatosPersonales(nombre As String, edad As Integer, ciudad As String)

Label1 = nombre
Label2 = edad
Label3 = ciudad

End Sub

siguiendo, el ejemplo anterior creamos un procedimiento con tres parámetros. Cada


parámetro se declara como se hace con las variables, o sea que debemos darles un nombre a
la variable y definir el tipo de dato ( sin utilizar la palabra Dim ) que recibirá cuando las
llamemos.

Ahora podríamos por ejemplo, en el evento click de un Command1, llamar al


procedimiento y pasarle los parámetros.
Coloca un Command1 , 3 controles Label, copia en la ventana de código el procedimiento
anterior llamado DatosPersonales, y ahora pega el siguiente código

Private sub command1_click()

DatosPersonales "Luciano", 25, "La plata"

End sub

Al presionar el botón se llamará al procedimiento que habíamos creado anteriormente, y le


pasará los valores de los parámetros en el orden en que estén establecidos declarados en el
procedimiento. Esto quiere decir que el primer parámetro con el valor "Luciano" se
almacenará o asignará a la variable nombre , el valor 25 se le asignará a la variable edad y
el último valor a la variable ciudad.

Después que las variables ya cargaron el valor las podemos utilizar dentro del
procedimiento, como en el ejemplo anterior que le asignamos a un control Label1 el
contenido de la variable nombre, al Label2 el contenido de edad y al Label3 el contenido de
la variable ciudad.

Es muy importante respetar el orden en que pasamos los parámetros en un procedimiento,


por que por ejemplo en el caso anterior si hubiésemos pasado los parámetros de esta forma:

DatosPersonales 25, "Luciano", "La plata"

el segundo parámetro "Luciano" se almacenaría en la variable Edad que es de tipo Integer y


se produciría un error en tiempo de ejecución por no coincidir los tipos de datos, ya que
la variable espera un valor numérico de tipo Integer y nosotros le estamos pasando una
cadena de caracteres, un dato de tipo String

Otra cosa importante es que cuando creamos, por ejemplo un procedimiento que va a
recibir 2 parámetros, cuando lo llamemos, no podemos enviarle solo 1 parámetro, debemos
obligatoriamente pasarle los 2 parámetros que hubiésemos declarado en el mismo. Un
ejemplo que daría un error en tiempo de ejecución por no pasar adecuadamente los
parámetros sería:

Private Sub sumar(a As Integer, b As Integer)

Label1 = a + b

End Sub
hasta aquí creamos un procedimiento llamado sumar que recibirá 2 parámetros de tipo
Integer, si nosotros llamamos al procedimiento y le pasamos un solo valor, por ejemplo:

Call sumar ( 456 )

Esto daría un error de compilación por que el procedimiento espera recibir 2 parámetros ..y
nosotros le estamos pasando o enviando solo uno de ellos.

Precisamente el cartel de error que te mostraría visual basic sería el siguiente:

Nota: hay una sentencia llamada Optional que SI permite pasar parámetros de forma
opcional, por ejemplo:

Private Sub Con_Parametro_Opcional(Nombre As String, _


Optional Email As String)

MsgBox Nombre

MsgBox Email

End Sub

Ahora si llamas a la rutina anterior, y omites el parámetro Email, esta no dará error, por
ejemplo:

Call Con_Parametro_Opcional("Maria")
Nota: Los parámetros opcionales, si o si deben estar declarados al final de la lista de
parámetros, por ejemplo esto no se puede hacer:

Private sub una_Rutina ( Optional Email As String, Nombre as String )

Función IsMissing
Esta función se utiliza cuando utilizamos parámetros opcionales en una función o
procedimiento, y nosotros, dentro del mismo queremos saber y averiguar si se han enviado
los parámetros opcionales

El uso de IsMissing muy simple. Esta función retorna el valor True si NO se ha enviado el
parámetro que queremos comprobar, y devuelve False si el parámetro ha sido enviado:

por ejemplo , colocar dos CommandButton

Private Sub Mostrar_Dato(Optional Nombre As Variant)

' Si IsMissing devuelve Verdadero, es por que no se envíó


If IsMissing(Nombre) = True Then
MsgBox " NO Se ha enviado el parámetro NOMBRE ", vbInformation
Else
MsgBox " Se ha enviado el parámetro NOMBRE ", vbInformation
End If

End Sub

'Acá No se envía el parámetro


Private Sub Command1_Click()
Mostrar_Dato
End Sub

'Acá Si se envía el parámetro

Private Sub Command2_Click()


Mostrar_Dato "María"
End Sub

1.3 - Pasar parámetros por valor y por referencia ( ByVal


y ByRef )
los parámetros en las funciones y procedimientos, se pueden enviar de dos maneras: por
Valor y por Referencia.

Si están declarados como ByVal, los mismos serán por valor, si se declaran como ByRef
serán por referencia.

La diferencia entre uno y otro método de paso de parámetros, es que en ByVal se envía una
copia de la variable, y de esta manera si se efectúa un cambio en el procedimiento, solo
tendrá efecto dentro del procedimiento o función, una ves que termine y finalice el mismo,
la variable original pasará a valer el dato que tenía, es decir no se modifica

En los parámetros enviados por Referencia, lo que se hace es enviar un puntero de la


variable original. Entonces, si en la función o procedimiento se cambia el valor de la
variable, el cambio seguirá manteniéndose una ves que finalice la ejecución del
procedimiento o función.

1.4 - Ejemplo de envío de parámetros por Valor ( ByVal )

Código de ejemplo

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía la variable por Valor ( ByVal )

Call Sumar(Un_Valor)

'Muestra el valor que es 100, ( no se modificó en la función Sumar )


MsgBox Un_Valor

End Sub

Sub Sumar(ByVal Valor As Long)


'Modifica la variable
Valor = Valor + 100

End Sub

En el ejemplo anterior hay una Sub llamada Sumar que recibe como parámetro una variable
enviada por valor con ByVal ( es decir es una copia de la variable original ). al presionar el
Commmand1.
Al entrar en la Sub Sumar, el dato se modifica ( Valor = Valor + 100). Cuando finaliza el
procedimiento Sumar y retorna a la línea siguiente de la llamada a la Sub sumar, muestra
mediante un MsgBox el valor de la misma, en este caso es 100, y NO 200 que es el cambio
que tuvo dentro del procedimiento Sumar ( Valor = Valor + 100 ).

Con esto queda visto que en realidad al enviarla como ByVal, se envía una copia de la
variable original y cualquier cambio que se produzca, será solo en el ámbito del
procedimiento o función

1.5 - Ejemplo de envío de parámetros por Referencia


( ByRef )
Este ejemplo es igual que el anterior, pero en la Sub sumar , la variable Valor se declara
con ByRef ( por Referencia )

Código

Private Sub Command1_Click()

Dim Un_Valor As Long

Un_Valor = 100

'Se envía la variable por Referencia ( ByRef ) con el valor 100

Call Sumar(Un_Valor)

'Muestra el valor que ahora es 200, ( ya que se modificó en la Sub Sumar)


MsgBox Un_Valor

End Sub

Sub Sumar(ByRef Valor As Long)


'Modifica la variable
Valor = Valor + 100

End Sub

Al probar el código, ahora el Msgox al mostrar el valor de la variable, es de 200, y NO de


100 como en el ejemplo de ByVal.

Esto demuestra que al enviar la variable como referencia, si la misma se modifica dentro
del procedimiento o función, se está modificando la variable REAL, es decir cualquier
cambio que se le haga a la misma, se mantendrá, ya que se está modificando la variable
Real ( no es una copia )
Nota Importante: cuando no se indica a un parámetro de una función o Rutina ni ByVal,
ni ByRef, se asume que la misma se está enviando como referencia (ByRef).

Es decir lo siguiente recibe el parámetro como Referencia

Sub Sumar(Valor As Long)

.. que es lo mismo a esto:

Sub Sumar(ByRef Valor As Long)

2 - Las Funciones en visual basic

Las funciones son casi exactamente iguales que los procedimientos con respecto a la forma
en que se los llama y se los crea o declara en el código, en como se le pasa los parámetros
etc..

La diferencia fundamental con respecto a los procedimientos o subrutinas es que estos,


luego de ejecutar el código que tengan en su interior, al final retornan un valor, y este
valor luego lo podemos utilizar para una determinada tarea. En cambio los procedimientos,
solo ejecutan el código que contienen y luego mueren por decirlo de alguna manera.

Para declarar o crear una función podríamos escribir lo siguiente:

Private Function Total(Valor1 As Integer, Valor2 As Integer) As Long

Total = Valor1 + Valor2

End Function

Seguramente notaste que declaramos la función llamada Total, y al final de los parámetros
dice As Long , esto es por que como dijimos las funciones retornan o devuelven un valor, o
sea que en este caso la función es de tipo Long, o mejor dicho devolverá un valor de tipo
Long., y luego ese valor devuelto lo podemos utilizar en otra parte del programa.

Las Funciones pueden retornar casi cualquier tipo de datos, como números, cadenas,
fechas, arreglos y vectores

Para llamar a la función anterior podríamos hacerlo de la siguiente manera:


Label1.caption = Total 502, 1478

En este caso el control Label1 llamaría a la función Total , la función realizaría la suma de
los valores pasados como parámetros y por último el valor final de la suma se lo
asignaría al control label1.

Capítulo 5 - Funciones propias de Visual Basic

1 - Funciones para el tratamiento de cadenas


Las funciones de cadena , como su nombre lo indica, se utilizan para trabajar y tratar las
cadenas de caracteres.

A continuación las mas importantes de ellas.

1.1 - Función Lcase y Ucase


Estas dos funciones se utilizan para convertir cadenas de texto a minúscula y mayúscula.
La función Lcase cambia o convierte una cadena de texto a minúscula y un ejemplo de
como utilizarla sería así:

Lcase (cadena que queremos convertir a minúsculas)

Ejemplo:

Dim cadena As String

cadena = "HOLA MUNDO"

'Convertimos
cadena = LCase(cadena)

'La variable cadena ahora vale "hola mundo"

La función Ucase funciona de la misma manera que Lcase pero convierte el contenido de
una cadena a mayúsculas.

Por ejemplo, si tenemos un control Label1 que contiene un texto que dice: "Porcentaje de
sueldos", escribiendo la siguiente línea:

Label1 = UCase(Label1)

El control Label1 pasaría a mostrar o mejor dicho contener en su propiedad


caption:"PORCENTAJE DE SUELDOS".

1.2 - Función Trim, LTrim y RTrim


Estas tres funciones se utilizan para eliminar los espacios vacíos de una cadena.

LTrim elimina los espacios vacíos de la parte izquierda de la cadena, RTrim de la parte
derecha y Trim de ambas partes.

Ejemplos:

Tenemos una variable llamada ciudad con el valor " Barcelona". Para eliminar los espacios
vacíos de la izquierda haríamos lo siguiente:

ciudad = LTrim(ciudad)
Si en un TextBox quisieramos borrar todos los espacios vacíos de la parte derecha de la
cadena:

MiText = RTrim(MiText)

La Función Trim elimina todos los espacios vacíos de ambos lados de la cadena. Ejemplo:

Pais = " Argentina "


País = Trim(Pais)

Ahora el valor de País es igual a: "Argentina".

1.3 - Función Len


La función Len nos permite conocer la cantidad de caracteres que tiene una determinada
cadena. O sea que esta función nos devuelve un número.

Ejemplo:

Len (Aquí va la cadena que queremos averiguar su tamaño)

Como la función Len devuelve un número debemos asignar ese número devuelto en una
variable de tipo numérica.

Ejemplo:

Dim TamanoCadena As Long

Dim MiCadena As String

MiCadena = "Me Llamo Eustaquio"

TamanoCadena = Len(MiCadena)

El valor de la variable TamanoCadena pasaría a valer 18.

Hay que tener en cuenta que la función Len también toma en cuenta los espacios vacíos.
1.4 - Función Asc y Chr
La función Asc nos permite obtener el código ASCII de un de terminado caracter.

Ejempos:

Si queremos obtener el código ASCII del caracter "a", que es el número 97 podríamos
hacer lo siguiente:

Dim num As Integer

num = Asc("a")

En definitiva la función Asc lleva un solo parámetro de tipo String del cual queremos
obtener dicho número.

La Función Chr actúa a la inversa de la función Asc, esto quiere decir, que a partir de un
determinado número nos devolverá el caracter ASCII.

Obviamente que en vez de pasarle a la función un parámetro String es decir la letra,


debemos pasarle un número ASCII y nos devolverá el carácter asociado.

Ejemplo:

Dim letra As String

letra = Chr(97)

La variable pasa a valer en este caso el caracter "a"

1.5 - Función InsTr


La función InStr se utiliza para buscar una cadena o parte de una cadena dentro de otra
cadena.

Si la función encuentra la cadena a buscar devuelve un número que representa la posición


donde encontró la cadena, si no la encuentra devuelve un 0.

Los parámetros que lleva esta función son:

InStr (comienzo, Cadena donde buscar , La Cadena a buscar)

Como esta función devuelve un número debemos almacenarla en una variable de tipo
numérica para utilizarla.

Ejemplo:
Dim posicion As Integer

posicion = InStr("Estoy tomando mate", "mate")

En este ejemplo la función encontró la cadena "mate" en la posición 15, o sea que la
variable posición pasa a valer 15.

Si observamos bien, la función en el primer parámetro, denominado comienzo, nos pide


que le digamos desde que posición comenzar a buscar. En nuestro ejemplo, este parámetro
lo obviamos, esto quiere decir que comenzará desde la posición 0 de la cadena a buscar.
Pero podríamos especificar una posición en particular, por ejemplo desde la 5 , 10 etc...,
según lo que necesitemos hacer.

Otro ejemplo de InsTr :

Este ejemplo, muestra como buscar dentro de un control TextBox, el cual tiene dos
opciones, un botón para buscar la primera frase, y otro que sigue buscando a partir de
donde esté ubicda la selección.

Para armar el ejemplo colocar un Textbox llamado Text_Buscar que es donde se ingresará
la frase y otro TextBox llamado Text1 que tendrá el texto. Este ultimo con la propiedad
Multiline en True.

También colocar dos CommandButton: Command1 y Command2


Colocar el siguiente código fuente en el formulario:

Option Explicit

Private m_Pos As Integer

Sub buscar_cadena(ByVal Posicion As Integer)

Dim p As Integer, Frase As String

Frase = txt_Buscar

p = InStr(Posicion, Text1, Frase)

If p > 0 Then
m_Pos = p

With Text1
.SelStart = m_Pos - 1
.SelLength = Len(Frase)
.SetFocus
End With
Else
MsgBox "No se encontró la frase", vbInformation
Text1.SetFocus
End If
End Sub

Private Sub Command1_Click()


'Busca a pratir de la primera pocición
Call buscar_cadena(1)
End Sub

Private Sub Command2_Click()


'Busca a partir del valor que tenga m_Pos

Call buscar_cadena(m_Pos + 1)

End Sub

Private Sub Form_Load()


Command1.Caption = "Buscar"
Command2.Caption = "Buscar siguiente"
Me.Caption = "Ejemplo de InStr "
End Sub

Nota: también hay una función similar a Instr llamada InstrRev , y lo que hace es devolver
la posición de la primera concurrencia de una cadena dentro de otra cadena, pero
comenzando por el extremo derecho de la misma

En este enlace hay un ejemplo que usa la función instrRev

Extraer de un path o ruta, solo la extensión del archivo


Función Left, Right y Mid

Estas funciones son utilizadas para extraer partes de una cadena.

La función Left:

tiene 2 parámetros: El primero es la cadena de la cual se extraerán caracteres, y el segundo


un número desde el cual comenzar a extraer caracteres desde la parte izquierda.

Ejemplo:

Dim Cadena As String

Cadena = Left("Ya es la madrugada", 9)

'Cadena, que es un string, sería igual a: "Ya es la"

Función Right:

Es igual que la función Left pero comienza a extraer caracteres desde el lado derecho de la
cadena.

La función Mid:

Tiene la misma función que las anteriores pero posee tres parámetros. Su sintaxis es:

Mid (cadena, inicio, longitud)

El parámetro cadena es la cadena a extraer caracteres. El parámetro Inicio es donde


comenzar y el parámetro longitud, es la cantidad de caracteres a extraer de la cadena de
caracteres

Ejemplos:

Dim nombre As String


nombre = Mid("River perdió la copa", 7, 6)

'La variable nombre sería igual a: "perdió"

Este Otro ejemplo usa la función Mid para realizar un simple efecto tipo máquina de
escribir.

Colocar en un formulario un CommandButton y el siguiente código fuente en el form.

Option Explicit
Sub Pausa(Segundos As Double)

Dim inicio As Double

' Devuelve la cantidad de segundos desde que inicio windows


inicio = Timer

Do While (Timer - inicio) < Segundos


' pausa
DoEvents
Loop
End Sub

Private Sub Command1_Click()

Dim texto As String

texto = "... Hola mundo --->>> "

Call MostrarTexto(texto, 0.1, Me)

End Sub

Private Sub MostrarTexto(Frase As String, _


Segundos As Double, _
Destino As Object)

Dim LenFrase As Integer


Dim i As Integer
Dim Caracter As String
Dim texto As String

LenFrase = Len(Frase)

Do While i <= LenFrase


Destino.Cls

DoEvents
i = i + 1
' Obtiene el siguiente caracter
Caracter = Mid(Frase, i, 1)
' texto actual
texto = texto & Caracter
Destino.Print texto ' Imprimi e/ dibuja el texto
' pausa o delay
Pausa Segundos
DoEvents
Loop
End Sub

Private Sub Form_Load()


Me.FontSize = 12
Me.Font.Bold = True
Me.ForeColor = vbRed
Command1.Caption = " Efecto de texto con mid "
End Sub

Private Sub Form_Unload(Cancel As Integer)


End
End Sub
1.6 - Función Str y Val

La función Val convierte una cadena en un número yla función Str un número en una
cadena.

Ejemplos:

cadena = "123456"
cadena = Val(cadena)

'Ahora cadena vale 123456

cadena2 = 123456
cadena2 = Str(cadena2)

'Ahora cadena2 vale "123456"

2 - Funciones para el tratamiento de números


Visual Basic posee muchas funciones para tratar números. A continuación las principales
funciones.

2.1 - Función Round


La función Round se utiliza para redondear un número decimal, devolviendo un número
entero.

Ejemplo:

Dim Mimumero As Long

Minumero = Round(245.8) '(La función devuelve 246)


Minumero = Round(245.3) '(La función devuelve 245)
Minumero = Round(245.5) '(La función devuelve 245)
Round posee un parámetro opcional por si queremos incluir los dígitos decimales.

2.2 - Rnd y Randomize - Números aleatorios


Para generar números aleatorios, Visual Basic incluye 2 funciones: Rnd y Randomize.

La función Rnd devuelve un número aleatorio, y esta posee un solo parámetro.

Ejemplo :

Rnd (número)

Pero para poder generar dichos números aleatorios, debemos utilizar previamente la
función Randomize con la siguiente fórmula:

Dim LimiteInferior As Integer


Dim LimiteSuperior As Integer

LimiteInferior = 20

LimiteSuperior = 40

MsgBox Int((LimiteInferior - LimiteSuperior + 1) * Rnd + LimiteInferior)

En el ejemplo anterior, se generarán números aleatorios comprendidos entre el 20 y el 40

Nota: en este enlace podés ver un ejemplo que permite generar números aleatorios no
repetidos

Funciones matemáticas
Las principales funciones matemáticas provistas por Visual Basic son:

• Abs: Devuelve el valor absoluto de una expresión numérica.


• Atn: Devuelve el arco tangente de un número.
• Cos: Devuelve el coseno de un ángulo.
• Exp: Devuelve el número "e" elevado a una potencia.
• Log: Devuelve el logaritmo natural de un número.
• Sgn: Devuelve un valor indicando el signo de un número.
• Sin: Devuelve el seno de un ángulo.
• Sqr: Devuelve la raíz cuadrada de un número.
• Tan: Devuelve la tangente de un ángulo.
3 - Funciones de formato
Visual Basic posee varias funciones para darle formato a distintos tipos de datos e
información. A continuación se ve algunos ejemplos de las principales funciones:

• FormatCurrency: Esta función se utiliza para trabajar con números con formato en
dinero. Ejemplo:
si tenemos un número 3 y utilizamos la función nos devolvería "$3".
• FormatPercent: Esta función es utilizada para trabajar con porcentajes. Ejemplo :
si tendríamos un número 321, nos devolvería: "32,1%" .
• FormatDateTime: Esta función trabaja con fechas y horas.
• FormatNumber: Formatea expresiones números

Resultado = FormatPercent(321) 'devuelve: "32.100,00%"


Resultado = FormatCurrency(3) 'devuelve: "$3,00"
Resultado = FormatDateTime("6-8-1978") 'La función devolvería: "06/08/1978"

NumDigitsAfterDecimal: Parámetro de tipo opcional. Este indicará cuantos números


decimales devolverá la función:

Ejemplo

cadena = FormatCurrency(325, 3) 'Devuelve: "$325,000"

Ejemplo de la función FormatDateTime

Esta función, en el primer parámetro se le debe pasar la fecha u hora a formatear, y el


segundo parámetro es el tipo de formato, pueden ser 5 tipos.

vbGeneralDate, vbLongDate, vbShortDate, vbLongTime y vbShortTime.

Este parámetro es de tipo opcional. al colocar la coma dentro de la función , visual basic
despliega la lista de constanetas mencionadas, como muestra el gráfico:
Un ejemplo para ver estos formatos utilizando FormatDateTime: Colocar cinco option
Button, cada botón de opción mostrará los diferentes formatos en el caption del formulario,
es decir en la barra de título.

Código en el formulario:

Private Sub Form_Load()

Option1.Caption = " vbGeneralDate "


Option2.Caption = " vbLongDate "
Option3.Caption = " vbShortDate "
Option4.Caption = " vbLongTime "
Option5.Caption = " vbShortTime "

End Sub
Private Sub Option1_Click()
Me.Caption = FormatDateTime(Now, vbGeneralDate)
End Sub

Private Sub Option2_Click()


Me.Caption = FormatDateTime(Now, vbLongDate)
End Sub

Private Sub Option3_Click()


Me.Caption = FormatDateTime(Now, vbShortDate)
End Sub

Private Sub Option4_Click()


Me.Caption = FormatDateTime(Now, vbLongTime)
End Sub

Private Sub Option5_Click()


Me.Caption = FormatDateTime(Now, vbShortTime)
End Sub

FormatNumber - Ejemplos:

Formatea 0.489698 a 0,49

Dim Numero As Double

Numero = 0.489698
Numero = FormatNumber(Numero, 2, vbFalse)

MsgBox Numero

Formatea 1.958754 a 1,96

Dim Numero As Double

Numero = 1.958754
Numero = FormatNumber(Numero, 2)

MsgBox Numero

Función Format:

La función Format es mas completa que las anteriores funciones, porque puede manejar
mas tipos de datos, y no devuelve solo cadenas, esta también puede devolver números y
fechas.

La función Format posee dos parámetros:

Format (Expresión, formato)

En el primero debemos colocar cualquier expresión válida. El segundo es opcional y a


continuación veremos una descripción de los formatos de VB:

• GeneralNumber: Devuelve el número sin formato.


• Currency: Devuelve el número en formato moneda, con el símbolo "$" y 2
decimales a las derecha.
• Fixed: Devuelve como mínimo un dígito a la izquierda y 2 ala derecha del decimal.
• Standar: Similar a Fixed pero incluye un separador de miles.
• Percent: Multiplica el número por cien y le agrega el símbolo "%"
• True/False: Devuelve Verdadero para un valor distinto de 0,y Falso para 0.
• On/OFF: Devuelve "Activado" para un valor distinto de 0, y "Desactivado" para 0.

La forma de pasar el parámetro es entre comillas.

Ejemplo:

cadena = Format(75, "Currency") ' Devolvería: "$75,00"

Nota: Si ingresamos un número decimal, debemos utilizar el "." y no la coma "," ya que la
coma determina el comienzo de otro parámetro dentro de la función y Visual basic daría
error de sintaxis

4 - Funciones de formato para fechas y hora

Ejemplos de los principales Formatos con nombre para el manejo de Fechas y Horas:

Funciones para Fechas

Dim cadena As String

cadena = Format("06/08/78", "General Date") ' Devuelve: "06/08/1978"

cadena = Format("19/08/79", "Long Date") ' Devuelve : "Jueves 19 de Agosto de 1979".

cadena = Format("19/8/79", "Medium Date") ' Devuelve: "19-Ago-1979"

cadena = Format("17:08", "Short Time") ' "05:08"

cadena = Format("17:08", "Medium Time") ' "05:08 PM"

cadena = Format("17:08", "Long Time") ' "05:08:00 PM"

4.1 - Funciones para calcular fechas


Visual basic cuenta con una serie de funciones que nos permiten calcular fechas y horas,
por ejemplo generar un intervalo de fechas, sumar y restar fechas y horas y otras
operaciones y cálculos

DateAdd : Devuelve un Variant que contiene una fecha que indica el intervalo de tiempo
que se ha agregado

DateDiff : Devuelve el número de intervalos de tiempo entre dos fechas determinadas

DatePart : Devuelve una parte específica de una fecha dada

DateSerial : Devuelve un valor Date para un año, mes y día determinados

Ejemplos

El siguiente ejemplo utiliza la función DateDiff para mostrar el itervalo entre dos fechas. El
intervalo lo muestra en segundos , minutos, dias, semanas meses y años, como muestra el
siguiente gráfico

Colocar en el formulario un Command1.

Option Explicit

' recibe las dos fechas como parámetros


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Calcular(Fecha_Inicial As Date, _
Fecha_Final As Date)

Const Formato As String = "#,##0"

Me.Cls
Me.Print "Calcular Intervalos entre las fechas " & Fecha_Inicial & _
" hasta :" & Fecha_Final & vbNewLine & String(150, "-") &
vbNewLine

Me.Print Format(DateDiff("s", Fecha_Inicial, Fecha_Final), Formato) &


" segundos"
Me.Print Format(DateDiff("n", Fecha_Inicial, Fecha_Final), Formato) &
" minutos"
Me.Print Format(DateDiff("h", Fecha_Inicial, Fecha_Final), Formato) &
" horas"

Me.Print Format(DateDiff("y", Fecha_Inicial, Fecha_Final), Formato) &


" dias"
Me.Print Format(DateDiff("WW", Fecha_Inicial, Fecha_Final), Formato)
& " semanas"
Me.Print Format(DateDiff("m", Fecha_Inicial, Fecha_Final), Formato) &
" meses"
Me.Print Format(DateDiff("yyyy", Fecha_Inicial, Fecha_Final),
Formato) & " años"

End Sub

Private Sub Command1_Click()


' le pasa las dos fechas a la función
Call Calcular("01/01/2000", Date)
End Sub

Private Sub Form_Load()

Me.AutoRedraw = True
Command1.Caption = "calcular intervalos "

End Sub

Ejemplo con DateAdd

Lo siguiente, muestra como añadir y restar fechas

' agrega 10 años a la fecha actual


MsgBox DateAdd("yyyy", 10, Date)

' Agrega cinco meses a la fecha actual


MsgBox DateAdd("m", 5, Date)

' resta 1 dias a la fecha actual ( usa el signo -)


MsgBox DateAdd("y", -1, Date)

Nota: para restar, usar el signo negativo, como se usa en el último ejemplo.

Para poder restar y agregar segundos a una hora, usar en el parámetro intervalo la "S", para
minutos usar la "n", para horas la "h", para restar y sumar semanas la "ww"

En el siguiente enlace podés ver algunos otros ejemplos que trabajan con dichas funciones

Funciones para trabajar con fechas en visual basic


Calcular edad de una persona usando DateDiff

Averiguar con Dateserial, el Primer y último día de un mes

4.2 - Funciones para obtener la fecha u hora actual de la


PC

Dim Cadena As String


Cadena = Date ' Devuelve el día del sistema en este formato: "02/08/2004"

Cadena = Time ' Devuelve la hora del sistema en este formato: "17:32:51"

'Funciones para establecer la fecha u hora de la PC:

Date = (La fecha que queremos establecer)

Time = (La hora que queremos establecer)

5 - Funciones para presentar mensajes

Visual Basic posee 2 tipos de funciones para presentar mensajes, ellas son MsgBox e
InputBox.

Función InputBox:
La función InputBox presenta un mensaje al usuario, permitiéndole ingresar un valor en
una caja de texto:
Como se dijo la función InputBox presenta un cuadro de diálogo donde el usuario puede
ingresar un texto y luego aceptar o cancelar dicho cuadro de diálogo.

Los parámetros principales de esta función son:

InputBox (Promt,Title, Default)

• El parámetro Prompt específica la leyenda que mostrará la caja de mensajes.


• El parámetro Title especifica el título que llevará el cuadro de diálogo.
• El parámetro Default es el texto que mostrará la caja de texto.

El aspecto mas importante de InputBox es que nos devuelve una cadena con lo que haya
ingresado el usuario en la caja de texto. Luego podemos realizar una tarea específica
dependiendo del valor devuelto.

Ejemplo:

Dim retorno As String

retorno = InputBox("Ingrese algo en la caja de texto", "Ejemplo")

MsgBox "Usted ingresó:" & retorno

En el ejemplo anterior, en la variable Retorno se almacenará el valor que haya ingresado el


usuario cuando haga Click en el botón de Aceptar.

Cuando el usuario presiona Candelar, el InputBox devuelve una cadena vacía. Esto es
importante tenerlo en cuenta para realizar una o tal acción

Si quiseramos por ejemplo desplegar un InputBox, y que este no se cierre hasta que el
usuario si o si haya ingresado un valor, podemos hacerlo de la siguiente forma, utilizando
una condición en un bucle Do Loop

Código fuente en el formulario

Private Sub Form_Load()

Dim Dato As String

' Hasta que no se ingrese un dato, _


el InputBox no se cerrará
Do
Dato = InputBox("Ingresar algun dato", " Ejemplo ")
Loop Until Dato <> ""

'Muestra el valor
MsgBox Dato, vbInformation

End Sub

Enlace relacionado :

InputBox con PasswordChar

Función MsgBox:

La función MsgBox, que ya se vió varias veces en distintos ejemplos, es muy fácil de usar
y se utiliza para mostrar distintos tipos de mensajes.

Ejemplos de mensajes o cajas de texto con la función MsgBox que podemos mostrar:

Como se ve en los gráficos anteriores, con MsgBox podemos tener variedad a la hora de
mostrar un determinado mensaje, utilizando para ello las diferentes constantes que
incorpora la función.
Los parámetros mas importantes son:

• Title : Es la leyenda que aparecerá en el título del mensaje.


• Texto : Es el Texto que mostrará el mensaje.
• Botones: En este parámetro se colocan las constantes que determinarán si la caja
tiene uno o varios botones y el tipo de mensaje: informativo, de exclamación de
alerta etc... Cuando escribimos la coma dentro de la función en el parámetro
botones, Visual Basic despliega una lista con las opciones o constantes que
podemos utilizar.

CAPITULO 6: Los arreglos, matrices, vectores y


vectores de controles

1 - Arreglos y vectores
Los Arreglos se utilizan para almacenar un conjunto de variables, que sean del mismo tipo
de dato, y todas estas bajo un mismo nombre.

Por ejemplo imaginemos que tenemos 20 variables de tipo String que almacenan nombres
(nombre1, nombre2, etc..). si yo ahora quisiera pasar todas estas cadenas a minúsculas
tendría que utilizar la función Lcase con cada variable: nombre1 = Lcase(nombre1),
nombre2 = Lcase(nombre2), etc..

En cambio si utilizara un arreglo solucionaría mi problema solo a esto

Dim nombres(30) As String

For x = 0 To 30

nombres(x) = LCase(nombres(x))

Next

Siguiendo el ejemplo anterior: en vez de escribir la sentencia Lcase 30 veces para cada
variable, hemos utilizado un arreglo llamado nombres con un número de índice 30 , es
decir que almacena 30 datos de tipo String
1.1 - Declaración de los arreglos en el código
Para crear un arreglo se debe en primer lugar declararlo como cualquier otra variable, la
única diferencia es que debemos indicar la cantidad de elementos que contendrá el arreglo,
colocando el número de índice entre paréntesis. Por ejemplo :

Lo siguiente crea un arreglo de 15 elementos o datos de tipo integer

Dim miArreglo (1 to 15) as integer

Esto crea un arreglo de 11 elementos o datos de tipo String

Dim empleados (10) as String

Como podemos ver en el primer ejemplo hemos declarado un arreglo llamado miArreglo y
entre paréntesis hemos declarado el rango de capacidad del mismo, es decir la cantidad de
datos que podrá contener

El primer número , el 1 , indica el límite inferior del mismo, y el número 15 indica el límite
máximo del arreglo, conformando de esta manera un arreglo que podrá almacenar 15 datos
de tipo string.

En el segundo ejemplo, declaramos un arreglo de 11 elementos de tipo string. Como podés


ver hemos indicado solo un número que representa el valor máximo del mismo. Cabe
aclarar que hemos puesto de índice el número 10, pero en realidad el arreglo contiene 11
elementos ya que cuando NO indicamos el limite inferior , se asume que el mismo
comienza desde el 0.

Importante: los arreglos se dividen en 2 grupos, los vectores y las matrices. Los vectores
son arreglos que contienen una sola dimensión y las matrices 2 o mas dimensiones.

1.2 - Acceder a los datos de un arreglo


Para acceder a los datos de un arreglo o vector, debemos hacerlo mediante el índice o
número del elemento del mismo. Por ejemplo:

Dim alumnos(1 To 4) As String

alumnos(1) = "juan"
alumnos(2) = "micaela"
alumnos(3) = "maría"
alumnos(4) = "ignacio"
Primero declaramos un arreglo llamado alumnos, de tipo string y que contendrá 4
elementos. Luego le asignamos un valor de cadena como a cualquier otra variable de tipo
string, pero con la diferencia que para referirnos al elemento utilizamos el n° de índice del
mismo.

Otro ejemplo

Dim paises(2) As String

' Llena el vector con datos


paises(0) = "Argentina"
paises(1) = "Perú"
paises(2) = "Brasil"

' Recorre los elementos del vector


For x = 0 To 2

MsgBox "Nombre del país : " & paises(x)

Next x

En este último ejemplo, declaramos y creamos un vector de 3 elementos que contendrá el


nombre de 3 países. Luego en un bucle For utilizamos la función MsgBox para mostrar los
elementos del arreglo, pasándole como parámetro del índice la variable x del bucle For

1.3 - Utilizar una estructura Type o UDT en un arreglo


Como vimos, en un arreglo podemos almacenar datos de cualquier tipo pero no mezclarlos,
es decir podemos crear arreglos de tipo string, de tipo Integer etc,,, pero sin duda que lo
mas importante y de mas utilidad a la hora de programar es la utilización de datos definidos
por nosotros mediante una estructura Type

Por ejemplo:

Option Explicit

' Estructura de dato para el vector


Private Type agenda

nombre As String
apellido As String
cpostal As Integer

End Type

' Declaramos el vector


Dim personas(1 To 3) As agenda
Private Sub Form_Load()

' Llenamos con datos para el elemento 1 del arreglo

personas(1).nombre = "carlos"
personas(1).apellido = "Martínez"
personas(1).cpostal = 1900

' Llenamos con datos para el elemento 2 del arreglo

personas(2).nombre = "Héctor"
personas(2).apellido = "rosales"
personas(2).cpostal = 1898

' Llenamos con datos para el elemento 3 del arreglo

personas(3).nombre = "Albert"
personas(3).apellido = "Einstein"
personas(3).cpostal = 1324

End Sub

Para utilizar una estructura definida por nosotros en vectores o matrices, se hace de la
forma habitual, con la diferencia que debemos declarar el arreglo utilizando el tipo de dato
Type que hayamos creado, en este caso Dim personas(1 to 3) as agenda

2 - Las matrices

Como se dijo anteriormente, las matrices son arreglos de mas de 1 dimensión (2 o mas), a
diferencia de los vectores que poseen una sola dimensión.

Podemos imaginar una matriz bidimensional ( 2 dimensiones) , como una cuadrícula con
filas y columnas, donde las filas representarían las coordenadas x y las columnas las
coordenadas y.

A una matriz de 3 dimensiones o tridimensional se la puede imaginar con las coordenadas


x, y, z, y esta es ideal para representar figuras en el espacio por ejemplo.

Las matrices se declaran en el código de manera igual que los vectores, con la diferencia
que debemos indicar mas subíndices de acuerdo a la cantidad de dimensiones que
posea la matriz.

por lo general no se suele utilizar matrices de mas de 3 dimensiones..


2.1 - Ejemplo de matriz de 2 dimensiones

Matriz bidimensionales de 6 x 8 (de 2 dimensiones).

Dim personas (1 to 6, 1 to 8) as string

Si luego quisiera acceder a los datos de la misma basta con referirnos a los subíndices

Por ejemplo:

personas (1, 1) = "Natalia"


personas (2, 1) = "pedro"
personas (1, 7) = "valeria"
personas (1, 8) = "josé"
personas (2, 2) = "carolina"
personas (4, 1) = "raquel"
personas (6, 2) = "eustaquio"
personas (6, 5) = "maria"
personas (6, 8) = "mariana"

El total de índices posibles para almacenar datos o valores en el ejemplo anterior es de 48


datos, ya que si multiplicamos 6 x 8 nos da como total 48 valores posibles para utilizar en
la matriz bidimensional.

En este ejemplo creamos una matriz de 3 dimensiones de 3 x 3 x 3

Dim cubo (1 to 3, 1 to 3, 1 to 3) as integer

para acceder a los datos sería exactamente de la misma manera pero debemos utilizar un
índice mas.

Ejemplo:

cubo (1, 1 , 1) = 50
cubo (1, 1 , 2) = 50
cubo (1, 1 , 3) = 50
cubo (1, 2 , 1) = 50
cubo (1, 2 , 2) = 50
cubo (1, 2 , 3) = 50
cubo (1, 3 , 1) = 50
cubo (1, 3 , 2) = 50
cubo (1, 3 , 3) = 50
cubo (2, 1 , 1) = 50
cubo (2, 1 , 2) = 50
cubo (2, 1 , 3) = 50
cubo (2, 2 , 1) = 50
cubo (2, 2 , 2) = 50
cubo (2, 2 , 3) = 50
cubo (2, 3 , 1) = 50
cubo (2, 3 , 2) = 50
cubo (2, 3 , 3) = 50
cubo (3, 1 , 1) = 50
cubo (3, 1 , 2) = 50
cubo (3, 1 , 3) = 50
cubo (3, 2 , 1) = 50
cubo (3, 2 , 2) = 50
cubo (3, 2 , 3) = 50
cubo (3, 3 , 1) = 50
cubo (3, 3 , 2) = 50
cubo (3, 3 , 3) = 50

En el ejemplo anterior, que es un poco extenso, es para que veas todos los posibles valores
que puedes almacenar en una matriz de 3 x 3 x 3, y que da como resultado un arreglo de 27
valores posibles.

3 - Vectores dinámicos

Hasta ahora habíamos visto solo vectores o arreglos de tamaño fijo, ¿ pero qué pasa cuando
no sabemos el tamaño o el largo de un vector y queremos que sea variable ?.

Visual basic posee una sentencia o función que nos permite cambiar el largo de un vector
en tiempo de ejecución, dándonos así mas flexibilidad, y de esta manera no desperdiciar
memoria y recursos de la pc creando vectores mas largos de lo que realmente necesitamos.

Esta función se llama ReDim y ReDim Preserve , y un ejemplo de como aplicarla sería de
la siguiente manera:

3.1 - Ejemplo de vectores y arreglos dinámicos


En lo siguiente, primero declaramos un vector de la forma como lo hacemos siempre con la
diferencia de que en vez de colocar un tamaño declaramos el vector solo con los
paréntesis :

Dim alumnos () as string

Ahora le establecemos un tamaño, por ejemplo de 4 elementos y le agregamos valores:

ReDim alumnos(1 To 4) As String

alumnos(1) = "Luciano"
alumnos(2) = "Esteban"
alumnos(3) = "Mariano"
alumnos(4) = "Pedro"

Ahora para redimensionar el tamaño del vector por ejemplo a 7 elementos, utilizamos la
función ReDim Preserve, para preservar los 4 valores anteriores y le agregamos 3 valores
mas:

ReDim Preserve alumnos(1 To 7)

alumnos(5) = "Karina"
alumnos(6) = "Raúl"
alumnos(7) = "Romina"

Nota: si utilizamos la sentencia ReDim, o mejor dicho si redimensionamos el vector sin


utilizar la sentencia ReDim preserve, los valores que contenía el vector anteriormente se
perderán

Eliminar o vaciar un vector

Para eliminar un array, arreglo o vector, podemos utilizar Erase, por ejemplo:

Erase Nombre_Del_Vector

4 - Funciones de VB para trabajar con Arreglos -


LBound y UBound
Estas funciones son ideales para trabajar con vectores y matrices que han sido declaradas
dinámicamente
Lbound y Ubound nos devuelve un número de tipo Long que nos permite saber el límite
superior e inferior de un vector o una matriz.

4.1 - Ejemplo de Ubound y Bound


Private Sub Form_Load()

'Variables Para almacenar los límites superior e inferior


Dim LimiteInferior As Long
Dim LimiteSuperior As Long

'Declaramos 3 matrices, de una dimensión, _


de dos dimensiones y de 3
Dim UnVector(1 To 520) As Integer
Dim UnaMatriz(20, 5 To 100) As String
Dim OtraMatriz(10, 20, 30) As Long

' Devuelve 1
LimiteInferior = LBound(UnVector)
' Devuelve 520
LimiteSuperior = UBound(UnVector)
' Devuelve 0
LimiteInferior = LBound(UnaMatriz, 1)
' Devuelve 20
LimiteSuperior = UBound(UnaMatriz, 1)
' Devuelve 5
LimiteInferior = LBound(UnaMatriz, 2)
' Devuelve 100
LimiteSuperior = UBound(UnaMatriz, 2)
' Devuelve 0
LimiteInferior = LBound(OtraMatriz, 1)
' Devuelve 10
LimiteSuperior = UBound(OtraMatriz, 1)
' Devuelve 0
LimiteInferior = LBound(OtraMatriz, 2)
' Devuelve 20
LimiteSuperior = UBound(OtraMatriz, 2)

' Devuelve 0
LimiteInferior = LBound(OtraMatriz, 3)
' Devuelve 30
LimiteSuperior = UBound(OtraMatriz, 3)

End Sub

Como habrás visto en los ejemplos anteriores, para conocer los limites superiores e
inferiores en los vectores, solo se debe pasar como parámetro a las funciones Lbound y
Ubound, el nombre del vector con el cual queremos trabajar.
En cambio en las matrices se añade un segundo parámetro en el cual debemos indicar el
número de la dimensión en la cual queremos recuperar los valores.

Ejemplo 2 de LBound y UBound:

Si deseamos recorrer todos los elementos de un vector o una matriz podemos hacerlo
mediante un bucle For de la siguiente manera:

For x = LBound(vector) To UBound(vector)


MsgBox vector(x)
Next i

4.2 - Función Join, Split y Filter :

Visual basic en su sexta versión incorpora estas 3 funciones para trabajar solo con vectores.
Estas funciones están relacionadas con el tratamiento de las cadenas de caracteres.

Función Join

Esta función se utiliza para unir en una sola variable el conjunto de subcadenas de un
vector. Esta función tiene solo 2 parámetros y es muy fácil de usar. Ejemplo:

Dim micadena as string


Dim vector(1 To 3) As String

vector(1) = "Carlos"
vector(2) = "Pedro"
vector(3) = "Juan"

Ahora ejecutando Join, la variable micadena pasaría a valer "Carlos-Pedro-Juan"

micadena = join (vector, "-")

Nota: En el primer parámetro de la función debemos indicar el vector en el cual trabajar, y


en el segundo se debe indicar un delimitador de caracter para separar las cadenas. Si no
especificamos ninguno, visual basic utilizará por defecto un espacio vacío o en blanco (" ")
para separar cada subcadena .

Función Split:

Esta función hace el trabajo inverso de la función Join.

Split se utiliza para rellenar un vector dinámico que contiene un número de subcadenas a
partir de una cadena que le pasamos como parámetro a la función.

Para aclarar un poco un ejemplo

Private Sub Form_Load()

'Una variable para almacenar una cadena


Dim Micadena As String 'Vector dinámico
Dim Vector() As String

'Le damos un valor a la variable


Micadena = "maria/natalia/romina"

'Ejecutamos la función Split


Vector = Split(Micadena, "/")

'Ahora el vector dinámico pasaría a _


contener los siguientes valores:

Vector(0) = "maría"
Vector(1) = "natalia"
Vector(2) = "Romina"

End Sub

Nota: una cosa importante es que en el vector anterior no se ha declarado un rango , ya que
la función devuelve un vector cuya cantidad de elementos se ignora, es decir no se
conoce.

Enlaces relacionados a split


Pasar un archivo de texto a un array o matriz usando split

Función Filter :

La función Filter se utiliza para filtrar subcadenas de un vector dependiendo de un


determinado criterio de búsqueda. Los parámetros que lleva la función son los siguientes:
Filter (vector donde buscar, cadena a buscar, valor booleano que indica si incluir o
excluir la cadena)

Ejemplo:

' Vector
Dim Alumnos(1 To 4) As String

' Vector dinámico para almacenar el resultado


Dim Resultado() As String

Alumnos(1) = "Luciano"
Alumnos(2) = "Lucas"
Alumnos(3) = "juan"
Alumnos(4) = "Natalia"

' Ejecutamos Filter

Resultado = Filter(Alumnos, "Lu", True)

' Ahora el vector dinámico "resultado" pasa a contener

MsgBox Resultado(0), vbInformation ' Luciano


MsgBox Resultado(1), vbInformation ' Lucas

5 - Arreglos de controles en visual basic

Hasta acá se vió los aspectos de los vectores y matrices como estructuras que nos permiten
almacenar datos y resolver problemas lógicos en nuestros programas. Ahora veremos los
Arreglos de controles o vectores de controles

Un arreglo de controles es un conjunto de controles, todos de la misma clase (todos


TextBox, todos Label, etc...) que poseen un mismo nombre y cada uno posee un número de
índice que los identifica y los hace únicos con respecto a los demás, y conformando
entonces un vector de controles. por ejemplo en vez de tener 3 Command, llamados
command1, command2 y command3, puedo crear un arreglo de 3 botones. Estos 3 botones
comparten el mismo nombre pero cada botón se distingue del resto por un número de
índice, es decir si por ejemplo nuestro botón de comando se llama cmd pasaría a tener un
cmd(1), un cmd (2) y un cmd(3).

En un arreglo de controles todos los controles deben ser del mismo tipo y además no puede
haber un control dentro del arreglo que tenga el mismo número de índice, ya que sería
imposible identificarlo en el conjunto, además VB no lo permitiría y nos mostraría un error.
Las ventajas principales que tenemos cuando trabajamos con un vector de controles son
las siguientes:

1. Todos los controles que forman el arreglo comparten el mismo procedimiento de


código, con lo cual si tenemos muchos controles que tienen que ejecutar la misma
instrucción no debemos escribir código de más en cada control.
2. Tener 20 cajas de texto, por ejemplo, consumen mucha mas memoria que utilizar un
vector de 20 cajas de texto.
3. Es posible crear controles en tiempo de ejecución, a partir de un arreglo de controles
ya creado.
4. Es mas fácil manipular y establecer las propiedades en un vector de controles
refiriendonos al subíndice de los mismos.

5.1 - Ejemplo para crear un arreglo de controles


Para crear un arreglo de controles podemos hacerlo de 2 maneras.

La primera opción es copiar un control ya dibujado y pegarlo en el formulario. Luego


visual basic nos mostrará un diálogo preguntándonos si queremos crear una matriz de
controles. Al contestar que si, ya se ha creado un arreglo con 2 controles, en este caso el
primer control tendrá el índice 0 y el que pegamos el índice 1. Si queremos seguir
agregando mas controles cuando peguemos nuevamente otro control visual basic no nos
preguntará nuevamente si deseamos crear una matriz del control ya que esta ya está
creada, y por lo tanto agregará un nuevo control y le agregará el número de índice
correspondiente para diferenciarlo del resto, en este caso el 2. Ahora si observas en la
propiedad index de los controles que forman el arreglo verás que estos tienen un número
de índice que antes no tenían al no formar parte de un arreglo de controles

Nota: cualquier control de visual basic que no tenga un arreglo creado, la propiedad index
de los mismos no tendrá ningún número o valor, ya que esta propiedad está reservada para
los controles que formen parte de un vector o arreglo.

La otra opción para crear un arreglo, es ingresar directamente el número de índice en la


propiedad index del control del cual queremos crear un arreglo.

Ejemplo:

El ejemplo consiste en crear 10 Arreglos de TextBox y lo que se va a hacer es mediante un


bucle poner la propiedad Enabled de los controles en False, es decir los vamos a
deshabilitar a todos.

Como te darás cuenta, si tuvieses que hacer esto manualmente, es decir deshabilitar cada
TextBox individualmente tendrías que escribir

text1.enabled = False
y así para cada uno de los controles. en cambio haciendo un arreglo de controles,
recorremos mediante un For todos los controles refiriendonos al índice y estableciéndole la
propiedad Enabled en False para deshabilitarlos.

Create un arreglo de 10 TextBox Para eso coloca un text1 en el formulario. después copialo
y pegalo, vb te va a preguntará si querés hacer un arreglo, decile que si, hasta que tengas 10
o los que quieras.

Si te fijás ahora en la ventana de propiedades, cuando seleccionas un textBox en la


propiedad index te vas a dar cuenta que poseen un número, ese es el índice que los
identifica, y por medio de ese índice nos vamos a referir en el bucle For

El código de este ejemplo bien simple quedaría así:

Dim i As Integer

For i = 0 To 9

text1(i).Enabled = False

Next

Como podés ver, le pasamos en el parámetro índice el valor de la variable i para referirnos
a ese text1 en particular y asignarle la propiedad Enabled en False

5.2 - Pasar un arreglo de controles como parámetro


Una tarea habitual es la de poder pasar un arreglo o vector de controles como parámetro a
una Sub o function.

Por ejemplo supongamos que tenemos un programa que tiene muchos formularios. y varios
de esos formularios tienen una función que se encarga de limpiar todas los textBox y
eliminar el contenido de los mismos

Para solucionar esto, y no tener que repetir código, podríamos crear en un módulo de
código, una SubRutina para que la puedan utilizar y acceder desde todos los formularios.

Para poder pasar un vector como parámetro a una rutina, la variable o argumento en la
Subrutina, debe estar declarada como de tipo Object

Ejemplo

Colocar en un formulario un arreglo de textBox, por ejemplo TextBox1(0), TextBox1(1) y


TextBox1(2)
Colocar un CommandButton para limpiar el contenido de las cajas de texto

Código fuente en el formulario

Option Explicit

Private Sub Command1_Click()


Call Limpiar_TextBox(Text1)
End Sub

' Recibe el vector como parámetro


Sub Limpiar_TextBox(El_TextBox As Object)

Dim i As Integer

For i = 0 To El_TextBox.Count - 1
El_TextBox(i).Text = vbNullString
Next

End Sub

Manejo de Archivos en visual basic

1 -introducción

En esta sección se ve un repaso básico de las tres formas de trabajar con diferentes tipos de
archivos en visual basic: Archivos secuenciales, archivos aleatorios y archivos binarios.

Por último en el final de la sección, se describe como utilizar sentencias y funciones propias
de visual basic para trabajar con archivos y directorios del sistema operativo, como por
ejemplo la sentencia Dir para buscar ficheros, Filecopy para copiar , ChDir, Mkdir para
crear carpetas y algunas otras funciones relacionadas.

2 - Sentencia Open
Esta sentencia es la encargada de abrir o crear un archivo, ya sea para leer datos del mismo,
sobre escribirlos y/o para agregarle datos.

Esta sentencia tiene una serie de parámetros que varían de acuerdo a lo que queramos
hacer.

Por ejemplo :
Open "c:\prueba.txt" For Input As #1

Este ejemplo abre un archivo para poder acceder a los datos que contenga en su interior.
cuando decimos abrir, estamos diciendo que se encuentra actualmente abierto y alojado en
la memoria ram para poder manipularlo.

En el primer parámetro indicamos el path del archivo en el que queremos trabajar.

Luego la palabra "As #1" indica el número de archivo que estamos utilizando. Este número
lo asignamos nosotros y va desde el rango 1 al 511. El "número de archivo" se utiliza para
poder diferenciar al archivo en el código. Cada archivo que se encuentra abierto no se
puede asignar un número de archivo igual, ya que nos daría un error en tiempo de
ejecución.

Por ejemplo no podríamos hacer esto:

Open "archivo1.txt" For Input As #1


Open "otroarchivo1.txt" For Input As #1

Una vez que terminamos de trabajar con un archivo que se encuentra abierto y que no lo
vamos a utilizar mas, debemos cerrarlo. para ello se utiliza la sentencia Close seguido del
número de archivo que lo identifica.

Por ejemplo:

Close #2

Esto cerrará al archivo abierto que anteriormente le asignamos el número de archivo 2.


También si tengo 3 archivos abiertos podría hacer lo siguiente:

Close #1, #2, #3

Si utilizamos la sentencia Close sin ningún parámetro, o mejor dicho ningún número de
archivo, se cerrarán todos los archivos cargados en memoria por nuestra aplicación (los que
nosotros abrimos con Open).

Por lo general, si trabajamos con varios archivos abiertos simultáneamente, es aconsejable


utilizar la sentencia Close sin ningún parámetro, de este modo cuando termine de ejecutarse
el procedimiento se cerrarán todos los archivos abiertos.
Hay una función en Visual basic llamada FreeFile. Esta función lo que hace es darnos un
número de archivo que esté libre y que se pueda usar, para que de este modo no intentamos
abrir uno esté siendo utilizado, y evitar un error en tiempo de ejecución. Para usar la
función es muy fácil, por ejemplo:

Dim NumeroArchivo As Integer

NumeroArchivo = FreeFile

Open "La ruta de un archivo" For Input As #NumeroArchivo

3 - Archivos secuenciales

Los archivos secuenciales se denominan de esta manera por que la forma de escribir y leer
los datos en un archivo es, desde el principio hasta el fin del archivo, es decir, si yo quisiera
acceder a un determinado dato del archivo y este dato se encuentra en la mitad del archivo,
para llegar a ese dato necesito pasar por todos los demás datos, de forma secuencial.

Por lo general se suelen utilizar los archivos secuenciales, para trabajar con archivos que
contengan una estructura de datos no muy compleja. por que por ejemplo, si utilizáramos
un archivo para almacenar 50000 nombres con sus respectivos datos (apellido, teléfono,
dirección etc...) , este mecanismo resultaría ineficiente, ya que si quisiera recuperar por
ejemplo el registro n° 3650, para leer este dato tendría que pasar previamente por los 3649
registros anteriores a este, haciendo mas lento el acceso y por lo tanto desperdiciando
recursos del sistema.

4 - Diferentes tipos de acceso

Append: esta sentencia se utiliza para agregar información a un archivo de texto.

Ejemplo :

Open "c:\miarchivo.txt" For Append As #1

Si el archivo ya contiene datos, se le agregarán al mismo al final del archivo, si no contenía


datos los agrega igual. Si el archivo no existe, lo crea y le agrega los datos.
Input: la sentencia Input se utiliza para leer datos de un archivo de texto, ejemplo:

Open "c:\miarchivo.txt" For Input As #2

Este ejemplo abre un archivo para leer los datos del mismo. En las próximas líneas veremos
ejemplos de como leer los datos , escribir y guardar.

Una cosa importante con respecto a leer datos de un archivo con Input es que, si el archivo
que queremos abrir, no existe, se producirá un error en tiempo de ejecución al intentar abrir
un archivo que no existe, por eso debemos verificar la ruta del mismo siempre que esté bien
escrita en la sentencia Open y evitarnos dolores de cabeza, y simpre añadir algún
manejador de error para este caso

Output: esta sentencia se utiliaza para crear un archivo de texto y grabar datos. Esta es
igual que Append salvo por un gran detalle:

Output crea el archivo y le agrega información, pero si el archivo existía y contenía


información previa, sobre escribe todos los datos del archivo por los datos nuevos,
perdiendo los anteriores datos.

Si accedemos con Output a un archivo que no existe, no se produce un error, si no que se


crea dicho archivo.

Conclusión : si vamos a añadir datos a un archivo existente (para actualizarlo por ejemplo)
hay que utilizar la sentencia Append. si vamos a crear un archivo vacío y nuevo para
grabar nuevos datos, hay que utilizar la sentencia Output. si vamos a abrir un archivo para
leer datos utilizamos la sentencia Input.

5 - Leer datos de un archivo utilizando Line Input

C omo se comentó antes , para leer datos de un archivo se utiliza la sentencia Input.
pero para leer los datos del archivo y poder utilizarlos en nuestro programa se utilizan 2
sentencias o instrucciones: Line Input e Input.

Ejemplo:

Dim mivariable As String

Open "c:\nombres.txt" For Input As #1

While Not EOF(1)

Line Input #1, mivariable


Wend

Close #1

En el ejemplo anterior aparece una función nueva llamada EOF. Esta función significa End
Of File o fin de archivo.

Cuando abrimos un archivo para leer información con Input, debemos saber en que
momento llegamos al final del archivo, por que de lo contrario la sentencia Line Input o
Input seguiría leyendo líneas donde no existen datos después del fin del archivo, y por lo
tanto se produciría un error en tiempo de ejecución por querer leer un dato que no
existe.

Mediante la condición Not Eof(1) leeremos los datos hasta que llegue al final del archivo, y
en cada pasada del bucle While se almacenará en la variable mivariable, línea por línea los
datos del mismo. Es evidente que como está planteado el ejemplo habría que manipular los
datos leídos y agregar otras instrucciones, por que en este ejemplo la variable mivariable
solo almacenaría los datos de la línea que está leyendo y borrando los datos de las líneas
que almacenó anteriormente. Mas adelante veremos como solucionar esto.

conclusión : para leer datos de un archivo se utiliza la sentencia Line Input y luego de la
coma debemos poner una variable nuestra para almacenar los datos que se van leyendo de
la línea actual

Line Input #1, nuestravariable

6 - Ejemplo para leer un archivo de texto utilizando Line


Input

Lo siguiente, lee un archivo de texto línea por línea, y carga el contenido en un control
ListBox. colocar un control List1, un Command1 y un Text1 para indicar el path del
archivo a leer:
Option Explicit

Private Sub Command1_Click()


On Error GoTo errSub

Dim n_File As Integer


Dim Linea As String

'Elimina el contenido del listbox


List1.Clear

'Número de archivo libre


n_File = FreeFile

'Abre el archivo para leer los datos


Open text1.Text For Input As n_File

'Recorre linea a linea el mismo y añade las lineas al control List


Do While Not EOF(n_File)

'Lee la linea
Line Input #n_File, Linea
List1.AddItem Linea
Loop

Exit Sub
errSub:
'error
MsgBox "Número de error: " & Err.Number & vbNewLine & _
"Descripción del error: " & Err.Description, vbCritical
End Sub

Private Sub Form_Load()

Command1.Caption = " Cargar en Listbox "

End Sub
Este otro ejemplo, lo que hace es leer un archivo de texto para contar las líneas del mismo

Colocar un command1 en el formulario y pegar el siguiente código fuente

Public Function Contar_Lineas(ByVal strTextFile As String) As Long

Dim F As Integer
Dim Lineas As Long
Dim str_Linea As String

' Número de archivo libre


F = FreeFile

' Abre el archivo de texto


Open strTextFile For Input As #F

'Recorre todo el archivo de texto _


linea por linea hasta el final
Do
'Lee una línea
Line Input #F, str_Linea

' Incrementa la cantidad de lineas leidas


Lineas = Lineas + 1

' Leerá hasta que llegue al fin de archivo


Loop While Not EOF(F)

' Cierra el archivo de texto abierto


Close #F

' Retorna a la función el número de lineas del fichero


Contar_Lineas = Lineas

End Function

Private Sub Command1_Click()

Dim Path As String

Path = InputBox(" Ingrese la ruta de un archivo de texto ", _


" Contar líneas ")

If Path = vbNullString Then Exit Sub

MsgBox " Cantidad de lineas: " & Contar_Lineas(Path)

End Sub

7 - Leer el contenido de un archivo de texto con la


función Input
La función input, a diferencia de Line Input que Lee por línea, Input lee todo el contenido
del archivo de una sola ves, es decir no necesitamos, como en el ejemplo anterior, utilizar
un bucle.

El modo de usarlo es el siguiente:

Primero se abre el archivo con Open, por ejemplo:

Open Path_Archivo For Input As #1

Luego se asigna a una variable, el contenido que devolverá la función Input:

Contenido = Input(LOF(1), #1)

Un ejemplo:

Lo siguiente lee el contenido de un archivo txt y lo carga en un textBox multilínea

Colocar un TextBox llamado txt_Path ( para especificar la ruta del archivo ).

El Textbox que mostrará los datos del fichero, colocarle el nombre txt_Contenido

Código en un botón:

On Error GoTo Err_Sub

Dim n_File As Integer


Dim Contenido As String

'Número de archivo libre


n_File = FreeFile

'Abre el archivo indicado


Open txt_Path For Input As n_File

'Lee todo los datos del archivo y lo almacena en la variable


Contenido = Input$(LOF(n_File), #n_File)

'Cierra el archivo abierto


Close n_File

'Carga el contenido de la variable en el TextBox


txt_Contenido = Contenido

Exit Sub

Err_Sub:

MsgBox Err.Description, vbCritical


8 - Escribir datos en archivos de texto

Para escribir datos en archivos de texto se utiliza la sentencia Print y Write.

Ejemplo:

Dim nombre As String


Dim edad As Integer
Dim telefono As String

Open "c:\miarchivo.txt" For Append As #1

Print #1, "esta es una línea"

Print #1, "esta es otra línea"

Print #1, nombre, edad, teléfono

Close #1

En este ejemplo agregamos datos a un archivo existente llamado miArchivo.txt con la


sentencia Print.

Primero abrimos el archivo con Open. luego la sentencia Print lleva 2 parámetros. el
primero indica el archivo que estamos manipulando (el archivo n°1, dentro del código), el
segundo parámetro indica los datos que se agregarán en el mismo. En el segundo parámetro
podemos poner un dato directamente (una cadena, número, etc...),, por último cerramos el
archivo.

Escribir datos con la sentencia Write

A diferencia de Print, la sentencia Write escribe datos en un archivo separados por comas.

Ejemplo:

Dim nombre As String


Dim apellido As String
apellido = "Peres"

nombre = "Carlos"

Open App.Path & "\Archivo.txt" For Output As #1

Write #1, nombre, apellido

Close #1

Como podemos ver la sentencia Write escribe los datos en el archivo separados por coma.
En la primera línea escribirá el contenido de las variables nombre y apellido . También se
pueden pasar los datos directamente a Write sin usar variables, por ejemplo:

Write #1, "Un dato", "Otro dato", "Otro mas"

Nota importante: cuando escribimos datos con la sentencia Print se utiliza la sentencia
Line Input para leer los datos del archivo. En cambio cuando escribimos datos separados
por comas con la sentencia Write debemos utilizar la sencia Input

Para que esta página no sea tan extensa, he armado 10 ejercicios que utilizan todo lo visto
hasta aquí, o sea el tema relacionado a los archivos secuenciales. Dentro del código se
encuentra detallado cada paso y lo podés descargar al final de esta página.

9 - Archivos aleatorios o directos


A diferencia de los archivos secuenciales, los archivos aleatorios almacenan datos en
forma de registros. Como habíamos dicho en el capítulo anterior para leer datos de un
archivo secuencial había que leer todo el archivo, es decir que no podíamos leer por
ejemplo los datos que estuviesen en la línea 35 del mismo sin antes pasar por todos los
datos anteriores, por eso su nombre de archivo secuencial.

En cambio los archivos aleatorios, también llamados archivos directos, almacenan los datos
con una estructura diferente. Los datos se guardan en registros mediante una estructura
definida de tipo Type (estructura definida por nosotros) también llamada UDT

Por ejemplo si tuviesemos 25 registros, cada uno con datos (apellido, email, telefono,etc..),
y quisiera acceder al registro 17, puedo leer los datos del registro 17 sin tener que leer los
16 registros anteriores, ganando con ello mas velocidad y teniendo una estructura de datos
definida.
Para abrir un archivo aleatorio para trabajar con él, se utiliza la sentencia Open con
algunos cambios en lo que se refiere a los archivos secuenciales

Ejemplo:

open "elarchivo.dat" for random as #1 len = len(mivariable)

Como podemos ver para abrir un archivo de acceso aleatorio se utiliza la palabra Random
(aleatorio). Luego debemos indicar el número de archivo para identificarlo, y por último
una opción nueva : Len.

cada registro en el archivo, que es una estructura de datos Type, tiene que tener una
longitud fija. Mediante la función Len de visual Basic debemos indicar el tamaño de la
estructura de datos que vamos a utilizar. para que quede mas claro un ejemplo:

Primero definimos una estructura de datos:

Private Type t_clientes

nombre As String * 20
apellido As String * 15
dirección As String * 30
edad As Integer

End Type

Después creamos una variable llamada clientes de tipo t_clientes

Dim clientes As t_clientes

ahora abrimos nuestro archivo, y en el parámetro de la función Len le pasamos la variable


para que visual basic calcule el tamaño de la estructura t_clientes
Open "datos.dat" For Random As #1 Len = Len(clientes)

La estructura de datos debe tener un tamaño fijo, no datos variables como en el caso de los
archivos secuenciales, de ahí que se indicara en el Type en las variables mediante el
asterisco en el caso de los String.

En cada campo de la estructura de datos debemos indicar el tamaño de la variable. En el


caso del campo nombre de tipo string le hemos asignado una longitud fija de 20 bytes, en el
apellido 15 y en la dirección 30 bytes. La variable o el campo edad que es de tipo integer,
no debemos indicar el tamaño de la variable, ya que sabemos que un número integer ocupa
2 bytes.

En total esta estructura t_clientes tiene una longitud de 67 bytes (30 + 20 + 15 + 2 ).

Si no indicáramos en la sentencia Open el tamaño de la estructura, visual basic, por defecto


asumiría la estructura de un tamaño de 128 bytes, y si nuestra estructura tendría mayor
tamaño ocurriría un error en tiempo de ejecución, por lo cual siempre debemos utilizar la
función len para calcular el tamaño de la misma.

10 - Grabar datos en archivos aleatorios


Para grabar datos en un archivo de acceso aleatorio se utiliza la sentencia Put.

Un ejemplo paso a paso:

primero declaramos una estructura de datos que contendrá la información de cada registro:

Private Type t_empleados


nombre As String * 15
apellido As String * 15
dirección As String * 30
edad As Integer
End Type

Luego creamos una variable que sea de tipo t_empleados.

Dim empleados As t_empleados

Ahora abrimos el archivo e indicamos en la función Len el tamaño de la estructura

Open "datos.dat" For Random As #1 Len = Len(clientes)


Ahora le asignamos un valor a cada campo de la estructura de esta forma:

empleados.nombre = "Carlos"
empleados.apellido = "Martinez"
empleados.dirección = "Avenida 9 de julio n° 2054"
empleados.edad = 45

Ahora grabamos en el registro n°1 del archivo los datos de esta forma:

Put #1, 1, empleados

Si queremos grabar mas datos, por ejemplo en el registro n° 2 del archivo hacemos lo
siguiente:

empleados.nombre = "María"
empleados.apellido = "Gonzales"
empleados.dirección = "Avenida 13 n° 1100"
empleados.edad = 35

Put #1, 2, empleados

Close #1

como vemos ver la sentencia Put lleva 3 parámetros. El primero indica el numero de
archivo abierto en el cual estamos trabajando. en el segundo debemos indicar el número de
registro en el que se grabarán los datos. Si no ponemos el número de registro, los datos se
grabarán en el último registro. Por último en el tercer parámetro le pasamos la variable
asociada con la estructura de datos.

11 - Leer datos en archivos aleatorios

Para leer los registros o datos de un archivo aleatorio se utiliza la sentencia Get. Esta
sentencia es exactamente igual que Put, pero la diferencia es que en vez de grabar los datos
los recupera para poder utilizarlos luego en el programa.

12 - Posicionarse en un registro determinado


Supongamos que tenemos un archivo aleatorio que contiene 452 registros. Ahora queremos
recuperar los datos del registro 258. Para posicionarse en un determinado registro hay una
sentencia , hay una sentencia llamada Seek. Ejemplo:

Seek #1, 258


Get #1, , mivariable

si queremos posicionarnos en un registro determinado, pero en vez de leer, queremos


grabar datos, hacemos la misma operación pero con la sentencia Put:

Seek #1, 258


Put #1, , mivariable

13 - Funciones propias de vb para el manejo de ficheros y


directorios
Visual basic posee varias funciones para manejar archivos y directorios de nuestro sistema.
Las principales son.

14 - Función Dir

La función Dir se utiliza o para buscar archivos y devuelve una cadena que representa el
nombre de un archivo o directorio de acuerdo a un determinado patrón de búsqueda. La
sintaxis de la función es:

Dir (ruta, atributos)

En el parámetro ruta debemos indicar el path de un archivo, directorio o unidad. Si el path


no existe, la función Dir devuelve una cadena vacía.

En el parámetro atributos podemos especificar los siguientes:


• vbnormal : cualquier atributo de archivo.
• vbreadonly : archivos de solo lectura.
• vbhidden: archivos ocultos
• vbsystem : archivos de sistema
• vbvolume : etiqueta de volumen de una unidad
• vbdirectory : directorios

Ejemplo:

Si el archivo existe Dir devuelve "autoexec.bat"

Archivoabuscar = Dir("c:\autoexec.bat")

También podemos utilizar los comodines * y ? para filtrar búsquedas.

En este ejemplo devuelve el primer archivo exe que encuentra, si es que existe.

Archivoabuscar = Dir("c:\windows\*.exe")

En este ejemplo la función Dir devuelve directorios además de archivos

Archivoabuscar = Dir("c:\, vbdirectory")

El único inconveniente de esta función es que siempre devuelve el primer archivo que
encuentra. Para que continúe buscando los demás archivos debemos poner la función sin
parámetros. Ejemplo

Dim archivo As String

archivo = Dir("c:\*.exe")

While archivo <> ""


archivo = Dir
Wend

En el ejemplo anterior buscará todos los archivos exe en el directorio c:\. cuando ya no
encuentre mas devolverá una cadena vacía y saldrá del bucle While.

Este otro ejemplo verifica si un archivo existe:


Private Function Verificar_Existe(path) As Boolean

If Len(Trim$(Dir$(path))) Then
Verificar_Existe = True
Else
Verificar_Existe = False
End If

MsgBox Verificar_Existe

End Function

Private Sub Form_Load()

Call Verificar_Existe("c:\autoexec.bat")

End Sub

El siguiente enlace muestra un ejemplo de como utilizar la función Dir para buscar archivos
y también ordenarlos enforma alfabética y luego agregar la lista en un control Listbox

Este otro enlace muestra como buscar ficheros mediante el Api de windows

15 - Función FileCopy

FileCopy nos permite copiar archivos. Esta función es muy fácil de usar. ejemplo:

FileCopy "origen", "destino"

Nota: si el archivo existe la función lo sobre escribe.

16 - Función MkDir

Esta función se utiliza para crear directorios, pero crea un directorio por vez, es decir que
no crea varios niveles al mismo tiempo. La sintaxis es:

MkDir "Ruta directorio"

para poder crear un Directorio que contiene varios subdirectorios, podemos hacer lo
siguiente:
El ejemplo despliega un InputBox para ingresar el path a crear:

Private Sub Command1_Click()

Dim i As Integer
Dim Array_Dir As Variant
Dim Sub_Dir As String
Dim El_Path As String

El_Path = InputBox("Escriba la ruta del directorio a crear" & _


"con los subdirectorios", " Crear varios niveles de
directorios")

If El_Path = vbNullString Then Exit Sub

'Desglosa el path
Array_Dir = Split(El_Path, "\")

El_Path = vbNullString

'Recorre el array anterior para ir creando uno por uno


For i = LBound(Array_Dir) To UBound(Array_Dir)

Sub_Dir = Array_Dir(i)

If Len(Sub_Dir) > 0 Then


El_Path = El_Path & Sub_Dir & "\"

If Right$(Sub_Dir, 1) <> ":" Then


' Verificamos que no exista
If Dir$(El_Path, vbDirectory) = vbNullString Then
'Crea la carpeta
Call MkDir(El_Path)
End If
End If
End If
Next i

End Sub

17 - Función kill
La función kill se utiliza para eliminar archivos. También es muy fácil de utilizar, y el
único parámetro que lleva es la ruta del archivo que queremos eliminar. Si queremos
eliminar varios archivos de un directorio podemos utilizar el comodín"*", y si queremos
excluir ciertos archivos utilizamos el comodín "?".

kill "c:\*.txt"

18 - Función FileLen

E sta función nos devuelve el tamaño en bytes de un archivo.

Ejemplo:

Dim tamaño As Long

tamaño = FileLen("c:\windows\system32\control.exe")

MsgBox tamaño & " bytes"

FileLen es muy útil para trabajar con archivos aleatorios, ya que si queremos conocer la
cantidad de registros que tiene el archivo, debemos dividir el tamaño del archivo por el
tamaño de la estructura.

Ejemplo:

Private Type t_personas

nombre As String * 20
apellido As String * 20

End Type

Dim cant_reg As Long

Private Sub Form_Load()

cant_reg = FileLen("c:\miarchivo.dat") / Len(t_personas)

End Sub
19 - Función Name

Name se utiliza para renombrar archivos y directorios. Esta función no se puede utilizar
para renombrar archivos abiertos.

Ejemplo:

Name "path del archivo viejo a renombrar" as "path y nombre nuevo del archivo"

También con esta sentencia podemos mover archivos y directorios a otra ubicación. para
ello debemos cambiar en el segundo parámetro la ruta del archivo.

20 - Función GetAttr y SetAttr

La función Getattr permite recuperar información sobre los atributos de un archivo o


directorio. Ejemplo:

GetAttr "ruta del archivo"

los valores devueltos por la función pueden ser los siguientes:

• 0 - normal
• 1 - solo lectura
• 2 - oculto
• 4 - archivo de sistema
• 16 - directorio
• 32 - archivo modificado

El siguiente ejemplo lo que hace es mostrar en un MsgBox los atributos de un archivo.


Colocar un TextBox llamado Text1 y un Command1.
Código en el formulario:

Option Explicit

Private Sub Command1_Click()


Dim ret As Long
Dim Atributos As String
ret = GetAttr(Text1.Text)

If ret And vbNormal Then


Atributos = " Normal = Si" & vbNewLine
Else
Atributos = " Normal = No" & vbNewLine
End If
If ret And vbReadOnly Then
Atributos = Atributos & " Solo Lectura = Si" & vbNewLine
Else
Atributos = Atributos & " Solo Lectura = No" & vbNewLine
End If
If ret And vbHidden Then
Atributos = Atributos & " Oculto = Si" & vbNewLine
Else
Atributos = Atributos & " Oculto = No" & vbNewLine
End If
If ret And vbSystem Then
Atributos = Atributos & " Sitema = Si" & vbNewLine
Else
Atributos = Atributos & " Sitema = No" & vbNewLine
End If
If ret And vbDirectory Then
Atributos = Atributos & " Directorio = Si" & vbNewLine
Else
Atributos = Atributos & " Directorio = No" & vbNewLine
End If

'Muestra los atributos del archivo elegido


MsgBox Atributos, vbInformation, " Atributos "

End Sub
La función SetAttr lo que hace es establecer los atributos de un archivo .

Ejemplo:

SetAttr "ruta del archivo", valores de los atributos

21 - Función RmDir

RmDir elimina directorios o carpetas. Pero antes de eliminar directorios tenemos que estar
seguros que la carpeta no contiene archivos, de lo contrario nos dará un error en tiempo de
ejecución. Si el directorio contiene archivos debemos eliminarlos previamente con la
sentencia kill.

Ejemplo:

RmDir "path del directorio a remover"

8 - Los Objetos de Visual basic y los menús

1 - Introducción
Estos objetos que tienen sus propiedades y métodos definidos como cualquier otro objeto,
son fundamentales para utilizarlos en tiempo de ejecución, y nos permiten obtener
información y realizar tareas específicas y variadas como por ejemplo:

Trabajar con la pantalla (objeto Screen), obtener datos referentes a nuestra aplicación
( objeto App), el objeto Clipboard ( para trabajar con el portapapeles de windows) y
algunos otros

2 - El objeto App
El objeto App posee una serie de propiedades para obtener información de nuestra
aplicación

Propiedad Path

Esta propiedad nos devuelve una cadena con la ruta donde se encuentra el ejecutable de
nuestro programa. Esta propiedad es de suma importancia, ya que nosotros siempre
debemos "programar las rutas" de nuestra aplicación de forma relativa, es decir en donde
realmente se encuentre nuestra aplicación, ya que el usuario puede instalar nuestro
programa en un directorio cualquiera y de este modo si nosotros hemos puesto, por ejemplo
de un archivo externo en una ruta absoluta (por ejemplo "c:\Archivos de programa", puede
darse el caso de que la aplicación no encuentre dicho archivo ya que se ha instalado en otro
directorio, ejecutarse en otra plataforma, etc..

Para resolver estos problemas sobre las referencias a las rutas de archivos, podemos utilizar
el objeto App.path, y lo que hace esta propiedad es devolvernos el path de nuestra
aplicación.

Ejemplo

ruta = App.Path & "\config.dat"

En el ejemplo anterior, si nuestra aplicación contiene un archivo de configuración del


programa, un gráfico o cualquier otro fichero, para poder localizarlo lo hacemos mediante
el objeto App.path mas el archivo que deseamos e interponiéndole la barra invertida.

Nota: lo que hay que tener en cuenta para que no se produzca un error en tiempo de
ejecución, es que el objeto App.path nos devuelve solo el nombre de directorio de nuestra
aplicación pero sin la barra invertida al final, es decir que si deseamos por ejemplo hacer
referencia a un archivo de nuestra aplicación para trabajar con él, debemos agregarlo
nosotros.

Otro ejemplo podría ser el siguiente, supongamos que tenemos un programa que carga una
imagen en un formulario. Si nosotros hacemos una referencia al archivo de imagen
mediante una ruta absoluta estaremos cometiendo un error, lo correcto sería

Dim Ruta As String

Ruta = App.Path & "\imagen.gif"

Me.Picture = LoadPicture(Ruta)
Propiedad PrevInstance del objeto App

Esta propiedad se utiliza para comprobar si nuestro programa ya está cargado en memoria
devolviéndonos un valor de tipo boolean, True en caso correcto o False si no está abierto o
cargado en memoria.

La propiedad PervInstance es importante ya que un usuario, por error, puede abrir mas de
una instancia de la aplicación, algo que no tendría mucho sentido en la mayoría de los
casos.

De este modo si se intenta abrir el programa mas de una vez, podemos mostrar un mensaje
informativo y descargar la aplicación mediante la sentencia End, o no mostrar nada y
terminar la ejecución. Este ejemplo muestra un mensaje cuando se intenta abrir mas de una
ves, y luego de aceptar el mensaje se cierra con End

Private Sub Form_Initialize()

If App.PrevInstance = True Then

MsgBox " La aplicación ya se encuentra cargada en memoria",


vbInformation

' Finaliza el programa


End

End If

End Sub

Otras propiedades del objeto App

• ExeName: Con ExeName podemos recuperar el nombre del ejecutable de la


aplicación en tiempo de ejecución
• Hinstance: Esta propiedad nos retorna el handle o manipulador de nuestra
aplicación. Mediante esta propiedad y algunas Apis relacionadas con este tema
podemos controlar nuestra algunas cosas
• Taskvisible: es una propiedad de tipo boolean que se utiliza para determinar si
nuestra aplicación aparecerá en la lista de tareas. Esta propiedad solo funciona si
nuestra aplicación tiene la propiedad visible en false
3 - Objeto Screen
Con el objeto Screen se puede determinar y obtener información sobre las fuentes
instaladas en el sistema operativo, la resolución actual de la pantalla, el formulario y/o
control que está activo,

Un ejemplo para poder obtener la resolución del monitor:

Dim Ancho As Integer


Dim Alto As Integer

Ancho = (Screen.Width / Screen.TwipsPerPixelX)


Alto = (Screen.Height / Screen.TwipsPerPixelY)

MsgBox "La resolución en Pixeles del monitor es de: " & vbNewLine & _
"Ancho: " & Ancho & vbNewLine & _
"Alto: " & Alto, vbInformation

Para obtener el alto y el ancho en pixeles debemos hacer una simple conversión ya que
mediante las propiedades width y height obtenemos el ancho y el alto del monitor pero
expresado en twips, para obtener ese valor en pixeles hay que dividirlo por la propiedad
TwipsPerPixelX y TwipsPerPixelY, que son propiedades que las podemos acceder desde el
objeto Screen

Ejemplo para poder obtener una lista de las fuentes


instaladas en el sistema

El objeto screen posee un objeto o colección llamado Fonts que es un vector que contiene
las fuentes del sistema y una propiedad llamada FontCount para saber la cantidad de
fuentes.

Ejemplo para cargar las fuentes del sistema en un control ListBox

Dim La_Fuente As Integer

'Recorre las fuentes


For La_Fuente = 0 To Screen.FontCount - 1

'Añade el nombre de la fuente al control


List1.AddItem Screen.Fonts(La_Fuente)

Next La_Fuente

Mediante 4 líneas de código tenemos un control ListBox que muestra el nombre de todas
las fuentes del sistema.

Nota: Para poder obntener las fuentes pero de una impersora, se realiza igual que en el paso
anterior , con la diferencia que en ves de usar el Objeto Screen, se usa el Objeto Printer.

Por ejemplo

Colocar un ComboBox en el formulario donde se listarán las impresoras instaladas, y en


agregar un Control ListBox donde agregarán las fuentes

Código fuente en el formulario

Option Explicit
Private Sub Combo1_Click()
Ver_fuentes Combo1.ListIndex
End Sub

Private Sub Form_Load()

Dim ObjPrinter As Printer

' Recorre la lista de impresoras instaladas _


en el sistema y agrega el nombre en el combo
For Each ObjPrinter In Printers
Combo1.AddItem ObjPrinter.DeviceName
Next

End Sub

' Enumera las fuentes en el ListBox de la _


impresora seleccionada en el Combo
Sub Ver_fuentes(Impresora As String)

' Referencia a la impersora


Set Printer = Printers(Impresora)

Dim i As Integer
List1.Clear

' Lista las fuentes soportadas de la impresora


For i = 0 To Printer.FontCount - 1
List1.AddItem Printer.Fonts(i)
Next

End Sub

Enlaces relacionados
Listar las fuentes de windows y previsualizarlas

4 - El objeto ClipBoard
Con ClipBoard podemos trabajar con el portapapeles de windows, ya sea para establecer o
recuperar datos del mismo.

Ejemplo:

Para recuperar el texto guardado en el portapapeles:

Dim cadena As String

cadena = Clipboard.GetText

MsgBox cadena

Con este otro ejemplo podemos grabar o asignar un texto en el portapapeles


Clipboard.SetText "cadena de texto a grabar o variable string"

Con el método Clear del objeto ClipBoard podemos borrar el contenido del portapapeles
(no requiere ningún parámetro)

Clipboard.clear

Con la siguiente línea podemos copiar una imagen del portapapeles a un control picture, si
es que la hay, usando el método Getdata del objeto Clipboard

Picture1.Picture = Clipboard.GetData

Lo siguiente copia una imagen cargada en un control de imagen al portapapeles, es decir


hacer lo contrario:

Clipboard.SetData Picture1.Picture

5 - Menues en visual basic

Ejemplo para crear menúes y menúes contextuales o también llamados menú PopUp, que
son aquellos que se despliegan con el botón derecho del mouse.

Casi todas las aplicaciones por mas pequeñas que sean, poseen un acceso a determinadas o
casi todas las opciones de un programa por medio de un menú.

Si bien las opciones las podemos encontrar en la interface misma de la aplicación, ya sea
por medio de botones, barras de herramientas etc.., nunca está demás que estén a mano por
medio de un menú.

Visual Basic incorpora una herramienta llamada editor de menúes para poder crearlos
Nota: El editor de Manúes se encuentra en el menú herramientas y solo está disponible
desde la vista diseño del formulario, es decir que si estás visualizando la ventana de código
o un módulo de código deberás cerrarlas y dejar visible el formulario que estés diseñando
para que la opción esté habilitada.

6 - Los menues de cabecera y submenues

Los menúes de cabecera son los menúes principales que contienen otros submenues. Por
ejemplo en el menú del internet explorer, el menú archivo es el menú de cabecera o de
primer nivel, y las opciones internas de este (abrir, guardar, imprimir, cerrar, etc...) son los
submenues que están en un nivel por debajo del menú archivo.

Crear un menú

1. El primer paso es diseñar un buen diagrama que incluya la mayoría de las opciones,
para que el usuario las pueda tener a mano también en el menú.
2. Si observas otras aplicaciones, estas respetan el orden y ubicación de sus menues, es
decir que si estás creando un programa que tiene opciones para imprimir una hoja,
esta se encontrarán en la sección del menú archivo, si tienes opciones de edición del
documento como cortar copiar, pegar , seleccionar todo, etc..., las encontrarás en el
menú "edición", si deseas crear un formulario "acerca de..", lo ubicarás en el menú
ayuda con el "nombre acerca de...". esta forma de diseño y diagramación es
fundamental para que el programa sea estándar y aceptado por todos, por llamarlo
de alguna manera, ya que si bien nosotros recordamos el nombre y donde se
encuentra ubicada cada opción, un usuario o tercero debe resultarle lo mas sencillo
posible el acceso a las opciones del mismo.

7 - Agregar elementos en un menú

El siguiente ejemplo consiste en un formulario que contiene solo un control label que nos
mostrará una leyenda con el texto del menú que seleccionamos o presionamos.

El menú estará compuesto por 3 menues de cabecera, el primero llamado "Archivo", el


segundo "Edición" y el último "Ayuda". A su vez cada menú tendrá los siguientes
submenues:

1. Archivo : Este menú contendrá los submenues " Abrir ", " Guardar ", " Imprimir " y
" Cerrar "
2. Edición: Contendrá los submenues " Cortar ", " Copiar ", " Pegar ", " Seleccionar
todo "
3. Ayuda : Tendrá los submenues " Ayuda " y " Acerca de.. "

El cuadro de diálogo del editor de menú de visual basic posee los siguientes campos para
rellenar. Algunos son opcionales y otros son obligatorios, como la propiedad Caption y
Name:

• Caption: en este campo debemos colocar la leyenda que mostrará el menú, es decir
el texto que mostrará el mismo.
• Name: en este campo debemos introducir un nombre para cada menú. Este es
obligatorio y no puede estar duplicado ya que por medio de este nombre
identificaremos al menú en el código.
• Index: en este campo que es opcional podemos introducir un número para formar
vectores de menues o arreglos de menues, en este ejemplo no se usa, por ejemplo
para crear menues en forma dinámica en tiempo de ejecución
• helpcontextid: este campo opcional podemos introducir un n° para el tópico de
ayuda, por si el usuario presiona la tecla F1 justo cuando está posicionado en el
menú.
• Shortcut: Podemos ingresar una tecla de acceso rápido al menú para que se
despliegue el mismo automáticamente, como por ejemplo Ctrl + a, Ctrl + b, etc...
• Checked: este campo indica si el menú tendrá un tilde a la izquierda o no. Si está en
true lo muestra si está en False no. El campo es de tipo opcional.
• Enabled : propiedad booleana que determina si el menú está habilitado o no. Esta
propiedad es exactamente igual a la propiedad Enabled de cualquier control de
visual basic. El campo por defecto, mejor dicho la propiedad está en True
• Visible : propiedad opcional y de tipo booleana que determina si el menú estará
visible o no. Esta propiedad es ideal para crear los menues contextuales o PopUp
(mas adelante hay un ejemplo de como crear uno).

Pasos a seguir:

1. Una vez abierto el editor de menú, hay que ingreasar los elementos que componen
el mismo. Para crear el menú "Archivo" que es un menú de cabecera o de nivel
superior, debemos ingresar en la propiedad Caption la cadena &Archivo.
Ahora le asignaremos un nombre en el campo Name.
G Generalmente se suele utilizar en este campo el mismo nombre del menú pero
con el prefijo mnu para luego poder distinguirlo fácilmente en el código. Entonces
ingresamos en este campo mnuarchivo
2. El segundo paso será ingresar los submenues que están por debajo del menu
archivo. Para ello presionamos el botón "siguiente" donde ingresaremos el menú
"Abrir". como este es un submenú debemos indicarlo con el botón que tiene una
flecha hacia la Derecha. Al presionarlo ahora el mismo se marca con una doble
comilla (""""), para indicarnos que este menú deriva o está contenido en el menú de
cabecera "Archivo". Ahora pasamos a ingresarle el nombre y la leyenda del menú.
En la propiedad Caption ingresamos &Abrir y en el campo Name : mnuabrir.
3. Ahora repetimos los pasos anteriores para ingresar los submenues restantes del
menú Archivo.
4. Si habrás observado los clásicos menues de las aplicaciones, los submenues se
agrupan en secciones. Por ejemplo en el menú archivo del internet explorer, el
submenú Salir está separado del resto por una línea. para lograr esto se debe crear
un submenú como cualquier otro justo arriba del menú que queremos que aparezca
la línea divisoria, y en la propiedad caption del mismo le colocamos el caracter
menos -
5. Ahora ingresaremos el código para que muestre la leyenda en el control Label cada
vez que presionemos un menú.
6. Como habrás notado, el menú se va incorporando al formulario en tiempo de diseño
como cualquier otro control de visual basic. Para ingresar el código necesario
diremos que cada menú responde a un evento llamado click y que se dispara cuando
presionamos el menú con el mouse o cuando le damos un enter, para ingresar el
código en el menú "Abrir" le damos un click en el mismo menú desde la ventana de
diseño. Una vez abierta la ventana de código aparecerá una rutina como la siguiente:

Private Sub mnuabrir_click()

End Sub
Ahora dentro del evento Click del menú colocamos lo siguiente para que la etiqueta
muestre la propiedad caption del menu abrir al pulsar sobre el menú

Label1.Caption = mnuarchivo.Caption

Nota: cabe aclarar que estas rutinas las podemos invocar o llamar como cualquier otra
rutina de código , por ejemplo en el caso anterior, por ejemplo si coloco esto en un botón se
llamaría al procedimiento Click del menú y se ejecutaría el código.

Call mnuabrir_click

Esto es útil si tenemos una barra de herramientas, ya que no tendremos que escribir código
2 veces, y podemos usar un solo procedimiento haciendo una simple llamada al mismo

8 - Menues contextuales o popup menú


Los menues contextuales, esos que se despliegan cuando presionamos el botón derecho
del mouse, son simples menues pero con la diferencia de que los mismos poseen la
propiedad Visible en False, y luego se visualizan utilizando el método PopUpMenu

El método PopUpMenu , se encuentra disponible solo para los formularios.

Los parámetros de este método son los siguientes:

Nombreformulario.PopUpMenu "Elmenu", "flags", x , y, opcion

• Menu: este es el menú popup que debe estar en el formulario, es decir el nombre
• Flags: este parámetro indica la apariencia del menú en el formulario. Acá podemos
utilizar las siguientes constantes para ubicar el menú:
vbpopupmenuleftalign ubica el menú en el lado izquierdo con respecto a x.
vbpopupmenucentertalign alinea en el centro de la coordenada x.
vbpopupmenurightalign lo alinea en el lado izquierdo. En la mayoría de los casos
este parámetro no se utiliza.
• X e Y: podemos indicar, aunque no se suele utilizar, las posiciones x e y donde debe
desplegarce el menú.
• opcion: en este parámetro opcional , podemos indicar el nombre de un submenú
para que aparezca resaltado en negrita.

Si bien el menú PopUp lo podemos llamar en cualquier momento, lo mas común es


utilizarlo y desplegarlo cuando el usuario presiona el botón derecho sobre un control,
formulario etc...

Sabiendo esto , para desplegarlo por ejemplo cuando el usuario presiona el botón sobre un
área del formulario, podemos utilizar el evento MouseUp o MouseDown del mismo y
consultar la variable Button del procedimiento y mediante una estructura IF - Then
comprobar si el botón que presionamos es el derecho , utilizando las constantes
VbRightButton, vbLeftButton

9 - Ejemplo para crear un menú PopUp


Crear un menú llamado mnuContextual con la propiedad visible en False y pegar esta rutina
en el formulario:

Private Sub form_mouseup(button As Integer, shift As Integer, x As


Single, y As Single)

' Consultamos si el botón presionado es el derecho


If button = vbRightButton Then

' Depliega el menú PopUP


Me.PopupMenu mnucontextual
End If

End Sub