Page 32
Image_289_0
Declaración de variables en Visual Basic. Dim. Ejemplos.
__rendered_path__4
Declaración
Ejemplo asignación contenidos
__rendered_path__7__rendered_path__11__rendered_path__12
Dim Salario As String
A = “Se asignarán 30500 euros”
__rendered_path__8__rendered_path__13__rendered_path__14
A = 5 + 2
__rendered_path__7__rendered_path__11__rendered_path__15
Dim A%, B%, Suma%
B = 32
__rendered_path__8__rendered_path__13
Suma = A + B [Suma valdrá 39]
__rendered_path__11
A = 5
__rendered_path__16
B = 32
__rendered_path__16
Dim A%, B%, C%, D%, E%
C = A * B [C toma el valor 160]
__rendered_path__16
D = A + C [D toma el valor 165]
__rendered_path__17__rendered_path__11__rendered_path__14
E = D [E toma el valor 165]
__rendered_path__18__rendered_path__13__rendered_path__14
Dim Agotamiento As Boolean
Agotamiento = True
__rendered_path__17__rendered_path__11
__rendered_path__18__rendered_path__13
__rendered_path__11
Nota: la separación decimal normalmente es un punto, pero tendrás que comprobarlo en tu
__rendered_path__21
computador porque puede variar en función de las configuraciones aplicadas. Es decir, normalmente se
__rendered_path__21
escribirá un decimal como 3.33 en lugar de cómo 3,33.
__rendered_path__21
__rendered_path__22__rendered_path__18__rendered_path__18__rendered_path__27__rendered_path__14
Un programa que conste de:
__rendered_path__22__rendered_path__18__rendered_path__28__rendered_path__14
__rendered_path__18__rendered_path__27
Dim A As Integer
__rendered_path__28
A = 7 * B
__rendered_path__27
__rendered_path__29
dará lugar a un error debido a que B no está declarada.
__rendered_path__30
En cambio:
__rendered_path__31
__rendered_path__30
Dim A%, B%
__rendered_path__30
A = 7 * B
__rendered_path__32__rendered_path__18__rendered_path__18__rendered_path__27__rendered_path__14
Supone que A valga cero, ya que si no se asigna un valor a B ésta tiene por contenido el valor por
__rendered_path__32__rendered_path__18__rendered_path__28__rendered_path__14
defecto, es decir, cero. 7 * B equivale en este caso a 7 * 0, que vale cero.
__rendered_path__18__rendered_path__27
__rendered_path__18__rendered_path__28
__rendered_path__18__rendered_path__27
Próxima entrega: CU00310A
__rendered_path__29
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
__rendered_path__39
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__31__rendered_path__39__rendered_path__39__rendered_path__40__rendered_path__18__rendered_path__40__rendered_path__18__rendered_path__27__rendered_path__14__rendered_path__28__rendered_path__27__rendered_path__14__rendered_path__28__rendered_path__27__rendered_path__29__rendered_path__43__rendered_path__12__rendered_path__31__rendered_path__43__rendered_path__14__rendered_path__43__rendered_path__15__rendered_path__76Image_317_0Image_316_0__rendered_path__80Image_315_0Image_314_0__rendered_path__85
©2006-2029 aprenderaprogramar.com

Page 33
Image_329_0
Asignacion de contenidos en variables Visual Basic
__rendered_path__4
CREAR UN PROGRAMA BÁSICO
Vamos a crear un programa que declare una variable tipo String llamada mensaje y nos muestre un
texto en pantalla.
Para ello como primer paso abrimos un proyecto de Visual Basic. Recordar que esto se hace de la
siguiente manera. En el menú Archivo seleccionamos la opción “Nuevo proyecto”. A continuación
elegimos:
a) Para las versiones que nos dan la opción “Aplicación de Windows Forms” elegimos esta opción.
b) Para las versiones que nos dan la opción “Exe estándar” elegimos esta opción.
Una vez abierto el proyecto debe aparecernos el formulario vacío sobre la pantalla. Hacemos doble
click sobre el formulario y se nos debe abrir la ventana de código conteniendo algunas líneas. En caso
de que no se te abra la ventana de código, vete al menú “Ver” y elige la opción “Código”.
Escribiremos el siguiente código que corresponde al programa que vamos a ejecutar:
Para las versiones menos recientes:
Para las versiones más recientes:
Image_331_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_333_0
Option Explicit
Option Explicit On
Dim mensaje As String
Public Class Form1
Dim mensaje As String
Private Sub Form_Load()
Private Sub Form1_Load(ByVal sender As System.Object,
mensaje = "Bienvenido a este programa"
ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox (mensaje)
mensaje = "Bienvenido a este programa"
End Sub
MsgBox(mensaje)
End Sub
End Class
Image_332_0
__rendered_path__58
Ten en cuenta que según la versión de Visual Basic que estés utilizando pueden existir pequeñas
Image_330_0
diferencias en el código que debe usarse. Nosotros pretendemos centrarnos en la lógica de la
__rendered_path__69
programación más que en los detalles de la sintaxis de una versión concreta. Si es necesario, consulta la
ayuda para conocer la sintaxis exacta que debes emplear.
Analicemos las líneas que lo componen.
1. Option Explicit (Option Explicit On). Ya hemos definido su significado.
2. Dim mensaje as String, declara una variable denominada mensaje como tipo alfanumérico de
longitud variable.
3. Private Sub Form Load() ó Private Sub Form1_Load (…). Esta parte de código corresponde a la
apertura de un módulo de código de Visual Basic, que en la terminología del lenguaje se denomina
__rendered_path__1
©2006-2029 aprenderaprogramar.com

Page 34
Image_329_0
Asignacion de contenidos en variables Visual Basic
__rendered_path__4
Procedimiento. La cuestión se puede hacer un poco complicada en lo que se refiere a terminología,
pero no vamos a preocuparnos por esta cuestión ahora.
En el curso “Bases de la programación I” de aprenderaprogramar.com se trabaja con programas que
constan de un algoritmo principal y distintos módulos o subprogramas. La estructura y terminología de
un programa en Visual Basic es algo más compleja, al trabajarse con distintos elementos dentro de un
programa. Estos elementos varían según la versión, pero podrían ser por ejemplo módulos de
formulario (.frm), módulos estándar (.bas), módulos de clases (.cls), etc.. Nosotros vamos a centrarnos
en lo que es un módulo de formulario: un fichero en el que almacenamos información relacionada con
el formulario donde hemos colocado objetos y para el que hemos escrito un código. Así pues, de
momento para nosotros el programa va a constar de:
Un formulario donde hemos colocado objetos (trabajo de diseño de tipo gráfico). Excepcionalmente
un formulario puede carecer de objetos y encontrarse vacío.
Un código que consta normalmente de: Option Explicit (Option Explicit On), Declaración de variables
y Procedimientos. Un procedimiento es un conjunto de código que se ejecutará en un momento
dado, algo equivalente a lo que habíamos definido con el pseudocódigo como módulo o
subprograma.
Un procedimiento puede ejecutarse por varios motivos como:
a) Ser llamado desde alguna parte del programa.
b) Se produce un evento que da lugar a que se ejecute el código.
En este ejemplo que estamos viendo, el procedimiento se ejecuta cuando tiene lugar un evento que es
la carga del formulario (form load), que vamos a considerar la ejecución del programa. Así pues, el
código comprendido entre el fragmento de código de tipo “Private Sub Form_Load()” y “End Sub” se va
a ejecutar cada vez que mandemos correr el programa, es decir, cada vez que ordenemos su ejecución.
4. mensaje = "Bienvenido a este programa", asigna a la variable mensaje el contenido de tipo
alfanumérico indicado.
5. MsgBox (mensaje), indica al ordenador que proceda a mostrar el contenido de la variable mensaje
dentro de una caja de mensajes.
6. End Sub, define el final del módulo de código (procedimiento).
Ejecuta el programa pulsando la tecla F5. También puedes hacerlo a través del menú <<Ejecutar /
Iniciar>> ó <<Depurar / Iniciar la depuración>> según la versión que estés utilizando. En algunas
versiones existe la opción <<Ejecutar / Iniciar con compilación completa>>, que permite que la
ejecución del programa se haga realizando una revisión de errores más exhaustiva que si se ejecuta el
programa pulsando simplemente F5.
__rendered_path__1
©2006-2029 aprenderaprogramar.com

Page 35
Image_329_0
Asignacion de contenidos en variables Visual Basic
__rendered_path__4
Tras ejecutar el programa te aparecerá en pantalla el mensaje Bienvenido a este programa. Para cerrar
el programa pulsa aceptar y haz click sobre el aspa de cierre de la ventana. Vamos a hacer una pequeña
mejora estética. Vete a Ver-Diseñador (Ver-Objeto) y cambia el valor de la propiedad Caption ó Text
(según la versión que estés usando) del form a "Bienvenida" y modifica el código de la siguiente
manera.
Para las versiones menos recientes:
Para las versiones más recientes:
Image_358_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_359_0
Option Explicit
Option Explicit On
Dim mensaje As String
Public Class Form1
Dim espacios As String
Dim mensaje As String
Private Sub Form_Load()
Dim espacios As String
espacios = vbTab
mensaje = espacios & "Bienvenido a
Private Sub Form1_Load(ByVal sender As
este programa" & espacios
System.Object, ByVal e As System.EventArgs)
MsgBox (mensaje)
Handles MyBase.Load
End Sub
espacios = vbTab
mensaje = espacios & "Bienvenido a este
programa" & espacios
Image_332_0
MsgBox(mensaje)
__rendered_path__45
End Sub
End Class
Image_330_0
__rendered_path__58
Fíjate que cuando aparezca la ventana del formulario, debido a que hemos modificado sus propiedades,
ahora nos aparecerá el texto “Bienvenida” en la parte superior.
Image_360_0
También hemos usado otros elementos que iremos explicando poco a poco a lo largo del curso. El
objetivo ahora es simplemente irnos familiarizando con Visual Basic.
__rendered_path__1
©2006-2029 aprenderaprogramar.com

Page 36
Image_329_0
Asignacion de contenidos en variables Visual Basic
__rendered_path__4
La constante vbTab nos ha servido para introducir un tabulador. Ello da lugar a que el texto aparezca
con un pequeño margen por el lado izquierdo y derecho sobre la ventanita del mensaje. Prueba a
introducir variables de tipo numérico y a dar lugar a que se muestren sus contenidos sobre la ventana
del mensaje. Juega con los nombres de las variables, sus contenidos y la asignación de contenidos.
También puede resultar de interés que compruebes qué ocurre si declaras una variable de un tipo y le
asignas contenido de otro tipo.Por ejemplo declara Dim salario As Integer, asígnale el contenido salario
= “Son 3000 euros” y prueba a mostrarlo en pantalla.
__rendered_path__24
__rendered_path__25
¿Qué ocurre cuando incumplimos las previsiones de Visual Basic para asignar contenidos a
__rendered_path__22__rendered_path__24
variables (por ejemplo, para una variable A tipo Integer definir A = 53200000000000000000000, que
__rendered_path__26
está fuera del rango previsto)? No vamos a analizar los distintos casos que se pueden presentar, sino a
__rendered_path__26
tratar de dar una respuesta genérica. Cuando hacemos algo no esperado, como asignar un valor fuera
__rendered_path__27__rendered_path__94
de rango, asignar un valor que no concuerda con el tipo de la variable, sumar variables numéricas con
__rendered_path__31__rendered_path__95
alfanuméricas, asignar decimales a un número entero..., etc. pueden suceder varias cosas:
__rendered_path__31
a)
Salta un error. Un mensaje impide que el programa comience a ejecutarse, o bien el programa se
__rendered_path__32__rendered_path__92
detiene mientras se está ejecutando.
__rendered_path__35__rendered_path__93
b) El programa se ejecuta pero los resultados no son los deseados.
__rendered_path__35
c)
El programa se ejecuta y los resultados son los deseados.
__rendered_path__32
En resumen, es difícil prever lo que va a suceder, aunque se pueden estudiar y manejar las
__rendered_path__35
circunstancias. Por ejemplo una variable que se declare como tipo Long pero a la que se asigna un
__rendered_path__35
contenido numérico real con dos decimales no da lugar a un error, pero sí a una pérdida de información
__rendered_path__32
derivada de que el número decimal se va a redondear a un entero. Las consecuencias de esta
__rendered_path__35
circunstancia habría que valorarlas para cada programa y circunstancias concretas.
__rendered_path__35
Como programadores hemos de buscar programas 100% predecibles, en los que no se pueda producir
__rendered_path__32
que "sea difícil prever lo que va a suceder". Por tanto intentaremos que la declaración y asignación de
__rendered_path__35
contenidos a variables se ajuste a las normas de Visual Basic. En última instancia, podremos prever una
__rendered_path__35
rutina de gestión de errores para casos imprevistos.
__rendered_path__40
__rendered_path__42
__rendered_path__42
__rendered_path__32
__rendered_path__35
Próxima entrega: CU00311A
__rendered_path__35
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
__rendered_path__32
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__1__rendered_path__35__rendered_path__35__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__40__rendered_path__42__rendered_path__42__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__40__rendered_path__42__rendered_path__42__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__32__rendered_path__35__rendered_path__35__rendered_path__72__rendered_path__76__rendered_path__76__rendered_path__77__rendered_path__24__rendered_path__25__rendered_path__24__rendered_path__80__rendered_path__80__rendered_path__96__rendered_path__97__rendered_path__98__rendered_path__99
©2006-2029 aprenderaprogramar.com

Page 37
Image_375_0
Arrays unidimensionales. Ejemplos en Visual Basic.
__rendered_path__3
VARIABLES CON ÍNDICE O LOCALIZADOR. ARRAYS.
El concepto de array con Visual Basic coincide con el que se expone en el curso “Bases de la
programación nivel I” de aprenderaprogramar.com en pseudocódigo. Veremos ahora cómo declarar
arrays estáticos de una dimensión. La gestión de arrays multidimensionales y dinámicos la veremos más
adelante.
ARRAYS UNIDIMENSIONALES
La sintaxis a emplear será:
__rendered_path__22
Dim [Nombre del array]([dimensión]) As [Tipo de variable]
__rendered_path__18__rendered_path__21__rendered_path__24
__rendered_path__19__rendered_path__23
Si no se declara el tipo de variable el array será tipo Variant ó tipo Object (según la versión de Visual
__rendered_path__21
Basic que estemos empleando) por defecto. Conviene tener cuidado con esto y seguir las mismas
__rendered_path__25
pautas que hemos indicado para las variables. Ejemplos de declaración de arrays serían:
__rendered_path__22
Dim Vez(10) As Integer
__rendered_path__25
Dim Amigo(1000) As String
__rendered_path__24
Dim Value(25) As Single
Dim NúmerodeCoches(24) As Integer
Dim Jugador(8) As Long
Dim TCP(3) As Boolean
Cuando creamos un array del tipo A(n) podríamos pensar que estamos creando n variables que son
A(1), A(2), A(3), ..., A(n). Pero en realidad estamos creando n+1 variables porque Visual Basic crea
también A(0). Esto conviene tenerlo en cuenta porque puede dar lugar a alguna confusión. Disponer de
un valor con índice cero puede ser de utilidad en situaciones como considerar cada variable asociada a
una hora del día, empezando a contar desde la hora cero hasta la 23 (total de 24 horas), cosa que es
habitual en algunos países. En lugar de 1, 2, 3, ..., 24 estaríamos usando 0, 1, 2, ..., 23.
En la mayoría de lenguajes de programación se usa el índice cero como primer índice de un array. No
obstante, en las versiones menos recientes de Visual Basic se permitía establecer como primer índice
de un array el 1 mediante la instrucción Option Base. A través de ella se puede establecer como primer
índice del array el uno en vez de el cero en aquellas versiones que lo admiten. Para ello se escribe en la
cabecera del programa:
Image_376_0
Option Base 1
__rendered_path__81
Option Base afecta a todos los arrays que se declaren. También podemos indicar que el primer índice
de los arrays es cero escribiendo Option Base 0 en las versiones de Visual Basic que admiten esta
instrucción. Esto equivale a no poner nada (por defecto el primer índice será cero). Vamos a trabajarlo
sobre el ordenador. En la ventana de código escribe lo siguiente:
__rendered_path__1
©2006-2029 aprenderaprogramar.com

Page 38
Image_375_0
Arrays unidimensionales. Ejemplos en Visual Basic.
__rendered_path__3
Para las versiones menos recientes:
Para las versiones más recientes:
Image_402_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_404_0
Option Explicit
Option Explicit On
Dim Numerodecoches(24) As Integer
Public Class Form1
Private Sub Form1_Load
(ByVal sender As System.Object,
Private Sub Form_Load()
ByVal e As System.EventArgs) Handles MyBase.Load
Numerodecoches(0) = 14
Dim Numerodecoches(24) As Integer
MsgBox ("El número de coches en la hora
Numerodecoches(0) = 14
cero fue " & Numerodecoches(0))
MsgBox("El número de coches en la hora cero fue " &
End Sub
Numerodecoches(0))
End Class
End Sub
Image_403_0
__rendered_path__83
Al ejecutar el código (Ctrl+F5), te aparecerá el mensaje "El número de coches en la hora cero fue 14".
Image_405_0
Modifica el programa indicando Numerodecoches(29) = 14 en lugar de Numerodecoches(0) = 14.
__rendered_path__94
Prueba a ejecutarlo y te aparecerá un mensaje del tipo: "Error en tiempo de ejecución. El subíndice está
fuera del intervalo". Efectivamente, se debe a haber puesto un índice fuera del rango y ser los valores
que puedes usar en el código como localizador de una variable del array los comprendidos entre 0 y 24.
Al estar usando la variable Numerodecoches(29), Visual Basic detecta la incoherencia y genera un error.
Otra opción que nos dan algunas versiones menos recientes de Visual Basic es tener un array de
variables cuyos localizadores no comienzan en cero ni en uno, sino en un número específico. La sintaxis
para ello en las versiones que lo permiten es:
__rendered_path__42
Dim [Nombre de variable]([Valor inicial] To [Valor final]) As [Tipo de variable]
__rendered_path__34__rendered_path__41__rendered_path__44
__rendered_path__33__rendered_path__43
__rendered_path__39__rendered_path__41
Supongamos que queremos definir una serie de variables asociadas a las horas comprendidas entre las
__rendered_path__45
10 y las 18 horas. En las versiones que lo permiten podríamos crear un array del tipo:
__rendered_path__42
__rendered_path__45
Dim Magnitud (10 To 18) As Integer
__rendered_path__44
En este caso si la versión admite esta sintaxis los valores válidos como índices del array serían 10, 11,
Image_406_0
12, 13, 14, 15, 16, 17 y 18. Cualquier número que no sea de esta serie usado como localizador del array
Image_405_0
daría lugar a un error por subíndice fuera del intervalo. En las versiones más recientes de Visual Basic
__rendered_path__79
no es posible definir índices en un rango, de modo que hemos de declarar el array como un array
normal cuyo primer índice es cero, pudiendo dejar vacíos o sin usar aquellos índices que no nos
resulten útiles.
El contenido de una matriz estática puede ser borrado utilizando la instrucción Erase. La sintaxis será la
siguiente:
__rendered_path__74
Erase [Nombre de array1], [Nombre de array2], ..., [Nombre de array n]
__rendered_path__1__rendered_path__68__rendered_path__69__rendered_path__41__rendered_path__75__rendered_path__41__rendered_path__44__rendered_path__76__rendered_path__74__rendered_path__76__rendered_path__44
©2006-2029 aprenderaprogramar.com

Page 39
Image_375_0
Arrays unidimensionales. Ejemplos en Visual Basic.
__rendered_path__3
Ejemplos de uso de Erase pueden ser:
Erase Númerodecoches
Erase Númerodecoches, Usuarios, Calles
Al invocar a Erase sobre una variable de tipo array el resultado depende de la versión de Visual Basic
que estemos utilizando:
a) En las versiones menos recientes el contenido de las variables que constituyen el array estático
se transforma en cero si son de tipo numérico o cadena vacía si son de tipo texto (String), pero
el array sigue existiendo y teniendo un contenido válido.
b) En las versiones más recientes el contenido de las variables que constituyen el array estático
queda eliminado y no es posible invocar un elemento del array. La variable del array pasa a
tener valor Nothing y para volver a usarla tendríamos que establecer una redefinición del array
con la instrucción ReDim, que estudiaremos más adelante.
El comportamiento de Erase lo volveremos a estudiar pues tiene distintas aplicaciones. Ejecuta el
siguiente programa para comprobar el funcionamiento de Erase.
Para las versiones menos recientes:
Para las versiones más recientes:
Image_410_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_411_0
Option Explicit On
Option Explicit
Dim Numerodecoches(24) As Integer
Public Class Form1
Private Sub Form1_Load
(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Private Sub Form_Load()
Dim Numerodecoches(24) As Integer
Numerodecoches(0) = 14
Numerodecoches(0) = 14
Erase Numerodecoches
Erase Numerodecoches
MsgBox ("El número de coches en la hora
MsgBox("El número de coches en la hora cero fue " &
cero fue " & Numerodecoches(0))
End Sub
Numerodecoches(0))
End Sub
End Class
Image_403_0
El resultado será:
__rendered_path__70
a) Para las versiones menos recientes será: El número de coches en la hora cero fue 0. A pesar de haber
Image_405_0
definido Numerodecoches para la hora cero como 14, este valor no se llega a mostrar porque se ejecuta
__rendered_path__84
un Erase, que da lugar a que todos los valores del array se establezcan a cero por ser el array de tipo
Integer.
b) Para las versiones más recientes: Error. No se controló NullReferenceException. Referencia a objeto
no establecida como instancia de un objeto. Este error se genera porque se considera que el array no
tiene índices establecidos y tendríamos que volver a establecerlos usando la instrucción ReDim que
estudiaremos más adelante.
Si eliminas el Erase, te deberá aparecer en pantalla "El número de coches en la hora cero fue 14".
__rendered_path__1
©2006-2029 aprenderaprogramar.com