Asc (Función)
Sintaxis
Asc(cadena)
Ejemplo de la función Asc
En este ejemplo se utiliza la función Asc para devolver el
código de carácter correspondiente a la primera letra de una cadena de
caracteres.
Dim MiNúmero
MiNúmero = Asc("A") ' Devuelve 65.
MiNúmero = Asc("a") ' Devuelve 97.
MiNúmero = Asc("Apple") ' Devuelve 65.
Funciones de conversión de tipos
Sintaxis
CBool(expresión)
CByte(expresión)
CCur(expresión)
CDate(expresión)
CDbl(expresión)
CDec(expresión)
CInt(expresión)
CLng(expresión)
CSng(expresión)
CStr(expresión)
CVar(expresión)
Tipos devueltos
El nombre de la función determina el tipo devuelto, como se
muestra a continuación:
Función
|
Tipo devuelto
|
Intervalo del argumento expresión
|
CBool
|
|
Cualquier expresión de cadena o
numérica válida.
|
CByte
|
|
0 a 255.
|
CCur
|
|
-922.337.203.685.477,5808 a
922.337.203.685.477,5807.
|
CDate
|
|
|
CDbl
|
|
-1.79769313486231E308 a
-4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a
1,79769313486232E308 para valores positivos.
|
CDec
|
|
+/-79.228.162.514.264.337.593.543.950.335
para números basados en cero, es decir, números sin decimales. Para números
con 28 decimales, el intervalo es
+/-7,9228162514264337593543950335. La menor posición para un número que no
sea cero es 0,0000000000000000000000000001.
|
CInt
|
|
-32.768 a 32.767; las fracciones
se redondean.
|
CLng
|
|
-2.147.483.648 a 2.147.483.647;
las fracciones se redondean.
|
CSng
|
|
-3,402823E38 a -1,401298E-45
para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos.
|
CStr
|
|
El mismo intervalo que Double
para valores numéricos. El mismo intervalo que String para valores no
numéricos.
|
CVar
|
|
|
Comentarios
Si la expresión del argumento expresión que se pasa
a la función está fuera del intervalo del tipo de dato al que se va a
convertir, se produce un error.
En general, el código se puede documentar utilizando las
funciones de conversión de tipos de datos para indicar que el resultado de
alguna de las operaciones se debería expresar como un tipo de datos en
particular, no como el tipo de datos predeterminado. Por ejemplo, utilice Ccur
para forzar la ejecución de operaciones con aritmética monetaria en los
casos en los que se haría con precisión simple, doble precisión o aritmética
entera.
Debe utilizar funciones de conversión de tipos en lugar de
Val
para proporcionar conversiones que reconozcan las variantes internacionales.
Por ejemplo, cuando utiliza
CCur, se reconocen diferentes separadores
decimales, diferentes separadores de millares y varias opciones monetarias
dependiendo de la
configuración regional
establecida en su equipo.
Cuando la parte fraccionaria es exactamente 0,5, CInt
y CLng siempre redondean al número par más cercano. Por ejemplo, 0,5
redondea a 0, y 1,5 redondea a 2. CInt y CLng se diferencian de
las funciones Fix y Int en que truncan, en lugar de redondear, la
parte fraccionaria de un número. Además, Fix y Int siempre
devuelven un valor del mismo tipo del que se le pasa.
Utilice la función
IsDate para determinar si se
puede convertir
date a una fecha o una hora.
CDate reconoce
literales de fecha y literales de hora
además de números comprendidos dentro del intervalo de fechas aceptables. Al
convertir un número a una fecha, la parte numérica entera se convierte a una
fecha. Cualquier parte fraccionaria del número se convierte a la hora del día,
comenzando a medianoche.
CDate reconoce
formatos de fecha que se ajusten a la configuración regional de su sistema. Es
posible que no se determine el orden correcto del día, mes y año si se
proporciona en un formato diferente del que reconoce la configuración de fecha.
Además, no se puede reconocer un formato de fecha largo si contiene la cadena
del día de la semana.
Se proporciona una función CVDate por compatibilidad
con versiones anteriores de Visual Basic. La sintaxis de la función CVDate
es idéntica a la de la función CDate; sin embargo, CVDate
devuelve un Variant de subtipo Date en lugar del tipo Date
real. Puesto que ahora hay un tipo de dato intrínseco Date, no es
necesario CVDate. Se puede observar el mismo efecto al convertir una
expresión a Date y asignarla después a un Variant. Esta técnica
es coherente con la conversión de todos los demás tipos intrínsecos a sus
equivalentes subtipos Variant.
Nota La
función CDec no devuelve un tipo de dato discreto; en su lugar, siempre
devuelve un Variant con los valores convertidos a un subtipo Decimal.
Ejemplo de la función CDate
En este ejemplo se utiliza la función CDate para convertir
una cadena en un tipo de datos Date. En general, no se recomienda
utilizar fechas y horas como cadenas de caracteres en el código definitivo de
una aplicación (como se muestra en el ejemplo). Use en su lugar literales de
fecha y literales de hora (como #2/12/1969# y #4:45:23 PM#).
Dim MiFecha, MiHoraCorta, MiHora, MiHoraCorta
MiFecha = "12 febrero 1969" ' Define la fecha.
MiFechaCorta = CDate(MiFecha)' Convierte al tipo Date.
MiHora = "4:35:47 PM" ' Define la hora.
MiHoraCorta = CDate(MiHora) ' Convierte al tipo Date.
Ejemplo de la función CInt
En este ejemplo se utiliza la función CInt para convertir un
valor a un tipo de datos Integer.
Dim MiDoble, MiEntero
MiDoble = 2345.5678 ' MiDoble es un Double.
MiEntero = CInt(MiDoble) ' MiEntero contiene 2346.
Ejemplo de la función CStr
En este ejemplo se utiliza la función CStr para convertir un
valor numérico a un tipo de datos String.
Dim MiDoble, MiCadena
MiDoble = 437.324 ' MiDoble es un Double.
MiCadena = CStr(MiDoble) ' MiCadena contiene "437.324".
Ejemplo de la función CDbl
En este ejemplo se utiliza la función CDbl para convertir una
expresión a un tipo de datos Double.
Dim MiMoneda, MiDoble
MiMoneda = CCur(234.456784) ' MiMoneda es Currency.
MiDoble = CDbl(MiMoneda * 8.2 * 0.01)
' Convierte el resultado a un tipo de datos Double.
Ejemplo de la función CVar
En este ejemplo se utiliza la función CVar para convertir una
expresión a un tipo de datos Variant.
Dim MiEntero, MiVariante
MiEntero = 4534 ' MiEntero es un Integer.
MiVariante = CVar(MiEntero & "000")' MiVariante
' contiene la cadena 4534000.
Selecciona y devuelve un valor de una lista de
argumentos.
Sintaxis
Choose(índice, opción-1[, opción-2, ... [, opción-n]])
La sintaxis de la función Choose consta de las
siguientes partes:
Parte
|
Descripción
|
índice
|
Requerido. Expresión numérica o campo que da como
resultado un valor entre 1 y el número de opciones disponibles.
|
opción
|
|
Comentarios
La función Choose devuelve un valor de la lista de
opciones dependiendo del valor de índice. Si índice es 1, la
función Choose devolverá la primera opción de la lista; si índice
es 2, devolverá la segunda y así sucesivamente.
Puede utilizar la función Choose para buscar un
valor en una lista de posibilidades. Por ejemplo, si índice da como
resultado 3 y opción-1 = "uno", opción-2 =
"dos" y opción-3 = "tres", la función Choose
devuelve "tres". Esta funcionalidad es especialmente útil cuando índice
representa el valor en un grupo de opción.
La función
Choose evalúa todas las opciones de la
lista, aunque sólo devuelva una. Por esta razón, debe comprobar que no se
producirán efectos no deseados. Por ejemplo, si utiliza la función
MsgBox
como parte de una
expresión en todas
las opciones, aparecerá un cuadro de mensaje para cada opción en el momento de
evaluarla, aunque la función
Choose sólo vaya a devolver el valor de una
de ellas.
La función
Choose devuelve
Null si
índice es menor que 1 o
mayor que el número de opciones de la lista.
Si índice no es un número entero, se redondeará al
entero más cercano antes de su evaluación.
Ejemplo de la función Choose
Este ejemplo utiliza la función Choose para mostrar un nombre
como respuesta a un índice transferido al procedimiento en el parámetro Ind.
Function GetChoice(Ind As Integer)
GetChoice = Choose(Ind, "Speedy", "United", "Federal")
End Function
Chr (Función)
Sintaxis
Chr(códigocar)
El
argumento códigocar
es un tipo
Long que identifica a un
carácter.
Comentarios
Los números del 0 al 31 son los mismos que los códigos
ASCII estándar no imprimibles. Por
ejemplo,
Chr(10
) devuelve un carácter de avance de línea. El
intervalo normal de
códigocar es 0–255. Sin embargo, en sistemas
DBCS, el intervalo real de
códigocar
es de -32768 a 65535.
Ejemplo de la función Chr
En este ejemplo se utiliza la función Chr para devolver el
carácter asociado con el código de carácter especificado.
Dim MiCar
MiCar = Chr(65) ' Devuelve A.
MiCar = Chr(97) ' Devuelve a.
MiCar = Chr(62) ' Devuelve >.
MiCar = Chr(37) ' Devuelve %.
CurDir (Función)
Devuelve un tipo Variant (String) que representa la
ruta de acceso actual.
Sintaxis
CurDir[(unidad)]
El
argumento requerido
unidad, es una
expresión de cadena
que especifica una unidad de disco existente. Si no se especifica la unidad de
disco o el argumento
unidad es de longitud cero (""), la
función
CurDir devuelve la ruta de acceso de la unidad de
disco
actual. En Macintosh,
CurDir ignora cualquier
unidad especificada
y simplemente devuelve la ruta de la unidad actual.
Ejemplo de la función CurDir
En este ejemplo se utiliza la función CurDir para obtener la
ruta de acceso actual. En Macintosh, se ignoran las especificaciones de unidad
dadas a CurDir. El nombre de la unidad predeterminada es
"HD" y las porciones del nombre de la ruta se separan por dos puntos
":" en lugar de por barras invertidas. Igualmente, se especificarán
carpetas de Macintosh en lugar de \Windows.
' Se supone que la ruta de acceso actual en la unidad C es "C:\WINDOWS\SYSTEM" (en Microsoft Windows).
' Se supone que la ruta de acceso actual en la unidad D ' es "D:\EXCEL".
' Se supone que la unidad de disco actual es C.
Dim MiRuta
MiRuta = CurDir ' Se devuelve "C:\WINDOWS\SYSTEM".
MiRuta = CurDir("C") ' Se devuelve"C:\WINDOWS\SYSTEM"
MiRuta = CurDir("D") ' Se devuelve "D:\EXCEL".
ChDir (Instrucción)
Cambia el directorio o carpeta actual.
Sintaxis
ChDir ruta
El
argumento requerido
ruta, es una
expresión de cadena
que identifica el directorio o carpeta que va a ser el nuevo directorio o
carpeta predeterminado. La
ruta puede incluir la unidad de disco. Si no
se especifica la unidad, la instrucción
ChDir cambia el directorio o
carpeta predeterminado de la unidad actual.
Comentarios
La instrucción ChDir cambia el directorio predeterminado,
pero no la unidad predeterminada. Por ejemplo, si la unidad de disco
predeterminada es C, la siguiente instrucción cambia el directorio
predeterminado en la unidad D, pero C continúa siendo la unidad predeterminada:
ChDir "D:\TMP"
Ejemplo de la instrucción ChDir
' Cambia el directorio o carpeta actual a "MIDIR".
ChDir "MIDIR"
' Se supone que "C:" es la unidad de disco actual.
La siguiente instrucción cambia el directorio
ChDir "D:\WINDOWS\SYSTEM"
Date (Función)
Devuelve un tipo Variant (Date) que contiene la fecha actual
del sistema.
Sintaxis
Date
Comentarios
Utilice la instrucción Date para establecer la fecha del
sistema.
Devuelve un valor de tipo Variant (Date) con
una fecha a la que se ha agregado un intervalo de tiempo especificado.
Sintaxis
DateAdd(intervalo, número, fecha)
Parte
|
Descripción
|
intervalo
|
|
número
|
Requerido. Expresión numérica con el número de
intervalos que se desea agregar. Puede ser positiva (para obtener fechas
futuras) o negativa (para obtener fechas pasadas).
|
fecha
|
Requerido. Valor de tipo Variant
(Date) o literal que representa la fecha en la que se agregó el
intervalo.
|
Valores
El
argumento intervalo
tiene los siguientes valores:
Valor
|
Descripción
|
yyyy
|
Año
|
q
|
Trimestre
|
m
|
Mes
|
y
|
Día del año
|
d
|
Día
|
w
|
Día de la semana
|
ww
|
Semana
|
h
|
Hora
|
n
|
Minuto
|
s
|
Segundo
|
Comentarios
Puede utilizar la función DateAdd para agregar o
restar un intervalo de tiempo especificado de una fecha. Por ejemplo, con DateAdd
podría calcular una fecha 30 días posterior al día de hoy o una hora 45 minutos
posterior a la actual.
Si desea agregar días a fecha, puede utilizar
Día del año ("y"), Día ("d") o Día de la semana
("w").
La función DateAdd no devuelve nunca una fecha no
válida. En el ejemplo siguiente se agrega un mes al 31 de enero:
DateAdd("m", 1, "31-ene-95")
En este caso, DateAdd devuelve 28-feb-95 y no
31-feb-95. Si fecha es 31-ene-96, devolverá 29-feb-96, ya que
1996 es un año bisiesto.
Si la fecha calculada va a resultar inferior al año 100
(esto es, se restan más años que los que hay en fecha), se
produce un error.
Si
número no es un valor de tipo
Long se redondeará al número entero más
cercano antes de ser evaluado.
Nota El
formato del valor devuelto por DateAdd es determinado por la
configuración del Panel de control, no por el formato que se pasa en el
argumento fecha.
Ejemplo de la función DateAdd
Este ejemplo obtiene una fecha y, utilizando la función DateAdd,
muestra una fecha que corresponde a un número especificado de meses en el
futuro.
Dim PrimeraFecha As Date ' Declara las variables.
Dim TipoIntervalo As String
Dim Número As Integer
Dim Msj
TipoIntervalo = "m" ' "m" especifica meses como intervalo.
PrimeraFecha = InputBox("Escriba una fecha")
Número = InputBox("Escriba el número de meses a agregar")
Msj = "Nueva fecha: " & DateAdd(TipoIntervalo, Número, PrimeraFecha)
MsgBox Msj
Devuelve un valor de tipo Variant (Long) que
especifica el número de intervalos de tiempo entre dos fechas determinadas.
Sintaxis
DateDiff(intervalo, fecha1, fecha2[, primerdíasemana[, primerasemanaaño]])
Parte
|
Descripción
|
Intervalo
|
Requerido. Expresión de cadena con el intervalo de
tiempo utilizado para calcular la diferencia entre fecha1 y fecha2.
|
Fecha1, fecha2
|
Requerido; Variant (Date).
Las dos fechas que se van a utilizar en el cálculo.
|
Primerdíasemana
|
Opcional. Constante que especifica el primer día
de la semana. Si no se especifica, se asume que es el domingo.
|
Primerasemanaaño
|
Opcional. Constante, que
especifica la primera semana del año. Si no se especifica, se asume que es
aquélla en la que se encuentre el 1 de enero.
|
Valores
El
argumento intervalo
toma los valores siguientes:
Intervalo
|
Descripción
|
yyyy
|
Año
|
q
|
Trimestre
|
m
|
Mes
|
y
|
Día del año
|
d
|
Día
|
w
|
Día de la semana
|
ww
|
Semana
|
h
|
Hora
|
n
|
Minuto
|
s
|
Segundo
|
Comentarios
Puede utilizar la función DateDiff para determinar
el número de intervalos especificados que existen entre dos fechas. Por
ejemplo, con DateDiff podría calcular el número de días entre dos fechas
o el número de semanas entre hoy y el final del año.
Si desea saber el número de días entre fecha1
y fecha2, puede utilizar Día del año ("y") o Día
("d"). Cuando intervalo es Día de la semana
("w"), DateDiff devuelve el número de semanas entre las dos
fechas. Si fecha1 es lunes, DateDiff contará el número de
lunes hasta fecha2. En la cuenta incluirá fecha2,
pero no fecha1. Si intervalo es Semana
("ww"), la función DateDiff devolverá el número de semanas
entre las dos fechas. En este caso contará el número de domingos entre fecha1
y fecha2. DateDiff contará fecha2 si es
domingo, pero no fecha1, aunque sea domingo.
Si fecha1 se refiere a un momento posterior
en el tiempo a fecha2, la función DateDiff devolverá un
número negativo.
El argumento primerdíasemana afecta a los
cálculos que utilizan "w" y "ww" como símbolos de
intervalo.
Si
fecha1 o
fecha2 es un
literal de fecha, el año, si se
especifica, pasará a ser una parte permanente de la fecha. Sin embargo, si
fecha1
o
fecha2 está comprendida entre comillas dobles ("") y se
omite el año, se insertará el año en curso en el código cada vez que se evalúe
la expresión
fecha1 o
fecha2. Así es posible escribir código que
se pueda usar en años distintos.
Cuando compara el 31 de diciembre con el 1 de enero del año
siguiente, DateDiff para un año ("yyyy") devolverá 1 aunque
sólo haya pasado un día.
Ejemplo de la función DateDiff
Este ejemplo utiliza la función DateDiff para mostrar el
número de días entre una fecha dada y hoy.
Dim LaFecha As Date ' Declara las variables.
Dim Msj
LaFecha = InputBox("Escriba una fecha")
Msj = "Días desde hoy: " & DateDiff("d", Now, LaFecha)
MsgBox Msj
Devuelve un valor de tipo Variant (Integer)
que contiene la parte especificada de la fecha dada.
Sintaxis
DatePart(intervalo, fecha[,primerdíasemana[,
primerasemanaaño]])
Parte
|
Descripción
|
intervalo
|
|
fecha
|
Requerido. Tipo de valor Variant
(Date) que se desea evaluar.
|
primerdíasemana
|
Opcional. Una constante que especifica el primer día
de la semana. Si no se especifica, se asume que es el domingo.
|
primerasemanaaño
|
Opcional. Una constante que
especifica la primera semana del año. Si no se especifica, se asume que es
aquélla en la que se encuentre el 1 de enero.
|
Valores
El
argumento intervalo
toma los siguientes valores:
Valor
|
Descripción
|
yyyy
|
Año
|
q
|
Trimestre
|
m
|
Mes
|
y
|
Día del año
|
d
|
Día
|
w
|
Día de la semana
|
ww
|
Semana
|
h
|
Hora
|
n
|
Minuto
|
s
|
Segundo
|
El argumento primerdíasemana toma los
siguientes valores:
Constante
|
Valor
|
Descripción
|
vbUseSystem
|
0
|
Utiliza el valor de la API de
NLS.
|
vbSunday
|
1
|
Domingo (predeterminado)
|
vbMonday
|
2
|
Lunes
|
vbTuesday
|
3
|
Martes
|
vbWednesday
|
4
|
Miércoles
|
vbThursday
|
5
|
Jueves
|
vbFriday
|
6
|
Viernes
|
vbSaturday
|
7
|
Sábado
|
Comentarios
Puede utilizar la función DatePart para evaluar una
fecha y devolver un intervalo de tiempo específico. Por ejemplo, podría
utilizar DatePart para calcular el día de la semana o la hora actual.
El argumento primerdíasemana afecta a los
cálculos que utilizan los símbolos de intervalo "w" y "ww".
Si
fecha es un
literal
de fecha, el año que se especifica, pasará a ser una parte permanente de la
fecha. Sin embargo, si
fecha está encerrada entre comillas dobles
("") y se omite el año, se insertará el año en curso en el código
cada vez que se evalúe la expresión
fecha. Así es posible escribir
código que se pueda usar en años distintos.
Ejemplo de la función DatePart
Este ejemplo obtiene una fecha y, utilizando la función DatePart,
muestra el trimestre del año que ocurre.
Dim LaFecha As Date ' Declara las variables.
Dim Msj
LaFecha = InputBox("Escriba una fecha:")
Msj = "Trimestre: " & DatePart("q", LaFecha)
MsgBox Msj
DateSerial (Función)
Devuelve un tipo Variant (Date) para un año,
mes y día especificados.
Sintaxis
DateSerial(año, mes, día)
Parte
|
Descripción
|
año
|
|
mes
|
Se requiere; Integer.
Cualquier expresión numérica.
|
día
|
Se requiere; Integer.
Cualquier expresión numérica.
|
Comentarios
Para especificar una fecha, como el 31 de diciembre de
1991, el intervalo de números para cada
argumento
de
DateSerial debería estar en el intervalo normalmente aceptado para la
unidad; es decir, 1–31 para días y 1–12 para meses. Sin embargo, puede
especificar fechas relativas para cada argumento, usando cualquier expresión
numérica que represente algún número de días, meses o años, antes o después de
cierta fecha.
El ejemplo siguiente usa expresiones numéricas en lugar de
números de fecha absoluta. Aquí la función DateSerial devuelve una fecha
que es el día antes del primer día del mes (1 - 1), dos meses antes de agosto (8 - 2), 10 años antes de 1990 (1990 - 10); en otras palabras, el
31 de mayo de 1980.
DateSerial(1990 - 10, 8 - 2, 1 - 1)
Bajo Windows 98 y Windows NT 5, los años de dos dígitos
para el argumento año se interpretan basados en la configuración
de la máquina definida por el usuario. Los valores predeterminados son los
valores entre 0 y 29, inclusive, se interpretan como los años 2000–2029. Los
valores predeterminados entre 30 y 99, se interpretan como los años 1930–1999.
Para el resto de los argumentos año se usa un año con los cuatro
dígitos (por ejemplo, 1800).
Versiones más recientes de Windows interpretan los años de
dos dígitos basados en los valores predeterminados descriots anteriormente.
Para estar seguro de que la función devuelve el valor apropiado, utilice un año
de cuatro dígitos.
Cuando un argumento no esté incluido en el intervalo
aceptado normalmente para él, se incrementa hasta la siguiente unidad mayor,
según convenga. Por ejemplo, si especifica 35 días, se evalúa como un mes y
algunos días, dependiendo de la parte del año donde se aplique. No obstante, si
un solo argumento está fuera de su intervalo -32.768 a 32.767 o si la fecha
especificada por los tres argumentos, directamente o mediante expresión, no se
incluye en el intervalo aceptable de fechas, se produce un error.
Ejemplo de la función DateSerial
En este ejemplo se utiliza la función DateSerial para
devolver la fecha correspondiente al año, mes y día especificados.
Dim MiFecha
' MiFecha contiene la fecha correspondiente al 12 de
' febrero de 1969.
MiFecha = DateSerial(1969, 2, 12) ' Devuelve una fecha.
DateValue (Función)
Devuelve un tipo Variant (Date).
Sintaxis
DateValue(fecha)
El
argumento fecha
es normalmente una
expresión de cadena
que representa una fecha del 1 de enero del año 100, al 31 de diciembre de
9999. Sin embargo,
fecha también puede ser cualquier
expresión que pueda representar una
fecha, una hora o una fecha y una hora en ese intervalo.
Comentarios
Si
fecha es una cadena que incluye solamente números
separados por
separadores de fecha,
DateValue
reconoce el orden para mes, día y año de acuerdo al formato de Fecha abreviado
que se haya especificado para el sistema.
DateValue también reconoce
fechas claramente definidas que contengan nombres de mes, en forma completa o
abreviada. Por ejemplo, además de reconocer 30/12/1991 y 30/12/91,
DateValue
también reconoce 30 de diciembre de 1991 y dic 31, 1991.
Si se omite la parte de año de fecha, DateValue usa el
año actual de la fecha del sistema de su PC.
Si el argumento fecha incluye información de hora, DateValue
no la devuelve. Sin embargo, si fecha incluye información de hora no válida
(tal como "89:98"), ocurrirá un error.
Ejemplo de la función DateValue
En este ejemplo se utiliza la función DateValue para
convertir una cadena de caracteres a fecha. También puede utilizar literales de
fecha para asignar directamente una fecha a una variable Variant o Date
, por ejemplo, MiFecha = #2/12/69#.
Dim MiFecha
MiFecha = DateValue("12 de febrero de 1969")
' Devuelve una fecha.
Day (Función)
Devuelve el valor de tipo Variant (Integer) que
especifica un número entero entre 1 y 31, inclusive, que representa el día del
mes.
Sintaxis
Day(fecha)
Ejemplo de la función Day
En este ejemplo se utiliza la función Day para obtener el día
del mes de una fecha especificada. En el entorno de desarrollo, el literal de
fecha se presentará en formato abreviado, utilizando la configuración regional
del código.
Dim MiFecha, MiDía
MiFecha = #12 febrero 1969# ' Asigna una fecha.
MiDía = Day(MiFecha) ' MiDía contiene 12.
DoEvents (Función)
Cede el control de la ejecución al sistema operativo, para que éste
pueda procesar otros eventos.
Sintaxis
DoEvents( )
Comentarios
La función
DoEvents devuelve un tipo
Integer que representa el número de
formularios abiertos por una versión independiente de Visual Basic, como la de
Visual Basic Professional edition.
DoEvents devuelve 0 en el resto de
las aplicaciones.
La función DoEvents pasa el control al sistema operativo. El
control no se devuelve hasta que el sistema operativo haya terminado de
procesar los eventos en cola y se hayan enviado todas las teclas de la cola SendKeys.
DoEvents es más útil para tareas sencillas como permitir que
un usuario cancele un proceso después de que ha comenzado, por ejemplo una
búsqueda de un archivo. Para procesos de ejecución larga, es mejor dar
preferencia al procesador utilizando un Timer o delegando la tarea a un
componente EXE de ActiveX. En último caso, la tarea puede continuar
completamente independiente de la aplicación y el sistema operativo tiene en
cuenta la multitarea y los intervalos de tiempos.
Advertencia Siempre que dé preferencia al
procesador temporalmente dentro de un procedimiento de evento, asegúrese de que
el
procedimiento no se ejecute de nuevo
desde una parte diferente del código antes de que devuelva la primera llamada.
Esto podría causar resultados impredecibles. Además, no utilice la función
DoEvents
si existe la posibilidad de que otras aplicaciones interactúen con el
procedimiento, de manera imprevista, durante el tiempo en que éste ha cedido el
control.
Ejemplo de la función DoEvents
En este ejemplo se utiliza la instrucción DoEvents para ceder
el control de la ejecución al sistema operativo una vez cada 1000 iteraciones
del bucle. DoEvents devuelve el número de formularios de Visual Basic
abiertos, sólo cuando la aplicación principal es Visual Basic.
' Crea una variable para mantener el número de
' formularios de Visual Basic cargados y visibles
Dim I, OpenForms
For I = 1 To 150000 ' Inicia el bucle.
If I Mod 1000 = 0 Then ' Si el bucle se ejecuta 1000 veces.
OpenForms = DoEvents ' Cede el control al sistema operativo.
End If
Next I ' Incrementa el contador del bucle.
Int, Fix (Funciones)
Devuelve la parte entera de un número.
Sintaxis
Int(número)
Fix(número)
Comentarios
Las funciones Int y Fix eliminan la fracción de un número
y devuelven el valor entero resultante.
La diferencia entre Int y Fix es que si el número
es negativo, Int devuelve el primer entero negativo menor o igual a número,
mientras que Fix devuelve el primer entero negativo mayor o igual a número.
Por ejemplo, Int convierte -8.4 en -9 y Fix convierte -8.4 a -8.
La función Fix(número) es equivalente a:
Sgn(número) * Int(Abs(número))
Ejemplo de las funciones Int y Fix
Este ejemplo muestra cómo las funciones Int y Fix
devuelven la parte entera de los números. En el caso de que el argumento sea un
número negativo, la función Int devuelve el primer número entero
negativo menor o igual que el número; la función Fix devuelve el primer
entero negativo mayor o igual que el número.
Dim MiNúmero
MiNúmero = Int(99.8) ' Devuelve 99.
MiNúmero = Fix(99.2) ' Devuelve 99.
MiNúmero = Int(-99.8) ' Devuelve -100.
MiNúmero = Fix(-99.8) ' Devuelve -99.
MiNúmero = Int(-99.2) ' Devuelve -100.
MiNúmero = Fix(-99.2) ' Devuelve -99.
Devuelve un tipo
Variant (
String) que
contiene una
expresión formateada de
acuerdo a las instrucciones contenidas en una expresión de formato.
Sintaxis
Format(expresión[,
formato[, primerdíadesemana[, primerdíadeaño]]])
La sintaxis de la función Format consta de las
siguientes partes:
Parte
|
Descripción
|
expresión
|
Requerido. Cualquier expresión
válida.
|
formato
|
Opcional. Una expresión de
formato definida por el usuario o con nombre válida.
|
primerdíadesemana
|
Opcional. Una constante que especifica el primer día
de la semana.
|
primerdíadeaño
|
Opcional. Una constante que
especifica la primera semana del año.
|
Valores
El
argumento primerdíadesemana
tiene estos valores:
Constante
|
Valor
|
Descripción
|
vbUseSystem
|
0
|
Utiliza el valor de API NLS.
|
vbSunday
|
1
|
Domingo (predeterminado)
|
vbMonday
|
2
|
Lunes
|
vbTuesday
|
3
|
Martes
|
vbWednesday
|
4
|
Miércoles
|
vbThursday
|
5
|
Jueves
|
vbFriday
|
6
|
Viernes
|
vbSaturday
|
7
|
Sábado
|
El argumento primerdíadeaño tiene estos valores:
Constante
|
Valor
|
Descripción
|
vbUseSystem
|
0
|
Utiliza el valor de API NLS.
|
vbFirstJan1
|
1
|
Comienza con la semana donde
está el 1 de enero (predeterminado).
|
vbFirstFourDays
|
2
|
Comienza con la primera semana
del año que tenga cuatro días como mínimo.
|
vbFirstFullWeek
|
3
|
Comienza con la primera semana
completa del año.
|
Comentarios
Para dar formato
|
Haga esto
|
Números
|
Utilice formatos numéricos con
nombre predefinidos o cree formatos numéricos definidos por el usuario.
|
Fechas y horas
|
Utilice formatos de fecha/hora
con nombre predefinidos o cree formatos de fecha/hora definidos por el
usuario.
|
Números seriales de fecha y hora
|
Utilice formatos de fecha y hora
o formatos numéricos.
|
Cadenas
|
Cree sus propios formatos de
cadena definidos por el usuario.
|
Si intenta dar formato a un número sin especificar formato,
Format proporciona una funcionalidad similar a la de la función Str.
Sin embargo, los números positivos a los que se les ha dado formato de cadena
de caracteres mediante Format carecen del espacio inicial reservado para
mostrar el signo del valor, mientras que los convertidos utilizando Str
conservan el espacio inicial.
Si está dando formato a una cadena numérica no localizada,
debería usar un formato numérico definido por el usuario para asegurarse de que
obtiene la apariencia que desa.
Nota Si
la configuración de la propiedad Calendar es gregoriano y formato
especifica dar formato a la fecha, la expresión proporcionada debe ser
gregoriana. Si la configuración de la propiedad Calendar de Visual Basic
es Hijri, la expresión proporcionada debe ser Hijri.
Si el calendario es gregoriano, el significado de los simbolos
de la expresión formato no cambia. Si el calendario es Hijri, todos los
símbolos de formato de fecha (por ejemplo, dddd, mmmm, yyyy)
ytienen el mismo significado pero se aplica al calendario Hijri. Los símbolos
de formato permanecen en inglés, los símbolos que se muestran como texto (por
ejemplo, AM y PM) muestran la cadena (inglés o árabe) asociada con ese símbolo.
El intervalo de ciertos símbolos cambia cuando el calendario es Hijri.
Símbolo
|
Intervalo
|
d
|
1-30
|
dd
|
1-30
|
ww
|
1-51
|
mmm
|
Muestra nombres de mes enteros
(los nombres de mes Hijri no tienen abreviaturas).
|
y
|
1-355
|
yyyy
|
100-9666
|
Ejemplo de la función Format
En este ejemplo se muestran varios usos de la función Format
para dar formato a valores utilizando formatos definidos por el usuario y
formatos con nombre. La verdadera salida formateada presentada por el sistema
para el separador de fecha (/), de hora (:) y el literal AM/ PM depende de las
configuraciones en ese momento. Cuando las horas y las fechas se vuelven a
listar en el entorno de desarrollo, se utilizan los formatos abreviados de hora
y de fecha de la configuración regional del código. Cuando son presentados por
el código en ejecución, se utilizan los formatos abreviados de fecha y hora de
la configuración regional del sistema, los cuales pueden diferir de la
configuración regional del código. En este ejemplo se asume que es
Inglés/Estados Unidos.
MiHora y MiFecha se presentan en el entorno de
desarrollo utilizando configuraciones actuales de fecha corta y hora corta.
Dim MiHora, MiFecha, MiCadena
MiHora = #17:04:23#
MiFecha = #27 enero 1993#
' Devuelve la hora actual del sistema en el formato largo de hora definido por el sistema.
MiCadena = Format(Time, "Long Time")
' Devuelve la fecha actual del sistema en el formato largo de fecha definido por el sistema.
MiCadena = Format(Date, "Long Date")
MiCadena = Format(MiHora, "h:m:s") ' Devuelve "17:4:23".
MiCadena = Format(MiHora, "hh:mm:ss AMPM") ' Devuelve "05:04:23 PM".
MiCadena = Format(MiFecha, "dddd, d mmm aaaa")' Devuelve "Miércoles,
' 27 de Ene de 1993".
' Si no se suministra el formato, devuelve una cadena.
MiCadena = Format(23) ' Devuelve "23".
' Formatos definidos por el usuario.
MiCadena = Format(5459.4, "##,##0.00") ' Devuelve "5.459,40".
MiCadena = Format(334.9, "###0.00") ' Devuelve "334,90".
MiCadena = Format(5, "0.00%") ' Devuelve "500,00%".
MiCadena = Format("HOLA", "<") ' Devuelve "hola".
MiCadena = Format("Esto es", ">") ' Devuelve "ESTO ES".
Devuelve un tipo
Double
que indica el valor futuro de una anualidad basándose en pagos periódicos y
constantes y un tipo de interés también constante.
Sintaxis
FV(rate, nper, pmt[,
pv[, type]])
Parte
|
Descripción
|
rate
|
Requerido. Un tipo Double
que indica el tipo de interés por periodo. Por ejemplo, si obtiene un crédito
para un automóvil a un porcentaje anual (TPA) del 10 por ciento y realiza
pagos mensuales, el tipo por periodo será 0,1/12 ó 0,0083.
|
nper
|
Requerido. Un tipo Integer que indica el número total de
periodos de pago de la anualidad. Por ejemplo, si realiza pagos mensuales
correspondientes a un crédito para adquirir un automóvil a cuatro años, el
crédito tendrá un total de 4 * 12 (ó 48) periodos de pago.
|
pmt
|
Requerido. Un tipo Double
que indica el pago que hay que realizar cada periodo. Normalmente, los pagos
contienen un nominal y un interés que no varía a lo largo de la vida de la
anualidad.
|
pv
|
Opcional. Un tipo Variant que indica el valor actual (o
suma global) que tiene en este momento una serie de pagos para realizar en el
futuro. Por ejemplo, en el momento de obtener un crédito para comprar un
automóvil, el importe del mismo es el valor actual para el prestamista de los
pagos mensuales a realizar. Si se omite, se asume el valor 0.
|
type
|
Opcional. Un tipo Variant
que indica el momento en que vencen los pagos. Utilice 0 si los pagos vencen
al final del periodo o 1 si los pagos vencen al principio del mismo. Si se
omite, se asume el valor 0.
|
Comentarios
Una anualidad es una serie de pagos constantes en efectivo
realizados a lo largo de un periodo de tiempo. Una anualidad puede ser un
préstamo (como por ejemplo la hipoteca de un inmueble) o una inversión (como un
plan de ahorro mensual).
Los
argumentos rate
y
nper deben calcularse utilizando periodos de pago expresados en
las mismas unidades. Por ejemplo, si
rate se calcula en meses,
nper
también debe calcularse en meses.
Para todos los argumentos, el efectivo abonado (como
depósitos de ahorro) se representa con números negativos y el recibido (como
cheques de dividendos) con números positivos.
Ejemplo de la función FV
En este ejemplo se utiliza la función FV para obtener el
valor futuro de una inversión, dado el tipo de interés acumulado en cada
período (APR / 12), el
número total de pagos (TotPagos),
el pago (Pago), el valor
actual de la inversión (ValAct),
y un número que indica si el pago se realiza el principio o al final del
período de pago (TipoPago).
Observe que al representar Pago
efectivo abonado, es un número negativo.
Dim Fmt, Pago, APR, TotPmts, Tipopago, PVal, FVal
Const PERIODFIN = 0, PERIODINI = 1 ' Momento de los pagos.
Fmt = "###,###,##0.00" ' Define el formato.
Pago = InputBox("¿Cuánto piensa ahorrar cada mes?")
APR = InputBox("Indique el tipo de interés porcentual anual esperado.")
If APR > 1 Then APR = APR / 100 ' Asegura la forma correcta.
TotPmts = InputBox("¿Durante cuántos meses piensa ahorrar?")
Tipopago = MsgBox("Realiza los pagos al final del mes?", vbYesNo)
If Tipopago = vbNo Then Tipopago = PERIODINI Else Tipopago = PERIODFIN
PVal = InputBox("Cuál es el saldo actual de esta cuenta de ahorro?")
FVal = FV(APR / 12, TotPmts, -Pago, -PVal, Tipopago)
MsgBox "El importe de sus ahorros será " & Format(FVal, Fmt) & "."
Devuelve uno de entre dos valores, dependiendo de la
evaluación de una
expresión.
Sintaxis
IIf(expr, truepart,
falsepart)
Parte
|
Descripción
|
expr
|
Requerido. Expresión que se
desea evaluar.
|
truepart
|
Requerido. Valor o expresión
devuelta si expr es True.
|
falsepart
|
Requerido. Valor o expresión
devuelta si expr es False.
|
Comentarios
IIf siempre evalúa truepart
y falsepart, aunque sólo vaya a devolver una de ellas. Por esta
razón, deberá vigilar que no se produzcan efectos no deseados. Por ejemplo, si
al evaluar falsepart se produce un error de división por cero, se
generará un error aunque expr sea True.
Ejemplo de la función IIf
Este ejemplo utiliza la función IIf para calcular el
parámetro Prueba del
procedimiento Comprobar y
devuelve la palabra "Grande" si la cantidad es mayor que 1000; de lo
contrario, devuelve la palabra "Pequeño".
Function Comprobar (Prueba As Integer)
Comprobar = IIf(Prueba > 1000, "Grande", "Pequeño")
End Function
Muestra un mensaje en un cuadro de diálogo, espera que el
usuario escriba un texto o haga clic en un botón y devuelve un tipo
String con el contenido del cuadro de
texto.
Sintaxis
InputBox(prompt[, title][,
default][, xpos][, ypos][, helpfile,
context])
Parte
|
Descripción
|
prompt
|
Requerido. Expresión de cadena que se muestra como
mensaje en el cuadro de diálogo. La longitud máxima de prompt
es de aproximadamente 1024 caracteres, según el ancho de los caracteres
utilizados. Si prompt consta de más de una línea, puede
separarlos utilizando un carácter de retorno de carro ( Chr(13 )),
un carácter de avance de línea ( Chr(10 )) o una combinación de
los caracteres de retorno de carro-avance de línea ( Chr(13 ) y
Chr(10 )) entre cada línea y la siguiente.
|
title
|
Opcional. Expresión de cadena
que se muestra en la barra de título del cuadro de diálogo. Si omite title,
en la barra de título se coloca el nombre de la aplicación.
|
default
|
Opcional. Expresión de cadena
que se muestra en el cuadro de texto como respuesta predeterminada cuando no
se suministra una cadena. Si omite default, se muestra el
cuadro de texto vacío.
|
xpos
|
Opcional. Expresión numérica que especifica, en
twips, la distancia en sentido horizontal entre el borde izquierdo del cuadro
de diálogo y el borde izquierdo de la pantalla. Si se omite xpos,
el cuadro de diálogo se centra horizontalmente.
|
ypos
|
Opcional. Expresión numérica que
especifica, en twips, la distancia en sentido vertical entre el borde
superior del cuadro de diálogo y el borde superior de la pantalla. Si se
omite ypos, el cuadro de diálogo se coloca a aproximadamente un
tercio de la altura de la pantalla, desde el borde superior de la misma.
|
helpfile
|
Opcional. Expresión de cadena
que identifica el archivo de Ayuda que se utilizará para proporcionar ayuda
interactiva para el cuadro de diálogo. Si se especifica helpfile,
también deberá especificarse context.
|
context
|
Opcional. Expresión numérica que
es el número de contexto de Ayuda asignado por el autor al tema de Ayuda correspondiente.
Si se especifica context, también deberá especificarse helpfile.
|
Comentarios
Cuando se especifica tanto
helpfile como
context,
el usuario puede presionar F1 (Windows) o Ayuda (Macintosh) para ver el tema de
Ayuda correspondiente a
context. Algunas
aplicaciones host, por ejemplo, Microsoft
Excel, también agregar automáticamente un botón
Ayuda al cuadro de diálogo.
Si el usuario hace clic en
Aceptar o presiona Entrar , la función
InputBox devuelve lo que haya en el cuadro de texto. Si el usuario hace clic en
Cancelar, la función devuelve una cadena de caracteres de longitud cero
("").
Nota Si
desea especificar más que el primer argumento con nombre, debe utilizar
InputBox
en una
expresión. Si desea omitir
algunos
argumentos de posición, debe
incluir el delimitador de coma correspondiente.
Ejemplo de la función InputBox
En este ejemplo se muestran distintas maneras de utilizar la función
InputBox para indicar al usuario que debe introducir un valor. Si se
omiten las posiciones x e y, el diálogo se centra automáticamente según los
ejes respectivos. La variable MyValue
contiene el valor introducido por el usuario, si éste hace clic sobre Aceptar
o presiona ENTER. Si el usuario hace clic sobre Cancelar, se devuelve
una cadena de caracteres de longitud cero.
Dim Mensaje, Título, ValorPred, MiValor
Mensaje = " Introduzca un número del 1 a 3" ' Establece el mensaje.
Título = "Demostración de InputBox" ' Establece el título.
ValorPred = "1" ' Establece el valor predeterminado.
' Muestra el mensaje, el título, y el valor predeterminado.
MiValor = InputBox(Mensaje, Título, ValorPred)
' Muestra el mensaje, el título y el valor predeterminado.
MiValor = InputBox(Mensaje, Título, , , , "DEMO.HLP", 10)
' Se muestra el diálogo en la posición 100, 100.
MiValor = InputBox(Mensaje, Título, ValorPred, 100, 100)
Devuelve un tipo Variant (Long) que
especifica la posición de la primera aparición de una cadena en otra.
Sintaxis
InStr([start,
]string1, string2[, compare])
La sintaxis de la función
InStr tiene estos
argumentos:
Parte
|
Descripción
|
start
|
Opcional. Expresión numérica que establece la
posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la
posición del primer carácter. Si inicio contiene un valor Null, se produce un error. El argumento
inicio se requiere si se especifica compare.
|
string1
|
|
string2
|
Requerido. Expresión de cadena
buscada.
|
compare
|
Opcional. Especifica el tipo de comparación de cadena. Si compare
es Null, ocurre un error. Si se omite compare, el valor Option
Compare determina el tipo de comparación. Especifica un LCID
(LocaleID) válido para usar reglas específicas de configuración regional en
la comparación.
|
Valores
Los valores del argumento compare son:
Constante
|
Valor
|
Descripción
|
vbUseCompareOption
|
-1
|
Realiza una comparación con los
valores de la instrucción Option Compare.
|
vbBinaryCompare
|
0
|
Realiza una comparación binaria.
|
vbTextCompare
|
1
|
Realiza una comparación textual.
|
vbDatabaseCompare
|
2
|
Sólo para Microsoft Access.
Realiza una comparación basada en la información en las bases de datos.
|
Valores devueltos
Si
|
La función InStr devuelve
|
string1 es de longitud cero
|
0
|
string1 es Null
|
Null
|
string2 es de longitud cero
|
start
|
string2 es Null
|
Null
|
string2 no se encontró
|
0
|
string2 se encontró dentro de string1
|
Posición en la que se halla la
coincidencia
|
start > string2
|
0
|
Ejemplo de la función InStr
En este ejemplo se utiliza la función InStr para devolver la
posición de la primera ocurrencia de una cadena en otra.
Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' Cadena en la que se busca.
SearchChar = "P" ' Se busca "P".
' Una comparación textual que comienza en la posición 4. Devuelve 6.
MyPos = Instr(4, SearchString, SearchChar, 1)
' Una comparación binaria que comienza en la posición 1. Devuelve 9.
MyPos = Instr(1, SearchString, SearchChar, 0)
' La comparación es binaria por configuración predeterminada (si se omite el último argumento).
MyPos = Instr(SearchString, SearchChar) ' Devuelve 9.
MyPos = Instr(1, SearchString, "W") ' Devuelve 0.
Int, Fix (Funciones)
Devuelve la parte entera de un número.
Sintaxis
Int(número)
Fix(número)
Comentarios
Las funciones Int y Fix eliminan la fracción de un número
y devuelven el valor entero resultante.
La diferencia entre Int y Fix es que si el número
es negativo, Int devuelve el primer entero negativo menor o igual a número,
mientras que Fix devuelve el primer entero negativo mayor o igual a número.
Por ejemplo, Int convierte -8.4 en -9 y Fix convierte -8.4 a -8.
La función Fix(número) es equivalente a:
Sgn(número) * Int(Abs(número))
Ejemplo de las funciones Int y Fix
Este ejemplo muestra cómo las funciones Int y Fix
devuelven la parte entera de los números. En el caso de que el argumento sea un
número negativo, la función Int devuelve el primer número entero
negativo menor o igual que el número; la función Fix devuelve el primer
entero negativo mayor o igual que el número.
Dim MiNúmero
MiNúmero = Int(99.8) ' Devuelve 99.
MiNúmero = Fix(99.2) ' Devuelve 99.
MiNúmero = Int(-99.8) ' Devuelve -100.
MiNúmero = Fix(-99.8) ' Devuelve -99.
MiNúmero = Int(-99.2) ' Devuelve -100.
MiNúmero = Fix(-99.2) ' Devuelve -99.
Devuelve un tipo
Double
que indica el pago de intereses durante un periodo determinado de una anualidad
basándose en pagos constantes y periódicos y un tipo de interés también
constante.
Sintaxis
IPmt(rate, per, nper,
pv[, fv[, type]])
Parte
|
Descripción
|
rate
|
Requerido. Un tipo Double
que indica el tipo de interés por periodo. Por ejemplo, si obtiene un crédito
para un automóvil a una tasa porcentual anual (TPA) del 10 por ciento y
realiza pagos mensuales, el tipo por periodo será 0,1/12 ó 0,0083.
|
per
|
Requerido. Un tipo Double
que indica el periodo de pago, entre 1 y nper.
|
nper
|
Requerido. Un tipo Double
que indica el número total de periodos de pago de la anualidad. Por ejemplo,
si realiza pagos mensuales correspondientes a un crédito para adquirir un
automóvil a cuatro años, el crédito tendrá un total de 4 * 12 (ó 48) periodos
de pago.
|
pv
|
Requerido. Un tipo Double
que indica el valor actual, o valor de hoy, de una serie de pagos o cobros
futuros. Por ejemplo, en el momento de obtener un crédito para comprar un
automóvil, el importe del mismo es el valor actual para el prestamista de los
pagos mensuales a realizar.
|
fv
|
Opcional. Un tipo Variant que indica el valor futuro o
balance en efectivo que se desea tener una vez realizado el pago final. Por
ejemplo, el valor futuro de un crédito es 0, puesto que tal es su valor
después del pago final. Sin embargo, si desea ahorrar 5.000.000 para la
educación de su hijo durante 18 años, el valor futuro será 5.000.000. Si se
omite, se asume el valor 0.
|
type
|
Opcional. Un tipo Variant
que indica el momento en que vencen los pagos. Utilice 0 si los pagos vencen
al final del periodo o 1 si los pagos vencen al principio del mismo. Si se
omite, se asume el valor 0.
|
Comentarios
Una anualidad es una serie de pagos constantes en efectivo
realizados a lo largo de un periodo de tiempo. Una anualidad puede ser un
préstamo (como por ejemplo la hipoteca de un inmueble) o una inversión (como un
plan de ahorro mensual).
Los
argumentos rate
y
nper deben calcularse utilizando periodos de pago expresados en
las mismas unidades. Por ejemplo, si
rate se calcula en meses,
nper
también debe calcularse en meses.
Para todos los argumentos, el efectivo abonado (como
depósitos de ahorro) se representa con números negativos y el recibido (como
cheques de dividendos) con números positivos.
Ejemplo de la función IPmt
En este ejemplo se utiliza la función IPmt para calcular la
parte de un pago correspondiente al interés cuando todos los pagos son de igual
valor. Se dan el tipo de interés porcentual por período (APR / 12), el período de pago para el
cual se desea determinar la parte correspondiente al interés (Periodo), el número total de pagos (TotPagos), el valor actual o nominal del
crédito (ValAct), el valor
futuro del crédito (ValFut),
y un número que indica si los pagos vencen al comienzo o al final de cada
período de pago (TipoPago).
Dim FVal, Fmt, PVal, APR, TotPmts, Tipopago, Period, IntPmt, TotInt, Msg
Const PERIODFIN = 0, PERIODINI = 1 ' Momento de los pagos.
FVal = 0 ' Normalmente 0 (crédito).
Fmt = "###,###,##0.00" ' Define el formato.
PVal = InputBox("¿Cuánto dinero desea solicitar?")
APR = InputBox("¿Cuál es la tasa anual porcentual del crédito?")
If APR > 1 Then APR = APR / 100 ' Asegura la forma correcta.
TotPmts = InputBox("Número de pagos mensuales")
Tipopago = MsgBox("¿Realiza los pagos al final de cada mes?", vbYesNo)
If Tipopago = vbNo Then Tipopago = PERIODINI Else Tipopago = PERIODFIN
For Period = 1 To TotPmts ' Interés total.
IntPmt = IPmt(APR / 12, Period, TotPmts, -PVal, FVal, Tipopago)
TotInt = TotInt + IntPmt
Next Period
Msg = "Pagará un total de " & Format(TotInt, Fmt)
Msg = Msg & "de intereses por este crédito."
MsgBox Msg ' Muestra el resultado.
Devuelve un tipo
Double
que indica la tasa interna de retorno de una serie de flujos de efectivo
periódicos (pagos y cobros).
Sintaxis
IRR(values()[, guess])
Parte
|
Descripción
|
values()
|
Requerido. Matriz de tipo Double que indica
valores de flujo de efectivo. La matriz debe contener al menos un valor
negativo (un pago) y uno positivo (un cobro).
|
Guess
|
Opcional. Un tipo Variant que indica un valor que se
estima que devolverá IRR. Si se omite, guess será 0,1
(10 por ciento).
|
Comentarios
La tasa interna de retorno es el tipo de interés recibido
por una inversión consistente en pagos y cobros que se producen a intervalos
periódicos.
La función IRR utiliza el orden de los valores de la
matriz para interpretar el orden de los pagos y cobros. Asegúrese de indicar
los valores de los pagos y cobros siguiendo la secuencia correcta. No es necesario
que el flujo de efectivo en cada periodo sea constante, como sería en el caso
de una anualidad.
IRR se calcula por
iteración. Comenzando con el valor de guess, IRR realiza
un cálculo cíclico hasta que el resultado tiene una precisión del 0,00001 por
ciento. Si después de 20 intentos no puede encontrar un resultado, IRR
falla.
Ejemplo de la función IRR
En este ejemplo, la función IRR devuelve la tasa interna de
retorno para una serie de 5 flujos de efectivo contenidos en la matriz Valor().El primer elemento de la matriz
es un flujo negativo de efectivo que representa los costes iniciales de un
negocio. Los otros 4 flujos son positivos, y representan los 4 años siguientes.
Guess es la tasa interna de
retorno estimada.
Dim Guess, Fmt, RetRate, Msg
Static Valores(5) As Double ' Define la matriz.
Guess = .1 ' Guess comienza con el 10%.
Fmt = "#0.00" ' Formato de porcentaje.
Valores(0) = -70000 ' Costes iniciales del negocio.
' Flujos positivos representando ingresos en cuatro años siguientes.
Valores(1) = 22000 : Valores(2) = 25000
Valores(3) = 28000 : Valores(4) = 31000
RetRate = IRR(Valores(), Guess) * 100 ' Calcula la tasa interna.
Msg = "La tasa interna de retorno para estos cinco flujos de efectivo es "
Msg = Msg & Format(RetRate, Fmt) & " por ciento."
MsgBox Msg ' Muestra la tasa interna de retorno.
IsDate (Función)
Devuelve un valor de tipo
Boolean que indica si una
expresión se puede convertir en una
fecha.
Sintaxis
IsDate(expresión)
Comentarios
La función IsDate devuelve True si la expresión es una
fecha o se puede reconocer como una fecha válida; en caso contrario, devuelve False.
En Microsoft Windows, el intervalo de fechas válidas va desde el 1 de enero de
100 D. de C. hasta el 31 de diciembre de 9999 D.de C.; los intervalos varían de
un sistema operativo a otro.
Ejemplo de la función IsDate
En este ejemplo se utiliza la función IsDate para determinar
si una expresión puede convertirse en fecha.
Dim MiFecha, TuFecha, SinFecha, MiPrueba
MiFecha = "12 febrero 1969": TuFecha = #2/12/69#: SinFecha = "Hola"
MiPrueba = IsDate(MiFecha) ' Devuelve True.
MiPrueba = IsDate(TuFecha) ' Devuelve True.
MiPrueba = IsDate(SinFecha) ' Devuelve False.
IsEmpty (Función)
Devuelve un valor de tipo
Boolean que indica si una
variable ha sido inicializada.
Sintaxis
IsEmpty(expresión)
El
argumento expresión
requerido es un tipo de datos
Variant
que contiene una
expresión de cadena o
una
expresión numérica. Sin embargo,
ya que la función
IsEmpty se utiliza para determinar si las variables
individuales están inicializadas, el argumento
expresión es generalmente
un único nombre de variable.
Comentarios
La función
IsEmpty devuelve
True si la variable no
está inicializada o está explicítamente configurada a
Empty; en cualquier otro caso, devuelve
False.
Se devuelve
False siempre que
expresión contenga más de una
variable. La función
IsEmpty solamente devuelve información
significativa para datos de tipo
Variant.
Ejemplo de la función IsEmpty
En este ejemplo se utiliza la función IsEmpty para determinar
si se ha inicializado o no una variable.
Dim MiVar, MiPrueba
MiPrueba = IsEmpty(MiVar) ' Devuelve True.
MiVar = Null ' Asigna Null.
MiPrueba = IsEmpty(MiVar) ' Devuelve False.
MiVar = Empty ' Asigna Empty.
MiPrueba = IsEmpty(MiVar) ' Devuelve True.
IsNull (Función)
Devuelve un valor de tipo
Boolean que indica si una
expresión contiene datos no válidos (
Null).
Sintaxis
IsNull(expresión)
Comentarios
La función
IsNull devuelve
True si
expresión es
Null; en cualquier otro caso,
IsNull devuelve
False. Si
expresión
está formada por más de una
variable,
la presencia de
Null en cualquier variable hace que se devuelva
True
para toda la expresión.
El valor
Null indica que
Variant contiene datos no
válidos. La función
Null no es la misma que la función
Empty, la cual indica que una variable
todavía no ha sido inicializada. Tampoco es lo mismo que una cadena de longitud
cero (""), que a veces se suele llamar cadena nula.
Importante Utilice la función IsNull
para determinar si una expresión contiene un valor Null. Las expresiones
que espera evaluar como True en ciertas circunstancias, tales como If Var = Null AND If Var <> Null, son siempre False.
Esto se debe a que cualquier expresión que contiene un Null es por si
misma de valor Null y por consiguiente False.
Ejemplo de la función IsNull
En este ejemplo se utiliza la función IsNull para determinar
si una variable contiene Null.
Dim MiVar, MiPrueba
MiPrueba = IsNull(MiVar) ' Devuelve False.
MiVar = ""
MiPrueba = IsNull(MiVar) ' Devuelve False.
MiVar = Null
MiPrueba = IsNull(MiVar) ' Devuelve True.
IsNumeric (Función)
Devuelve un valor de tipo
Boolean que indica si una
expresión se puede evaluar como un
número.
Sintaxis
IsNumeric(expresión)
Comentarios
La función IsNumeric devuelve True si la expresión
completa se reconoce como un número; en otro caso, devuelve False.
Ejemplo de la función IsNumeric
En este ejemplo se utiliza la función IsNumeric para
determinar si una variable se puede evaluar como un número.
Dim MiVar, MiPrueba
MiVar = "53" ' Asigna un valor.
MiPrueba = IsNumeric(MiVar) ' Devuelve True.
MiVar = "459.95" ' Asigna valor.
MiPrueba = IsNumeric(MiVar) ' Devuelve True.
MiVar = "45 Help" ' Asigna valor.
MiPrueba = IsNumeric(MiVar) ' Devuelve False.
LCase (Función)
Devuelve un tipo
String que
se ha convertido a minúsculas.
Sintaxis
LCase(cadena)
Comentarios
Sólo se convierten a minúsculas las letras mayúsculas. Las letras
minúsculas o los caracteres que no son letras no sufren cambios.
Ejemplo de la función LCase
En este ejemplo se utiliza la función LCase para devolver la
versión en minúsculas de una cadena.
Dim UpperCase, LowerCase
Uppercase = "Hola Mundo 1234" ' Cadena a convertir.
Lowercase = Lcase(UpperCase) ' Devuelve "hola mundo 1234".
Devuelve un tipo Variant (String) que
contiene un número especificado de caracteres del lado izquierdo de una cadena.
Sintaxis
Left(string,
length)
Parte
|
Descripción
|
string
|
Requerido. Expresión de cadena de la cual se
devuelven los caracteres que están más a la izquierda. Si string
contiene Null, se devuelve Null.
|
length
|
Requerido, un tipo Variant
( Long). Expresión numérica
que indica cuántos caracteres se van a devolver. Si es 0, devuelve una cadena
de longitud cero (""). Si es mayor o igual al número de caracteres
en string, se devuelve la cadena entera.
|
Ejemplo de la función Left
En este ejemplo se utiliza la función Left para devolver un
número especificado de caracteres del lado izquierdo de una cadena.
Dim UnaCadena, MiCadena
UnaCadena = "Hola Mundo" ' Define la cadena.
MiCadena = Left(UnaCadena, 1) ' Devuelve "H".
MiCadena = Left(UnaCadena, 6) ' Devuelve "Hola M".
MiCadena = Left(UnaCadena, 10) ' Devuelve "Hola Mundo".
Devuelve un tipo
Long
que contiene el número de caracteres en una cadena o el número de bytes
necesarios para almacenar una
variable.
Sintaxis
Len(cadena | nombrevar)
La sintaxis de la función Len consta de las
siguientes partes:
Parte
|
Descripción
|
cadena
|
|
Nombrevar
|
Cualquier nombre de variable válido. Si nombrevar
contiene Null, se devuelve Null. Si nombrevar es un tipo
Variant, Len actúa igual que
con un tipo String y siempre devuelve el número de caracteres que
contiene.
|
Ejemplo de la función Len
MiCadena = "Hola a todos" ' Inicializa la cadenas.
MiLong = Len(MiCadena) ' Devuelve 12.
LTrim, Rtrim y Trim (Funciones)
Devuelve un tipo Variant (String) que contiene una
copia de una cadena determinada sin espacios a la izquierda (LTrim), sin
espacios a la derecha (RTrim) o sin espacios ni a la derecha ni a la
izquierda (Trim).
Sintaxis
LTrim(cadena)
RTrim(cadena)
Trim(cadena)
Ejemplo de las funciones LTrim, RTrim y Trim
En este ejemplo se utilizan las funciones LTrim and RTrim
para eliminar espacios a la derecha y a la izquierda de una variable de cadena
de caracteres. El uso de la función Trim logra el mismo resultado.
Dim MiCadena, CadenaCorte
MiCadena = " <-Cortar-> " ' Inicializa la cadena.
CadenaCorte = LTrim(MiCadena) ' CadenaCorte = "<-Cortar-> ".
CadenaCorte = RTrim(MiCadena) ' CadenaCorte = " <-Cortar->".
CadenaCorte = LTrim(RTrim(MiCadena)) ' CadenaCorte = "<-Cortar->".
' El uso de la función Trim por sí sola logra el mismo resultado.
CadenaCorte = Trim(MiCadena) ' CadenaCorte = "<-Cortar->".
Devuelve un tipo Variant (String) que
contiene un número especificado de caracteres de una cadena.
Sintaxis
Mid(string, start[,
length])
Parte
|
Descripción
|
string
|
|
start
|
Requerido; un tipo Long. Posición de carácter en string
en la cual comienza la parte que se quiere tomar. Si start es
mayor que el número de caracteres en la string, Mid
devuelve una cadena de longitud cero ("").
|
length
|
Requerido; un tipo Variant
(Long). Número de caracteres que se van a devolver. Si se omite o en
el texto hay menos de length caracteres (incluyendo el carácter
de start), se devuelven todos los caracteres desde la posición
de start hasta el final de la cadena.
|
Comentarios
Para determinar el número de caracteres en string,
utilice la función Len.
Ejemplo de la función Mid
En este ejemplo se utiliza la función Mid para devolver un
número especificado de caracteres de una cadena.
Dim MiCadena, PrimeraPalabra, UltimaPalabra, PalabraMedia
MiCadena = "Demostración función Mid" ' Crea la cadena de texto.
PrimeraPalabra = Mid(MiCadena, 1, 12) ' Devuelve "Demostración".
UltimaPalabra = Mid(MiCadena, 21, 3) ' Devuelve "Mid".
PalabraMedia = Mid(MiCadena, 14) ' Devuelve "función Mid".
Este segundo ejemplo utiliza MidB y una función definida por
el usuario (MidMbcs) para devolver también caracteres de una cadena. La
diferencia en este ejemplo es que la cadena de entrada es ANSI y la longitud en
bytes.
Function MidMbcs(ByVal str as String, start, length)
MidMbcs = StrConv(MidB(StrConv(str, vbFromUnicode), start, length), vbUnicode)
End Function
Dim MiCadena
MiCadena = "AbCdEfG"
' Donde "A", "C", "E", y "G" son DBCS y "b", "d",
' y "f" son SBCS.
MiNuevaCadena = Mid(MiCadena, 3, 4)
' Devuelve ""CdEf"
MiNuevaCadena = MidB(MiCadena, 3, 4)
' Devuelve ""bC"
MiNuevaCadena = MidMbcs(MiCadena, 3, 4)
' Devuelve "bCd"
Minute (Función)
Devuelve un valor de tipo Variant (Integer) que
especifica un número entero entre 0 y 59, inclusive, que representa el minuto
de la hora.
Sintaxis
Minute(hora)
Ejemplo de la función Minute
En este ejemplo se utiliza la función Minute para obtener los
minutos de una hora especificada. En el entorno de desarrollo, el literal de
hora se presentará en formato abreviado, utilizando la configuración regional
del código.
Dim MiTiempo, MiMinuto
MiTiempo = #4:35:17 PM# ' Asigna una hora.
MiMinuto = Minute(MiTiempo) ' MiMinuto contiene 35.
Month (Función)
Devuelve un valor de tipo Variant (Integer) que
especifica un número entero entre 1 y 12, inclusive, que representa el mes del
año.
Sintaxis
Month(fecha)
Ejemplo de la función Month
En este ejemplo se utiliza la función Month para obtener el
mes de una fecha especificada. En el entorno de desarrollo, la hora(literal de
fecha), se presentará en formato abreviado, utilizando la configuración
regional del código.
Dim MiFecha, MiMes
MiFecha = #12 febrero 1969# ' Asigna una fecha.
MiMes = Month(MiFecha) ' MiMes contiene 2.
Descripción
Devuelve una cadena que indica el mes especificado.
Sintaxis
MonthName(mes [, abreviar])
La sintaxis de la función MonthName consta de las
siguientes partes:
Parte
|
Descripción
|
mes
|
Requerido. La designación
numérica del mes. Por ejemplo, enero es 1, febrero es 2, etcétera.
|
abreviar
|
Opcional. El valor Boolean
que indica si se va a abreviar el nombre del mes. Si se omite, el valor
predeterminado es False, que significa que el nombre del mes no se
abrevia.
|
Mes=MonthName(Month(Now)) .’Mes=Diciembre (si hoy es navidad)
Mes=MonthName(Month(#7/28/2004#)) ‘Mes=Julio
Muestra un mensaje en un cuadro de diálogo, espera a que el
usuario haga clic en un botón y devuelve un tipo Integer correspondiente
al botón elegido por el usuario.
Sintaxis
MsgBox(prompt[, buttons][,
title][, helpfile, context])
Parte
|
Descripción
|
prompt
|
Requerido. Expresión de cadena que representa el prompt
en el cuadro de diálogo. La longitud máxima de prompt es de
aproximadamente 1024 caracteres, según el ancho de los caracteres utilizados.
Si prompt consta de más de una línea, puede separarlos
utilizando un carácter de retorno de carro ( Chr(13 )) o un
carácter de avance de línea ( Chr(10 )), o una combinación de
caracteres de retorno de carro – avance de línea ( Chr(13 ) y Chr(10 ))
entre cada línea y la siguiente.
|
buttons
|
Opcional. Expresión numérica que corresponde a la
suma de los valores que especifican el número y el tipo de los botones que se
pretenden mostrar, el estilo de icono que se va a utilizar, la identidad del
botón predeterminado y la modalidad del cuadro de mensajes. Si se omite este
argumento, el valor predeterminado para buttons es 0.
|
title
|
Opcional. Expresión de cadena
que se muestra en la barra de título del cuadro de diálogo. Si se omite title,
en la barra de título se coloca el nombre de la aplicación.
|
helpfile
|
Opcional. Expresión de cadena
que identifica el archivo de Ayuda que se utiliza para proporcionar ayuda
interactiva en el cuadro de diálogo. Si se especifica helpfile,
también se debe especificar context.
|
context
|
Opcional. Expresión numérica que
es igual al número de contexto de Ayuda asignado por el autor al tema de
Ayuda correspondiente. Si se especifica context, también se
debe especificar helpfile.
|
Valores
Constante
|
Valor
|
Descripción
|
VbOKOnly
|
0
|
Muestra solamente el botón Aceptar.
|
VbOKCancel
|
1
|
Muestra los botones Aceptar
y Cancelar.
|
VbAbortRetryIgnore
|
2
|
Muestra los botones Anular,
Reintentar e Ignorar.
|
VbYesNoCancel
|
3
|
Muestra los botones Sí, No
y Cancelar.
|
VbYesNo
|
4
|
Muestra los botones Sí y No.
|
VbRetryCancel
|
5
|
Muestra los botones Reintentar
y Cancelar.
|
VbCritical
|
16
|
Muestra el icono de mensaje
crítico.
|
VbQuestion
|
32
|
Muestra el icono de pregunta
de advertencia.
|
VbExclamation
|
48
|
Muestra el icono de mensaje
de advertencia.
|
VbInformation
|
64
|
Muestra el icono de mensaje
de información.
|
VbDefaultButton1
|
0
|
El primer botón es el
predeterminado.
|
VbDefaultButton2
|
256
|
El segundo botón es el
predeterminado.
|
VbDefaultButton3
|
512
|
El tercer botón es el
predeterminado.
|
VbDefaultButton4
|
768
|
El cuarto botón es el
predeterminado.
|
VbApplicationModal
|
0
|
Aplicación modal; el usuario
debe responder al cuadro de mensajes antes de poder seguir trabajando en la
aplicación actual.
|
VbSystemModal
|
4096
|
Sistema modal; se suspenden
todas las aplicaciones hasta que el usuario responda al cuadro de mensajes.
|
VbMsgBoxHelpButton
|
16384
|
Agrega el botón Ayuda al cuadro
de mensaje.
|
VbMsgBoxSetForeground
|
65536
|
Especifica la ventana del cuadro
de mensaje como la ventana de primer plano.
|
VbMsgBoxRight
|
524288
|
El texto se alínea a la derecha.
|
VbMsgBoxRtlReading
|
1048576
|
Especifica que el texto debe
aparecer para ser leído de derecha a izquierda en sistemas hebreo y árabe.
|
El primer grupo de valores (0 a 5) describe el número y el
tipo de los botones mostrados en el cuadro de diálogo; el segundo grupo (16,
32, 48, 64) describe el estilo del icono, el tercer grupo (0, 256, 512)
determina el botón predeterminado y el cuarto grupo (0, 4096) determina la
modalidad del cuadro de mensajes. Cuando se suman números para obtener el valor
final del argumento buttons, se utiliza solamente un número de
cada grupo.
Nota Estas
constantes las especifica Visual Basic
for Applications. Por tanto, el nombre de las mismas puede utilizarse en
cualquier lugar del código en vez de sus valores reales.
Valores devueltos
Constante
|
Valor
|
Descripción
|
vbOK
|
1
|
Aceptar
|
vbCancel
|
2
|
Cancelar
|
vbAbort
|
3
|
Anular
|
vbRetry
|
4
|
Reintentar
|
vbIgnore
|
5
|
Ignorar
|
vbYes
|
6
|
Sí
|
vbNo
|
7
|
No
|
Comentarios
Cuando se proporcionan tanto
helpfile como
context,
el usuario puede presionar F1 (Windows) o Ayuda (Macintosh) para ver el tema de
Ayuda correspondiente al
context. Algunas
aplicaciones host, por ejemplo Microsoft
Excel, también agregan automáticamente un botón
Ayuda al cuadro de
diálogo.
Si el cuadro de diálogo cuenta con un botón Cancelar,
presionar la tecla ESC tendrá el mismo efecto que hacer clic en este botón. Si
el cuadro de diálogo contiene un botón Ayuda, se suministra ayuda
interactiva para ese cuadro de diálogo. Sin embargo, no se devuelve valor
alguno hasta que se hace clic en uno de estos botones.
Nota Si
desea especificar más que el primer argumento con nombre, debe utilizar
MsgBox
en una
expresión. Si desea omitir
algún
argumento de posición, debe
incluir el delimitador de coma correspondiente.
Ejemplo de la función MsgBox
En este ejemplo se utiliza la función MsgBox para mostrar un
mensaje de error crítico en un cuadro de diálogo con botones Sí y No. El botón
No se considera la respuesta predeterminada. El valor devuelto por la función MsgBox
depende del botón elegido por el usuario. En este ejemplo, se supone que DEMO.HLP es un archivo de Ayuda que
contiene un tema con un número de contexto igual a 1000.
Dim Mensaje, Estilo, Título, Ayuda, Ctxt, Respuesta, MiCadena
Mensaje = "¿Desea continuar?" ' Define el mensaje.
Estilo = vbYesNo + vbCritical + vbDefaultButton2 ' Define los botones.
Título = "Demostración de MsgBox" ' Define el título.
Ayuda = "DEMO.HLP" ' Define el archivo de ayuda.
Ctxt = 1000 ' Define el tema
' el contexto
' Muestra el mensaje.
Respuesta = MsgBox(Mensaje, Estilo, Título, Ayuda, Ctxt)
If Respuesta = vbYes Then ' El usuario eligió el botón Sí.
MiCadena = "Sí" ' Ejecuta una acción.
Else ' El usuario eligió el botón No.
MiCadena = "No" ' Ejecuta una acción.
End If
Now (Función)
Devuelve un valor de tipo Variant (Date) que
especifica la fecha y hora actuales de acuerdo con la configuración de la fecha
y la hora del sistema de su equipo.
Sintaxis
Now
Devuelve un tipo
Long
que representa el código de color RGB correspondiente al número de color
especificado.
Sintaxis
QBColor(color)
El
argumento
color es un número entero entre 0-15.
Valores
El argumento color toma los siguientes valores:
Número
|
Color
|
Número
|
Color
|
0
|
Negro
|
8
|
Gris
|
1
|
Azul
|
9
|
Azul claro
|
2
|
Verde
|
10
|
Verde claro
|
3
|
Aguamarina
|
11
|
Aguamarina claro
|
4
|
Rojo
|
12
|
Rojo claro
|
5
|
Fucsia
|
13
|
Fucsia claro
|
6
|
Amarillo
|
14
|
Amarillo claro
|
7
|
Blanco
|
15
|
Blanco brillante
|
Comentarios
El argumento color representa los valores de color
que utilizan otras versiones de Basic (como Microsoft Visual Basic para MS-DOS
y Basic Compiler). Comenzando por el byte menos significativo, el valor
devuelto especifica los valores de rojo, verde y azul necesarios para
establecer el color correspondiente en el sistema RGB que utiliza Visual Basic
para Aplicaciones.
Ejemplo de la función QBColor
Este ejemplo utiliza la función QBColor para cambiar la
propiedad BackColor del formulario transferido como MiFormulario al color indicado por CódigoColor. QBColor acepta
valores enteros entre 0 y 15.
Sub CambiarColorFondo (CódigoColor As Integer, MiFormulario As Form)
MiFormulario.BackColor = QBColor(CódigoColor)
End Sub
Replace (Función)
Descripción
Devuelve una cadena en la que se reemplazó una subcadena
especificada con otra subcadena un número especificado de veces.
Sintaxis
Replace(expresión, encontrar,
reemplazarCon [, inicio[, contar[, comparar]]])
Parte
|
Descripción
|
expresión
|
|
encontrar
|
Requerido. La subcadena que se
busca.
|
reemplazarCon
|
Requerido. La subcadena de
sustitución.
|
inicio
|
Opcional. La posición dentro de
la expresión donde se empezará a buscar la subcadena. Si se omite, se
supone que es 1.
|
contar
|
Opcional. El número de
sustituciones de subcadenas que se realizarán. Si se omite, el valor
predeterminado es –1, que significa que se hagan todas las sustituciones
posibles.
|
comparar
|
Opcional. El valor númerico que
indica la clase de comparación que se realizará cuando se evalúen las
subcadenas. Vea la sección Valores para consultar los valores posibles.
|
Devuelve un tipo Variant (String) que
contiene un número especificado de caracteres del lado derecho de una cadena.
Sintaxis
Right(string,
lenght)
Parte
|
Descripción
|
string
|
Requerido. Expresión de cadena desde la cual se
devuelven los caracteres que están más a la derecha. Si string
contiene Null, se devuelve Null.
|
lenght
|
Requerido, un tipo Variant
( Long). Expresión numérica
que indica cuántos caracteres se van a devolver. Si es 0, se devuelve una
cadena de longitud cero (""). Si es mayor o igual al número de
caracteres en string, se devuelve la cadena completa.
|
Comentarios
Para determinar el número de caracteres en string,
utilice la función Len.
Ejemplo de la función Right
En este ejemplo se utiliza la función Right para devolver un
número especificado de caracteres de la parte derecha de la cadena.
Dim UnaCadena, MiCadena
UnaCadena = "Hola Mundo" ' Define una cadena.
MiCadena = Right(UnaCadena, 1) ' Devuelve "o".
MiCadena = Right(UnaCadena, 6) ' Devuelve "Mundo".
MiCadena = Right(UnaCadena, 20) ' ' Devuelve "Hola Mundo".
Devuelve un tipo Single que contiene un número
aleatorio.
Sintaxis
Rnd[(número)]
Valores devueltos
Si número es
|
Rnd genera
|
Menor que cero
|
El mismo número todas las veces,
utilizando número como valor de semilla.
|
Mayor que cero
|
El siguiente número aleatorio de
la secuencia.
|
Igual a cero
|
El número generado más
recientemente.
|
No se especifica
|
El siguiente número aleatorio de
la secuencia.
|
Comentarios
La función Rnd devuelve un valor menor que 1 pero
mayor o igual que cero.
El valor de número determina cómo la función Rnd
genera un número aleatorio:
Para cualquier valor de semilla inicial se genera la misma
secuencia de números. Esto es debido a que cada llamada sucesiva a la función Rnd
usará el número anterior como valor de semilla para el siguiente número de la
secuencia.
Antes de llamar a la función Rnd, utilice la
instrucción Randomize sin argumento para inicializar el generador de
números aleatorios con un valor de semilla basado en el reloj del sistema.
Para producir enteros aleatorios en un intervalo dado, use
esta fórmula:
Int((Límite_superior - límite_inferior + 1) * Rnd +
límite_inferior)
Aquí, límite_superior es el número mayor del
intervalo y límite_inferior es el número menor del intervalo.
Nota Para
repetir secuencias de números aleatorios, llame a la función Rnd con un
argumento negativo antes de utilizar la función Randomize con un argumento
numérico. Al utilizar la instrucción Randomize con el mismo valor de número
no se repite la secuencia anterior.
Ejemplo de la función Rnd
En este ejemplo se utiliza la función Rnd para generar un
valor entero aleatorio de 1 a 6.
Dim MiValor
MiValor = Int((6 * Rnd) + 1) ' Genera un valor aleatorio entre 1 y 6.
Descripción
Devuelve un número redondeado en el número especificado de
lugares decimales.
Sintaxis
Round(expresión [, númLugaresDecimales])
La sintaxis de la función Round consta de las
siguientes partes:
Parte
|
Descripción
|
expresión
|
|
númLugaresDecimales
|
Opcional. Un número que indica
cuántos lugares a la derecha del decimal se incluyen en el redondeo. Si se
omite, la función Round devuelve enteros.
|
Second (Función)
Devuelve un valor de tipo Variant (Integer) que
especifica un número entero entre 0 y 59, inclusive, que representa un segundo.
Sintaxis
Second(hora)
Ejemplo de la función Second
En este ejemplo se utiliza la función Second para obtener los
segundos del minuto de una hora especificada. En el entorno de desarrollo, el
literal de hora se presentará en formato abreviado, utilizando la configuración
regional del código.
Dim MiTiempo, MiSegundo
MiTiempo = #4:35:17 PM# ' Asigna una hora.
MiSegundo = Second(MiTiempo) ' MiSegundo contiene 17.
Devuelve un tipo Variant (Integer) que indica
el signo de un número.
Sintaxis
Sgn(número)
Valores devueltos
Si número es
|
Sgn devuelve
|
Mayor que cero
|
1
|
Igual a cero
|
0
|
Menor que cero
|
-1
|
Ejemplo de la función Sgn
En este ejemplo se utiliza la función Sgn para determinar el
signo de un número.
Dim MiVar1, MiVar2, MiVar3, MiSigno
MiVar1 = 12: MiVar2 = -2.4: MiVar3 = 0
MiSigno = Sgn(MiVar1) ' Devuelve 1.
MiSigno = Sgn(MiVar2) ' Devuelve -1.
MiSigno = Sgn(MiVar3) ' Devuelve 0.
Ejecuta un programa ejecutable y devuelve un tipo Variant
(Double) que representa la identificación de la tarea del programa si se
ha ejecutado con éxito, en caso contrario devuelve cero.
Sintaxis
Shell(pathname[,windowstyle])
Parte
|
Descripción
|
pathname
|
Requerido; Variant ( String).
Nombre del programa a ejecutar y de cualesquiera argumentos necesarios o modificador de
la línea de comandos; puede incluir
directorio o carpeta y unidad de disco. En Macintosh, puede utilizar la
función MacID para especificar la firma de una aplicación en lugar de
su nombre. El siguiente ejemplo utiliza la firma de Microsoft Word:
Shell MacID("MSWD")
|
windowstyle
|
Opcional. Variant (Integer)
correspondiente al estilo de la ventana en la cual se va a ejecutar el programa.
Si se omite windowstyle, el programa se inicia minimizado con
enfoque. En Macintosh (sistema 7.0 o posterior), windowstyle
sólo determina si la aplicación recibe el enfoque cuando se ejecuta.
|
El argumento con nombre windowstyle tiene
estos valores:
Constante
|
Valor
|
Descripción
|
vbHide
|
0
|
Se oculta Windows y se pasa el
foco a la ventana oculta. La constante vbHide no se aplica a
plataformas Macintosh.
|
vbNormalFocus
|
1
|
Windows recupera el foco y
vuelve a su posición y tamaño original.
|
vbMinimizedFocus
|
2
|
Windows se muestra como un icono
con foco.
|
vbMaximizedFocus
|
3
|
Windows se maximiza con foco.
|
vbNormalNoFocus
|
4
|
Windows vuelve al tamaño y
posición más recientes. La ventana activa actual permanece activa.
|
vbMinimizedNoFocus
|
6
|
Windows se muestra como un
icono. La ventana activa actual permanece activa.
|
Comentarios
Si la función Shell ejecuta con éxito el archivo
nombrado, devuelve la identificación de la tarea (Id) del programa iniciado. La
Id de la tarea es un número exclusivo que identifica el programa en ejecución.
Si la función Shell no puede iniciar el programa nombrado, ocurrirá un
error.
En Macintosh, vbNormalFocus, vbMinimizedFocus
y vbMaximizedFocus colocan la aplicación en primer plano; sin embargo, vbHide,
vbNoFocus, vbMinimizeFocus la colocan en segundo plano.
Nota De
manera predeterminada, la función Shell ejecuta otros programas de forma
asíncrona. Esto quiere decir que no se puede esperar que un programa iniciado
con Shell termine su ejecución antes de que se ejecuten las instrucciones
que siguen a la función Shell en la aplicación.
Ejemplo de la función Shell
En este ejemplo se utiliza la función Shell para ejecutar una
aplicación especificada por el usuario. En Macintosh, el nombre de unidad
predeterminado es "Disco duro" y las partes de la ruta de acceso se
separan por dos puntos en vez de por barras diagonales inversas. Del mismo
modo, se pueden especificar las carpetas de Macintosh en vez de \Windows.
' Si se especifica 1 como el segundo argumento, la aplicación se
' ejecuta normalmente y recibe el enfoque.
Dim RetVal
RetVal = Shell("C:\WINDOWS\CALC.EXE", 1) ' Ejecuta Calculadora.
Space (Función)
Devuelve un tipo Variant (String) que consiste en un
número especificado de espacios.
Sintaxis
Space(número)
El
argumento número
es el número de espacios que se desea incluir en la cadena.
Comentarios
La función Space es útil para dar formato a la salida y para
borrar datos en cadenas de longitud fija.
Ejemplo de la función Space
En este ejemplo se utiliza la función Space para devolver una
cadena que consta de un número especificado de espacios.
Dim MiCadena
' Devuelve una cadena con 10 espacios.
MiCadena = Space(10)
' Inserta 10 espacios entre 2 cadenas.
MiCadena = "Hola" & Space(10) & "Mundo"
Sqr (Función)
Devuelve un tipo Double que especifica la raíz cuadrada de un
número.
Sintaxis
Sqr(número)
Ejemplo de la función Sqr
En este ejemplo se utiliza la función Sqr para calcular la
raíz cuadrada de un número.
Dim MiRaíz
MiRaíz = Sqr(4) ' Devuelve 2.
MiRaíz = Sqr(23) ' Devuelve 4.79583152331272.
MiRaíz = Sqr(0) ' Devuelve 0.
MiRaíz = Sqr(-4) ' Genera un error en tiempo de ejecución.
Str (Función)
Devuelve en un tipo Variant (String) la representación
de cadena de un número.
Sintaxis
Str(número)
Comentarios
Cuando los números se convierten a cadenas, siempre se reserva un
espacio a la izquierda para el signo del número. Si número es
positivo, la cadena devuelta contiene un espacio a la izquierda y el signo más
se da por supuesto.
Utilice la función Format para convertir valores numéricos en
valores con formato de fecha, hora, moneda o en otros formatos definidos por el
usuario. A diferencia de Str, la función Format no incluye un
espacio a la izquierda para el signo del número.
Nota La función Str sólo reconoce el
punto (.) como separador decimal válido. Cuando exista la posibilidad de que se
pueda utilizar un separador decimal diferente (por ejemplo, en aplicaciones
internacionales), se debe utilizar CStr para convertir un número a una
cadena.
Ejemplo de la función Str
En este ejemplo se utiliza Str para devolver una
representación de cadena de un número. Cuando un número se convierte en una
cadena siempre se reserva un espacio a la izquierda para el signo.
Dim MiCadena
MiCadena = Str(459) ' Devuelve " 459".
MiCadena = Str(-459.65) ' Devuelve "-459,65".
MiCadena = Str(459.001) ' Devuelve " 459,001".
Sintaxis
StrComp(string1,
string2[, compare])
Parte
|
Descripción
|
string1
|
|
string2
|
Requerido. Cualquier expresión
de cadena válida.
|
compare
|
Opcional. Especifica el tipo de
comparación de cadena. Si el argumento
compare es nulo el
valor de Option Compare determina el tipo de comparación.
|
Valores
Los valores de la instrucción compare son los
siguientes:
Constante
|
Valor
|
Descripción
|
vbUseCompareOption
|
-1
|
Realiza una comparación con los
valores de la instrucción Option Compare.
|
vbBinaryCompare
|
0
|
Realiza una comparación binaria.
|
vbTextCompare
|
1
|
Realiza una comparación textual.
|
vbDatabaseCompare
|
2
|
Sólo para Microsoft Access. Realiza
una comparación basada en la información en las bases de datos.
|
Valores devueltos
La función StrComp devuelve los siguientes valores:
Si
|
La función StrComp devuelve
|
string1 es menor que string2
|
-1
|
string1 es igual a string2
|
0
|
string1 es mayor que string2
|
1
|
string1 o string2 es Null
|
Null
|
Ejemplo de la función StrComp
En este ejemplo se utiliza la función StrComp para devolver
los resultados de una comparación de cadenas. Si se suministra 1 como tercer
argumento, se realiza una comparación que no diferencia mayúsculas de
minúsculas, mientras que si el tercer argumento es 0 o se omite, se realiza una
comparación binaria.
Dim MiCadena1, MiCadena2, MiComp
MiCadena1 = "ABCD": MiCadena2 = "abcd" ' Define las variables.
MiComp = StrComp(MiCadena1, MiCadena2, 1)' Devuelve 0.
MiComp = StrComp(MiCadena1, MiCadena2, 0)' Devuelve -1.
MiComp = StrComp(MiCadena2, MiCadena1) ' Devuelve 1.
StrReverse (Función)
Descripción
Devuelve una cadena en la que se invierte el orden de carácter de
una cadena especificada.
Sintaxis
StrReverse(cadena1)
El argumento cadena1 es la cadena cuyos caracteres se
invierten. Si cadena1 es una cadena de longitud cero (""), se
devuelve una cadena de longitud cero. Si es Null, se produce un error.
Ejemplo:
CC=strreverse(“UNOS”) devuelve “SONU”
Devuelve un tipo Variant (String) que
contiene una cadena de caracteres que se repite de la longitud especificada.
Sintaxis
String(number,
character)
Parte
|
Descripción
|
number
|
Requerido; un tipo Long. Longitud de la cadena devuelta.
Si número contiene Null,
se devuelve Null.
|
character
|
|
Comentarios
Si se especifica para character un número
mayor que 255, String convierte el número en un código de carácter
válido utilizando la fórmula:
character Mod 256
Ejemplo de la función String
En este ejemplo se utiliza la función String para devolver
cadenas de caracteres de una longitud especificada, que se repiten.
Dim MiCadena
MiCadena = String(5, "*") ' Devuelve "*****".
MiCadena = String(5, 64) ' Devuelve "@@@@@".
MiCadena = String(10, "ABC") ' Devuelve "AAAAAAAAAA".
Evalúa una lista de
expresiones
y devuelve un valor
Variant o una expresión asociada a la primera
instrucción de la lista que da como resultado
True.
Sintaxis
Switch(expresión-1, valor-1[,
expresión-2, valor-2 … [, expresión-n,valor-n]])
La sintaxis de la función Switch consta de las
siguientes partes:
Parte
|
Descripción
|
expresión
|
|
valor
|
Requerido. Valor o expresión que
se devuelve si la expresión correspondiente da como resultado True.
|
Comentarios
La lista de
argumentos
de la función
Swicht está formada por pares de expresiones y valores.
Las expresiones se evalúan según aparecen en la lista, de izquierda a derecha y
se devuelve el valor asociado a la primera expresión que al evaluarse da
True.
Si las partes no están emparejadas correctamente, se producirá un
error en tiempo de ejecución. Por
ejemplo, si
expresión-1 da
True,
Switch devolverá
valor-1.
Si
expresión-1 da
False, pero
expresión-2 da
True,
Switch
devolverá
valor-2 y así sucesivamente.
Switch devolverá un
valor
Null si:
- Ninguna de las
expresiones da True.
- La primera expresión
que da True tiene asociado un valor Null.
Switch evalúa todas
las expresiones, aunque solamente devuelve una de ellas. Por esta razón, deberá
vigilar que no se produzcan efectos no deseados. Por ejemplo, si en la
evaluación de una expresión hay una división por cero, se producirá un error.
Ejemplo de la función Switch
Este ejemplo utiliza la función Switch para devolver el
nombre de un idioma que coincide con el nombre de una ciudad.
Function MatchUp (NombreCiudad As String)
Matchup = Switch(NombreCiudad = "Londres", "Inglés", NombreCiudad _
= "Roma", "Italiano", NombreCiudad = "París", "Francés")
End Function
Time (Función)
Devuelve un valor de tipo Variant (Date) indicando la
hora actual del sistema.
Sintaxis
Time
Comentarios
Use la instrucción Time para establecer la hora del sistema.
Timer (Función)
Devuelve un tipo Single que representa el número de segundos
transcurridos desde la medianoche.
Sintaxis
Timer
Ejemplo de la función Timer
En este ejemplo se utiliza la función Timer para detener la
aplicación. El ejemplo también utiliza DoEvents para pasar el control a
otros procesos durante la pausa.
Dim TiempoPausa, Inicio, Final, TiempoTotal
If (MsgBox("Presione Sí para parar 5 segundos", 4)) = vbYes Then
TiempoPausa = 5 ' Asigna hora de inicio.
Inicio = Timer ' Establece la hora de inicio.
Do While Timer < Inicio + TiempoPausa
DoEvents ' Cambia a otros procesos.
Loop
Final = Time ' Asigna hora de finalización.
TiempoTotal = Final - Inicio ' Calcula tiempo total.
MsgBox "Detenida durante " & TiempoTotal & " segundos"
Else
End
End If
Devuelve un tipo Variant (Date) que contiene
la hora actual para una hora, minuto y segundo específicos.
Sintaxis
TimeSerial(hora, minuto, segundo)
Parte
|
Descripción
|
hora
|
Requerido; Variant ( Integer).
Número entre 0 (12:00 a.m.) y 23 (11:00 p.m.), inclusive o una expresión numérica.
|
minuto
|
Requerido; Variant (Integer).
Cualquier expresión numérica.
|
segundo
|
Requerido; Variant (Integer).
Cualquier expresión numérica.
|
Comentarios
Para especificar una hora, como 11:59:59, el intervalo de
números para cada argumento de
TimeSerial debería estar en el intervalo
normalmente aceptado para la unidad; es decir, 0–23 para horas y 0–59 para
minutos y segundos. Sin embargo, puede especificar horas relativas para cada
argumento, usando cualquier expresión
numérica que represente algunas horas, minutos o segundos antes o después de
cierta hora. El ejemplo siguiente usa
expresiones
en lugar de números de hora absoluta. La función
TimeSerial devuelve una
hora que es 15 (
-15)
minutos menos que seis horas antes del mediodía (
12 - 6), ó 5:45:00 a.m.
TimeSerial(12 - 6, -15, 0)
Cuando algún argumento supera el intervalo normalmente
aceptado para él, se incrementa hasta la siguiente unidad mayor. Por ejemplo,
si especifica 75 minutos, se evalúa como una hora y 15 minutos. No obstante, si
un solo argumento está fuera del intervalo -32.768 a 32.767 o si la hora
especificada por los tres argumentos, directamente o mediante expresión, hace
que la fecha quede fuera del intervalo aceptable de valores, se produce un
error.
Ejemplo de la función TimeSerial
En este ejemplo se utiliza la función TimeSerial para
devolver la hora correspondiente a una hora, minuto y segundo especificados.
Dim MiTiempo
MiTiempo = TimeSerial(16, 35, 17) ' MiTiempo contiene la hora
' correspondiente a 4:35:17 PM.
TimeValue (Función)
Devuelve un tipo Variant (Date) que contiene la hora.
Sintaxis
TimeValue(hora)
El
argumento hora es
normalmente una
expresión de cadena
que representa una hora desde las 0:00:00 (12:00:00 a.m.) a las 23:59:59
(11:59:59 p.m.), inclusive. Sin embargo,
hora también puede ser
cualquier
expresión que pueda
representar una hora en ese intervalo. Si
hora contiene
Null, la función devolverá
Null.
Comentarios
Puede introducir horas válidas usando un reloj de 12 horas o de 24
horas. Por ejemplo, "2:24 p.m."
y "14:24" son argumentos válidos de hora.
Si el argumento hora contiene información de fecha, TimeValue
no devuelve esta información. Sin embargo, si hora incluye información
no válida de fecha, ocurrirá un error.
Ejemplo de la función TimeValue
En este ejemplo se utiliza la función TimeValue para
convertir una cadena de caracteres a hora. También puede utilizar literales de
fecha para asignar directamente una hora a una variable Variant o Date
variable, por ejemplo, MiHora = #4:35:17 PM#.
Dim MiHora
MiHora = TimeValue("4:35:17 PM") ' Devuelve la hora.
Devuelve una cadena (
String) que proporciona
información acerca de una
variable.
Sintaxis
TypeName(nombrevariable)
Comentarios
La cadena devuelta por la función TypeName puede ser
cualquiera de las siguientes:
Cadena devuelta
|
La variable contiene
|
|
|
Un objeto cuyo tipo es tipoobjeto
|
|
|
Un valor byte
|
|
|
Un entero
|
|
|
Un entero largo
|
|
|
Un número de punto flotante de
precisión simple
|
|
|
Un número de punto flotante de
precisión doble
|
|
|
Un valor de moneda
|
|
|
Un valor decimal
|
|
|
Un valor fecha
|
|
|
Una cadena
|
|
|
Un valor booleano
|
Error
|
Un valor de error
|
|
|
No inicializado
|
|
|
Datos no válidos
|
|
|
Un objeto
|
Desconocido
|
Un objeto cuyo tipo es
desconocido
|
Nothing
|
Una variable de que no hace referencia
a un objeto
|
Si
nombrevariable es una
matriz, la cadena devuelta puede ser
cualquiera de las posibles (o
Variant) con un paréntesis vacío añadido.
Por ejemplo, si
nombrevariable es una matriz de números enteros, la
función
TypeName devuelve "
Integer()".
Ejemplo de la función TypeName
En este ejemplo se utiliza la función TypeName para devolver
información acerca de una variable.
' Declara variables.
Dim VarNull, MiTipo, VarCad As String, VarEnt As Integer, VarMon As Currency
Dim VarMatriz (1 To 5) As Integer
VarNull = Null ' Asigna un valor Null.
MiTipo = TypeName(VarCad) ' Devuelve "String".
MiTipo = TypeName(VarEnt) ' Devuelve "Integer".
MiTipo = TypeName(VarMon) ' Devuelve "Currency".
MiTipo = TypeName(VarNull) ' Devuelve "Null".
MiTipo = TypeName(VarMatriz) ' Devuelve "Integer()".
UCase (Función)
Devuelve un tipo Variant (String) que contiene una
cadena especificada que se ha convertido a mayúsculas.
Sintaxis
UCase(cadena)
Comentarios
Sólo se convierten a mayúsculas las letras minúsculas. Las letras
mayúsculas o los caracteres que no son letras no sufren cambios.
Ejemplo de la función UCase
En este ejemplo se utiliza la función UCase para devolver la
versión en mayúsculas de una cadena.
Dim LowerCase, UpperCase
LowerCase = "Hola Mundo 1234" ' Cadena a convertir.
UpperCase = UCase(LowerCase) ' Devuelve "HOLA MUNDO 1234".
Val (Función)
Devuelve los números contenidos en una cadena como un valor numérico
del tipo adecuado.
Sintaxis
Val(cadena)
Comentarios
La función Val deja de leer la cadena en el primer carácter
que no puede reconocer como parte de un número. Los símbolos y caracteres que
se consideran a menudo parte de valores numéricos, como signos de moneda y
comas, no se reconocen. Sin embargo, la función reconoce los prefijos de base &O (para octal) y &H (para hexadecimal). Los espacios
en blanco, los tabuladores y los avances de línea se eliminan del argumento.
Lo siguiente devuelve el valor 1615198:
Val(" 1615 198 Calle N.E.")
En el código que se muestra a continuación, Val devuelve el
valor decimal -1 correspondiente al valor hexadecimal entre paréntesis:
Val("&HFFFF")
Nota La función Val sólo reconoce el
punto (.) como separador decimal válido. Cuando se utilizan separadores
decimales diferentes, como en aplicaciones internacionales, debe utilizar CDbl
para convertir una cadena a un número.
Ejemplo de la función Val
En este ejemplo se utiliza la función Val para devolver los
números contenidos en una cadena.
Dim MiValor
MiValor = Val("2457") ' Devuelve 2457.
MiValor = Val(" 2 45 7") ' Devuelve 2457.
MiValor = Val("24 y 57") ' Devuelve 24.
Devuelve un valor de tipo Variant (Integer)
que contiene un número entero que representa el día de la semana.
Sintaxis
Weekday(fecha, [primerdíasemana])
Parte
|
Descripción
|
fecha
|
|
primerdíasemana
|
Opcional. Una constante que especifica el primer día
de la semana. Si no se especifica, se asume el valor vbSunday.
|
Valores
El argumento primerdíasemana tiene estos
valores:
Constante
|
Valor
|
Descripción
|
vbUseSystem
|
0
|
Utilice configuración de la API
de NLS.
|
vbSunday
|
1
|
Domingo (predeterminado)
|
vbMonday
|
2
|
Lunes
|
vbTuesday
|
3
|
Martes
|
vbWednesday
|
4
|
Miércoles
|
vbThursday
|
5
|
Jueves
|
vbFriday
|
6
|
Viernes
|
vbSaturday
|
7
|
Sábado
|
Valores devueltos
La función Weekday puede devolver cualquiera de
estos valores:
Constante
|
Valor
|
Descripción
|
vbSunday
|
1
|
Domingo
|
vbMonday
|
2
|
Lunes
|
vbTuesday
|
3
|
Martes
|
vbWednesday
|
4
|
Miércoles
|
vbThursday
|
5
|
Jueves
|
vbFriday
|
6
|
Viernes
|
vbSaturday
|
7
|
Sábado
|
Ejemplo de la función Weekday
En este ejemplo se utiliza la función Weekday para obtener el
día de la semana de una fecha especificada.
Dim MiFecha, MiDíaSemana
MiFecha = #12 febrero 1969# ' Asigna una fecha.
MiDíaSemana = Weekday(MiFecha) ' MiDíaSemana contiene 4 ya que
' MiFecha es un miércoles.
Descripción
Devuelve una cadena que indica el día de la semana
especificado.
Sintaxis
WeekdayName(díaDeLaSemana, abreviar,
primerDíaDeLaSemana)
La sintaxis de la función WeekdayName consta de las
siguientes partes:
Parte
|
Descripción
|
díaDeLaSemana
|
Requerido. La designación
numérica para el día de la semana. El valor numérico de cada día depende de
la configuración del valor primerDíaDeLaSemana.
|
abreviar
|
Opcional. Un valor Boolean
que indica si se abrevia el nombre del día de la semana. Si se omite, el
valor predeterminado es False, que significa que el nombre del día de
la semana no se abrevia.
|
primerDíaDeLaSemana
|
Opcional. Un valor numérico que
indica el primer día de la semana. Vea la sección Valores para consultar los
valores posibles.
|
Valores
El argumento primerDíaDeLaSemana puede tener los
valores siguientes:
Constante
|
Valor
|
Descripción
|
vbUseSystem
|
0
|
Utilizar la configuración de la
API National Language Support (NLS).
|
vbSunday
|
1
|
Domingo (predeterminado).
|
vbMonday
|
2
|
Lunes.
|
vbTuesday
|
3
|
Martes.
|
vbWednesday
|
4
|
Miércoles.
|
vbThursday
|
5
|
Jueves.
|
vbFriday
|
6
|
Viernes.
|
vbSaturday
|
7
|
Sábado.
|
Year (Función)
Devuelve un valor de tipo Variant (Integer) que
contiene un número entero que representa el año.
Sintaxis
Year(fecha)
Ejemplo de la función Year
En este ejemplo se utiliza la función Year para obtener el
año de una fecha especificada. En el entorno de desarrollo, la hora(literal de
fecha), se presentará en formato abreviado, utilizando la configuración
regional del código.
Dim MiFecha, MiAño
MiFecha = #12 febrero 1969#' Asigna una fecha.
MiAño = Year(MiFecha) ' MiAño contiene 1969.
Funciones matemáticas
Funciones matemáticas derivadas
La siguiente es una lista de funciones matemáticas no
intrínsecas que pueden derivarse de funciones matemáticas intrínsecas:
Función
|
Derivadas equivalentes
|
Secante
|
Sec(X) = 1 / Cos(X)
|
Cosecante
|
Cosec(X) = 1 / Sin(X)
|
Cotangente
|
Cotan(X) = 1 / Tan(X)
|
Seno inverso
|
Arcsin(X) = Atn(X / Sqr(-X * X +
1))
|
Coseno inverso
|
Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
|
Secante inversa
|
Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
|
Cosecante inversa
|
Arccosec(X) = Atn(X / Sqr(X * X – 1)) + (Sgn(X) – 1) * (2 * Atn(1))
|
Cotangente inversa
|
Arccotan(X) = Atn(X) + 2 *
Atn(1)
|
Seno hiperbólico
|
HSin(X) = (Exp(X) – Exp(–X)) / 2
|
Coseno hiperbólico
|
HCos(X) = (Exp(X) + Exp(–X)) / 2
|
Tangente hiperbólica
|
HTan(X) = (Exp(X) – Exp(–X)) /
(Exp(X) + Exp(–X))
|
Secante hiperbólica
|
HSec(X) = 2 / (Exp(X) + Exp(–X))
|
Cosecante hiperbólica
|
HCosec(X) = 2 / (Exp(X) – Exp(–X))
|
Cotangente hiperbólica
|
HCotan(X) = (Exp(X) + Exp(–X)) /
(Exp(X) – Exp(–X))
|
Seno hiperbólico inverso
|
HArcsin(X) = Log(X + Sqr(X * X +
1))
|
Coseno hiperbólico inverso
|
HArccos(X) = Log(X + Sqr(X * X –
1))
|
Tangente hiperbólica inversa
|
HArctan(X) = Log((1 + X) / (1 –
X)) / 2
|
Secante hiperbólica inversa
|
HArcsec(X) = Log((Sqr(–X * X + 1) + 1) / X)
|
Cosecante hiperbólica inversa
|
HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
|
Cotangente hiperbólica inversa
|
HArccotan(X) = Log((X + 1) / (X
– 1)) / 2
|
Logaritmo en base N
|
LogN(X) = Log(X) / Log(N)
|
Operadores aritméticos
Se utiliza para dividir dos números y obtener un resultado
entero.
Sintaxis
resultado = número1\número2
La sintaxis del operador \ consta de las siguientes
partes:
Parte
|
Descripción
|
resultado
|
|
número1
|
|
número2
|
Requerido; cualquier expresión
numérica.
|
Comentarios
Antes de efectuar la división se redondean las expresiones
numéricas para convertirlas en expresiones tipo
Byte,
Integer
o
Long.
Normalmente, el
tipo
de dato del
resultado es tipo
Byte,
Byte tipo variant,
tipo
Integer o
Integer tipo variant, tipo
Long o
Long
tipo variant, independientemente de si el
resultado es un número entero
o no. La parte fraccionaria se trunca. Sin embargo, si cualquiera de las
expresiones es
Null,
resultado es
Null.
Toda expresión que sea
Empty se
considera como 0.
Ejemplo del operador \
En estos ejemplos se utiliza el operador \ para ejecutar
divisiones de enteros.
Dim MiValor
MiValor = 11 \ 4 ' Devuelve 2.
MiValor = 9 \ 3 ' Devuelve 3.
MiValor = 100 \ 3 ' Devuelve 33.
Se utiliza para sumar dos números.
Sintaxis
resultado = expresión1+expresión2
La sintaxis del operador + consta de las siguientes
partes:
Parte
|
Descripción
|
resultado
|
|
Expresión1
|
|
expresión2
|
Requerido; cualquier expresión.
|
Comentarios
Cuando utilice el operador + , quizá no pueda
determinar si se va a realizar una suma o una concatenación de cadenas. Utilice
el operador & para la concatenación, de modo que se eviten
ambigüedades y se suministren programas claros y explícitos.
Si hay al menos una expresión que no sea de tipo
Variant, se aplican las siguientes
reglas:
Si
|
Entonces
|
|
|
Suma.
|
Ambas expresiones son del tipo String
|
Concatenación.
|
Una expresión es de un tipo de
datos numérico y la otra cualquier tipo Variant excepto Null
|
Suma.
|
Una expresión es del tipo String
y la otra cualquier tipo Variant excepto Null
|
Concatenación.
|
Una expresión es del tipo Empty Variant
|
Devuelve sin modificaciones la
expresión restante como resultado.
|
Una expresión es de un tipo de
datos numérico y la otra de tipo String
|
Puede ocurrir un Error de tipos.
|
Cualquiera de las expresiones es
Null
|
resultado es Null.
|
Si ambas expresiones son del tipo Variant, se
aplican las siguiente reglas:
Si
|
Entonces
|
Ambas expresiones tipo Variant
son numéricas
|
Suma.
|
Ambas expresiones tipo Variant
son cadenas de caracteres
|
Concatenación.
|
Una expresión tipo Variant
es numérica y la otra es una cadena de caracteres
|
Suma.
|
En adiciones aritméticas simples de expresiones de tipos de
datos numéricos únicamente, el
tipo de
dato de
resultado es habitualmente el mismo que el de la expresión
con mayor precisión. El orden de precisión, de menos exacto a más exacto, es
Byte,
Integer,
Long,
Single,
Double,
Currency y
Decimal.
Esta regla tiene las siguientes excepciones:
Si
|
El resultado es
|
Se suman un tipo Single y
un tipo Long,
|
un tipo Double.
|
El tipo de dato de resultado
es Long, Single o Date tipo variant que desborda
su intervalo válido,
|
se convierte a un Double
tipo variant.
|
El tipo de dato de resultado
es un Byte tipo variant que se sale del intervalo válido,
|
se convierte a un Integer
tipo variant.
|
El tipo de dato de resultado
es un Integer tipo variant que se sale del intervalo válido,
|
se convierte a un Long
tipo variant.
|
Un Date se agrega a
cualquier tipo de dato,
|
un tipo Date.
|
Si una de las expresiones o ambas son expresiones de tipo Null,
resultado es Null. Si ambas expresiones son Empty, el resultado
es Integer. Sin embargo, sólo una de las expresiones es Empty, se
devuelve la otra sin modificaciones como resultado.
Nota El
orden de precisión utilizado por la suma y la resta no es igual que el orden de
precisión utilizado por la multiplicación.
Ejemplo del operador +
En estos ejemplos se utiliza el operador + para sumar
números. El operador + puede utilizarse también para concatenar cadenas
de caracteres pero, para evitar ambigüedades, es mejor utilizar para ello el
operador &. Si los componentes de una expresión creada con el
operador + incluyen tanto cadenas como elementos numéricos, se asigna el
resultado aritmético. Si los componentes son cadenas exclusivamente, se
concatenan las cadenas.
Dim MiNúmero, Var1, Var2
MiNúmero = 2 + 2 ' Devuelve 4.
MiNúmero = 4257.04 + 98112 ' Devuelve 102369.04.
Var1 = "34": Var2 = 6 ' Inicializa variables mezcladas.
MiNúmero = Var1 + Var2 ' Devuelve 40.
Var1 = "34": Var2 = "6" ' Inicializa las variables con cadenas.
MiNúmero = Var1 + Var2 ' Devuelve "346" (concatenación de cadenas).
Se utiliza para comparar dos cadenas de caracteres.
Sintaxis
resultado = cadena
Like patrón
La sintaxis del operador Like consta de las siguientes
partes:
Parte
|
Descripción
|
resultado
|
|
cadena
|
|
patrón
|
Requerido; cualquier expresión
de cadena que satisface las convenciones de coincidencia de patrones
descritas en Comentarios.
|
Comentarios
Si
cadena coincide con
patrón, el
resultado
es
True; si no coincide, el
resultado es
False. Si
cadena
o
patrón es
Null, el
resultado
es también
Null.
El comportamiento del operador
Like depende de la
instrucción
Option Compare. El método predeterminado de
comparación de cadenas para cada
módulo es
Option Compare Binary.
Option Compare Binary
da como resultado comparaciones de cadenas basadas en el
orden derivado de las representaciones
binarias internas de los caracteres. En Microsoft Windows, el orden depende de
la página de código. En el siguiente ejemplo se ilustra un orden binaria
típico:
A < B < E < Z < a < b < e < z < À
< Ê < Ø < à < ê < ø
Option Compare Text da
como resultado comparaciones de cadenas basadas en el orden determinado por la
configuración regional de su sistema.
Los mismos caracteres del ejemplo anterior, ordenados con la opción
Option
Compare Text, aparecen en el siguiente orden:
(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) <
(Z=z) < (Ø=ø)
La función integrada de búsqueda de coincidencia de
patrones ofrece una herramienta versátil para efectuar comparaciones de
cadenas. Las características de esta función permiten el empleo de caracteres
comodín, listas de caracteres o intervalos de caracteres en cualquier
combinación para hallar coincidencias en cadenas. En la siguiente tabla se
indican los caracteres que se pueden poner en patrón y con qué coinciden
los mismos:
Caracteres en pattern
|
Coincidencias en string
|
?
|
Un carácter cualquiera.
|
*
|
Cero o más caracteres.
|
#
|
Un dígito cualquiera (0–9).
|
[listacaracteres]
|
Un carácter cualquiera de listacaracteres.
|
[!listacaracteres]
|
Un carácter cualquiera no
incluido en listacaracteres.
|
Se puede utilizar un grupo de uno o más caracteres (
listacaracteres)
entre corchetes (
[ ]) para establecer una coincidencia con un carácter
cualquiera de
cadena; el grupo puede incluir casi cualquier
código de carácter, incluyendo dígitos.
Nota Los
caracteres especiales corchete de apertura ([), interrogación (?),
signo de número (#) y asterisco (*) se pueden utilizar para
establecer una coincidencia con sí mismos sólo si van entre corchetes. El
corchete de cierre (]) no se puede utilizar en un grupo para establecer
una coincidencia con sí mismo, pero sí se puede utilizar fuera de un grupo,
como carácter independiente.
Puede especificar un intervalo de caracteres en listacaracteres
colocando un guión (–) para separar los límites inferior y superior del
intervalo. Por ejemplo, la secuencia [A–Z] en patrón permite hallar una coincidencia si en la
posición correspondiente de cadena hay un carácter en mayúsculas
cualquiera, comprendido en el intervalo de la A a la Z. Se pueden incluir
múltiples intervalos entre corchetes, sin necesidad de delimitadores.
El significado del intervalo especificado depende de la
ordenación de caracteres válida en
tiempo
de ejecución (determinado por
Option Compare y la
configuración regional del sistema dónde
está ejecutándose el código). Si se utiliza el ejemplo con
Option Compare
Binary, en el intervalo
[A–E] coinciden A, B y E. Con
Option Compare Text, en
[A–E] coinciden A, a, À, à, B, b,
E, e. Ê y ê no se incluyen entre las coincidencias porque los caracteres
acentuados se encuentran después de los no acentuados en el orden.
Otras reglas importantes para efectuar coincidencias de
patrones son las siguientes:
- Una exclamación (!)
al comienzo de listacaracteres significa que hay coincidencias,
dentro de la cadena para cualquier carácter excepto los incluidos
en listacaracteres. Si no se encierra entre corchetes, la
exclamación coincide consigo misma.
- El guión (–)
puede aparecer tanto al comienzo (después de la exclamación, si se emplea)
o al final de listacaracteres para coincidir consigo mismo. En
cualquier otro lugar, el guión sólo se puede utilizar para identificar un
intervalo de caracteres.
- Cuando se especifica
un intervalo de caracteres, éstos deben aparecer en orden ascendente (de
menor a mayor).[A-Z] es un patrón válido, pero [Z-A]
no lo es.
- La secuencia de
caracteres [] se considera una cadena de caracteres
de longitud cero ("").
El alfabeto de algunos idiomas incluye caracteres
especiales que en realidad representan dos caracteres distintos. Por ejemplo,
varios idiomas emplean el carácter "æ" para representar los caracteres "a" y
"e" cuando aparecen juntos. El operador Like reconoce que el
carácter especial único y los dos caracteres individuales son equivalentes.
Cuando se especifica en la configuración regional del
sistema un idioma que utiliza uno de estos caracteres especiales, al ocurrir el
carácter especial en patrón o cadena, coincide con la secuencia
equivalente de 2 caracteres en la otra cadena. Igualmente, un único carácter
especial en patrón incluido entre corchetes (en solitario, en una lista
o en un intervalo) coincide con la secuencia de 2 caracteres equivalente en cadena.
Ejemplo del operador Like
En estos ejemplos se utiliza el operador Like para ejecutar
una exclusión lógica sobre dos expresiones.
Dim MiPrueba
MiPrueba = "aBBBa" Like "a*a" ' Devuelve True.
MiPrueba = "F" Like "[A-Z]" ' Devuelve True.
MiPrueba = "F" Like "[!A-Z]" ' Devuelve False.
MiPrueba = "a2a" Like "a#a" ' Devuelve True.
MiPrueba = "aM5b" Like "a[L-P]#[!c-e]" ' Devuelve True.
MiPrueba = "BAT123khg" Like "B?T*" ' Devuelve True.
MiPrueba = "CAT123khg" Like "B?T*" ' Devuelve False.
Mod (Operador)
Divide dos números y devuelve sólo el resto.
Sintaxis
resultado = número1
Mod número2
La sintaxis del operador Mod consta de las
siguientes partes:
Parte
|
Descripción
|
resultado
|
|
número1
|
|
número2
|
Requerido; cualquier expresión
numérica.
|
Comentarios
El operador de módulo, o resto, divide
número1 por
número2
(redondeando a enteros los números de signo flotante) y devuelve sólo el
resto como
resultado. Por ejemplo, en la siguiente
expresión, A (que es el
resultado)
es igual a 5.
A = 19 Mod 6.7
Generalmente, el
tipo
de dato de
resultado es tipo
Byte,
Byte tipo variant, tipo
Integer,
Integer tipo variant, tipo
Long
o tipo
Variant que contiene un tipo
Long,
independientemente de si el
resultado es un número entero o no. La parte
fraccionaria se trunca. Sin embargo, si cualquiera de las expresiones es
Null, el
resultado es también
Null.
Toda expresión
Empty se considera
como 0.
Ejemplo del operador Mod
En estos ejemplos se utiliza el operador Mod para dividir dos
números y obtener como resultado sólo el resto de la división. Si uno de los
números es de coma flotante, se redondea primero para convertirlo en un entero.
Dim MiResultado
MiResultado = 10 Mod 5 ' Devuelve 0.
MiResultado = 10 Mod 3 ' Devuelve 1.
MiResultado = 12 Mod 4.3 ' Devuelve 0.
MiResultado = 12.6 Mod 5 ' Devuelve 3.
Prioridad de los
operadores
Cuando hay varias operaciones en una misma
expresión, cada parte de la misma se
evalúa y se resuelve en un orden predeterminado según la prioridad de los
operadores.
Cuando hay expresiones que contienen operadores de más de
una categoría, se resuelven antes las que tienen operadores aritméticos, a
continuación las que tienen
operadores de
comparación y por último las de operadores lógicos. Los operadores de
comparación tienen todos la misma prioridad; es decir, se evalúan de izquierda
a derecha, en el orden en que aparecen. Los operadores lógicos y aritméticos se
evalúan en el siguiente orden de prioridad:
Aritméticos
|
Comparación
|
Lógicos
|
Exponenciación (^)
|
Igualdad (=)
|
Not
|
Negación (–)
|
Desigualdad (<>)
|
And
|
Multiplicación y división (*,
/)
|
Menor que (<)
|
Or
|
División de enteros (\)
|
Mayor que (>)
|
Xor
|
Módulo aritmético (Mod)
|
Menor o igual que (<=)
|
Eqv
|
Adición y substracción (+,
–)
|
Mayor o igual que (>=)
|
Imp
|
Concatenación de cadenas (&)
|
Like
Is
|
|
Cuando hay multiplicación y división en la misma expresión,
cada operación se evalúa a medida que aparece, de izquierda a derecha. Del
mismo modo, cuando se presentan adiciones y substracciones en una misma
expresión, cada operación se evalúa tal como aparecen de izquierda a derecha.
Es posible usar paréntesis para saltar el orden de preferencia y forzar que
algunas partes de una expresión se evalúen antes que otras. Las operaciones
entre paréntesis se realizan antes que las de fuera. Sin embargo, dentro de los
paréntesis, la precedencia de los operadores se mantiene.
El operador de concatenación de cadenas (&) no
es realmente un operador aritmético, pero en orden de prioridad se encuentra a
continuación de todos los operadores aritméticos y antes que todos los operadores
de comparación.
El operador Like, a pesar de tener la misma
prioridad que los operadores de comparación, es en realidad un operador de
coincidencia de patrones.
El operador Is es un operador de comparación de
referencia de objetos. No compara objetos ni valores de objetos; sólo determina
si dos referencias de objeto se refieren al mismo objeto.
Resumen de tipos de datos
La tabla siguiente muestra los
tipos de datos compatibles, incluyendo el
tamaño de almacenamiento y el intervalo.
Tipo de datos
|
Tamaño de almacenamiento
|
Intervalo
|
Byte
|
1 byte
|
0 a 255
|
Boolean
|
2 bytes
|
True o False
|
Integer
|
2 bytes
|
-32,768 a 32,767
|
Long
(entero largo)
|
4 bytes
|
-2,147,483,648 a 2,147,483,647
|
Single
(coma flotante/ precisión simple)
|
4 bytes
|
-3,402823E38 a –1,401298E-45
para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos
|
Double
(coma flotante/ precisión doble)
|
8 bytes
|
-1.79769313486231E308 a
-4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a
1,79769313486232E308 para valores positivos
|
Currency
(entero a escala)
|
8 bytes
|
-922.337.203.685.477,5808 a
922.337.203.685.477,5807
|
Decimal
|
14 bytes
|
+/-79.228.162.514.264.337.593.543.950.335
sin punto decimal;
+/-7,9228162514264337593543950335 con 28 posiciones a la derecha del signo
decimal; el número más pequeño distinto de cero es
+/-0,0000000000000000000000000001
|
Date
|
8 bytes
|
1 de enero de 100 a 31 de
diciembre de 9999
|
Object
|
4 bytes
|
Cualquier referencia a tipo Object
|
String
(longitud variable)
|
10 bytes + longitud de la cadena
|
Desde 0 a 2.000 millones
|
String
(longitud fija)
|
Longitud de la cadena
|
Desde 1 a 65.400 aproximadamente
|
Variant
(con números)
|
16 bytes
|
Cualquier valor numérico hasta
el intervalo de un tipo Double
|
Variant
(con caracteres)
|
22 bytes + longitud de la cadena
|
El mismo intervalo que para un
tipo String de longitud variable
|
Definido por el usuario
(utilizando Type)
|
Número requerido por los
elementos
|
El intervalo de cada elemento es
el mismo que el intervalo de su tipo de datos.
|
Nota Las
matrices de cualquier tipo de datos
requieren 20 bytes de memoria más cuatro bytes para cada dimensión de matriz,
más el número de bytes que ocupan los propios datos. Puede calcular la memoria
que ocupan los datos multiplicando el número de elementos de datos por el
tamaño de cada elemento. Por ejemplo, los datos de una matriz unidimensional
que consten de cuatro elementos de datos tipo
Integer de dos bytes cada
uno, ocupan ocho bytes. Los ocho bytes que requieren los datos más los 24 bytes
necesarios para la matriz suman un requisito total de memoria de 32 bytes para
dicha matriz.
Un tipo Variant que contiene una matiz requiere 12
bytes más que la matriz por sí sola.
Note Use
the StrConv function to convert one type of string data to another.
GoTo (Instrucción)
Salta incondicionalmente a una línea especificada en un
procedimiento.
Sintaxis
GoTo línea
Comentarios
GoTo solamente puede saltar a líneas del procedimiento en el
que aparece.
Nota Demasiadas instrucciones
GoTo
pueden ser difíciles de leer y de depurar. Siempre que sea posible, utilice
instrucciones de control estructuradas (
Do...Loop,
For...Next,
If...Then...Else,
Select Case).
Ejemplo de la instrucción GoTo
En este ejemplo se utiliza la instrucción GoTo para saltar a
etiquetas de línea ubicadas dentro de un procedimiento.
Sub GotoStatementDemo()
Dim Número, MiCadena
Número = 1 ' Inicializa la variable.
' Evalúa Número y salta al rótulo apropiado.
If Número = 1 Then GoTo Line1 Else GoTo Line2
Line1:
MiCadena = "Número es igual a 1"
GoTo LastLine ' Va a la última linea.
Line2:
' La siguiente instrucción nunca se ejecuta.
MiCadena = "Número igual a 2"
LastLine:
Debug.Print MiCadena ' Imprime "Número es igual a 1" en la
' ventana Inmediato
End Sub
Kill (Instrucción)
Elimina archivos del disco.
Sintaxis
Kill nombre_ruta
El
argumento requerido
nombre_ruta es una
expresión de cadena
que especifica uno o más nombres de archivos que se van a eliminar. Puede
incluir el directorio o carpeta y la unidad de disco.
Comentarios
En Microsoft Windows, La función Kill permite el uso de los
caracteres comodín '*' (múltiples caracteres) y '?' (un solo carácter)
para especificar varios archivos. Sin embargo, en Macintosh, estos caracteres
son tratados como caracteres de nombre de archivo válidos y no se pueden
utilizar como comodines para especificar múltiples nombres de archivo.
Ejemplo de la instrucción Kill
En este ejemplo se utiliza la instrucción Kill para borrar un
archivo de un disco.
' Se supone que PRUEBA es un archivo que contiene información.
Kill "PRUEBA" ' Se elimina el archivo.
' Se eliminan todos los archivos *.TXT del directorio actual.
Kill "*.TXT"
Sintaxis
[Public | Private | Friend] [Static] Function
nombre [(lista_argumentos)] [As tipo]
[instrucciones]
[nombre = expresión]
[Exit Function]
[instrucciones]
[nombre = expresión]
End Function
La sintaxis de la instrucción Function consta de las
siguientes partes:
Parte
|
Descripción
|
Public
|
Opcional. Indica que el
procedimiento Function es accesible para todos los demás
procedimientos de todos los módulos.
Si se utiliza en un módulo que contiene Option Private, el
procedimiento no estará disponible fuera del proyecto.
|
Private
|
Opcional. Indica que el procedimiento
Function sólo es accesible para otros procedimientos del módulo donde
se declara.
|
Friend
|
Opcional. Se utiliza solamente
en un módulo de clase. Indica que el
procedimiento Function es visible a través del proyecto, pero no es
visible para un controlador de una instancia de un objeto.
|
Static
|
Opcional. Indica que las variables locales del procedimiento Function
se conservan entre las distintas llamadas. El atributo Static no
afecta a las variables que se declaran fuera de Function, incluso
aunque se utilicen en el procedimiento.
|
Nombre
|
Requerido. Nombre del
procedimiento Function; sigue las convenciones estándar de nombres de
variables.
|
lista_
argumentos
|
Opcional. Lista de variables que
representan argumentos que se pasan al procedimiento Function cuando
se llama. La variables múltiples se separan por comas.
|
tipo
|
Opcional. Tipo de datos del valor devuelto por
el procedimiento Function; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no admitido actualmente), Date, String, o (excepto longitud fija), Object, Variant, o cualquier tipo definido por el usuario.
|
instrucciones
|
Opcional. Cualquier grupo de
instrucciones que se van a ejecutar dentro del procedimiento Function.
|
expresión
|
Opcional. Valor de retorno de Function.
|
El argumento lista_argumentos tiene la siguiente
sintaxis y partes:
[Optional] [ByVal | ByRef] [ParamArray]
nombre_variable[( )] [As tipo] [= valor_predeterminado]
Parte
|
Descripción
|
Optional
|
Opcional. Indica que un
argumento no es necesario. Si se utiliza, todos los argumentos posteriores de
lista_argumentos también deben ser opcionales y declararse mediante la
palabra clave Optional. Optional no se puede utilizar para
cualquier argumento si se emplea ParamArray.
|
ByVal
|
Opcional. Indica que el
argumento se pasa por valor.
|
ByRef
|
Opcional. Indica que el
argumento se pasa por referencia. ByRef
es el valor predeterminado en Visual Basic.
|
ParamArray
|
Opcional. Sólo se utiliza como
último argumento de lista_argumentos para indicar que el último
argumento es una matriz Optional de elementos Variant. La
palabra clave ParamArray le permite proporcionar un número arbitrario
de argumentos. No puede utilizarse con ByVal, ByRef u Optional.
|
nombre_
variable
|
Requerido. Nombre de la variable
que representa el argumento; sigue las convenciones estándar de nombres de
variables.
|
tipo
|
Opcional. Tipo de datos del
argumento pasado al procedimiento; puede ser Byte, Boolean, Integer,
Long, Currency, Single, Double, Decimal
(no compatible actualmente), Date, String (sólo longitud
variable), Object, Variant, o un tipo de objeto específico. Si el
parámetro no es Optional, se puede especificar también un tipo
definido por el usuario.
|
valor_
predeterminado
|
Opcional. Cualquier constante o expresión constante. Sólo
es válido para parámetros Optional. Si el tipo es Object, un
valor predeterminado explícito sólo puede ser Nothing.
|
Comentarios
Si no se especifican de forma explícita mediante
Public,
Private o
Friend, los procedimientos
Function son públicos
de manera predeterminada. Si no se emplea
Static, el valor de las
variables locales no se conserva entre distintas llamadas. La palabra clave
Friend
sólo puede usarse en módulos de clase. Sin embargo, puede accederse a los
procedimientos
Friend por procedimientos en cualquier módulo de un
proyecto. Un procedimiento
Friend no aparece en la
biblioteca de tipos de su clase
primaria.
Precaución Los
procedimientos Function pueden ser recursivos; es decir, pueden llamarse
a sí mismos para realizar una tarea determinada. Sin embargo, la recursión
puede provocar el desbordamiento de pila. La palabra clave Static no se
suele utilizar con procedimientos Function recursivos.
Todo el código ejecutable debe estar dentro de
procedimientos. No puede definir un procedimiento Function dentro de
otro procedimiento Function, Sub o Property.
La instrucción Exit Function produce una salida
inmediata de un procedimiento Function. La ejecución del programa
continúa con la instrucción que sigue a la instrucción que llamó al
procedimiento Function. En cualquier lugar de un procedimiento Function
puede aparecer cualquier número de instrucciones Exit Function.
Al igual que un procedimiento
Sub, un procedimiento
Function
es un procedimiento independiente que puede adoptar argumentos, realizar una
serie de instrucciones y cambiar los valores de sus argumentos. Sin embargo, a
diferencia de un procedimiento
Sub, puede utilizar un procedimiento
Function
en el lado derecho de una
expresión
de la misma forma en que utiliza cualquier función intrínseca, como
Sqr,
Cos o
Chr, cuando desea emplear el valor devuelto por la función.
Para llamar a un procedimiento Function, utilice en
una expresión el nombre de función seguido de la lista de argumentos entre
paréntesis. Consulte la instrucción Call para obtener información
específica acerca de cómo llamar a los procedimientos Function.
Para devolver un valor de una función, asigne el valor al
nombre de la función. En cualquier lugar del procedimiento puede aparecer
cualquier número de asignaciones de este tipo. Si no se asigna ningún valor a
nombre,
el procedimiento devolverá un valor predeterminado: una función numérica
devuelve 0, una función de cadena devuelve una cadena de longitud cero
("") y una función
Variant devuelve
Empty. Una función que devuelve una
referencia de objeto devuelve
Nothing si no se asigna ninguna referencia
de objeto a
nombre (mediante
Set) dentro del procedimiento
Function.
El ejemplo siguiente muestra cómo asignar un valor de
retorno a una función llamada BinarySearch. En este caso, False se asigna al nombre para
indicar que no se encontró algún valor.
Function BinarySearch(. . .) As Boolean
. . .
' Valor no encontrado. Devuelve un valor False.
If lower > upper Then
BinarySearch = False
Exit Function
End If
. . .
End Function
Las variables empleadas en procedimientos Function
se dividen en dos categorías: las que se declaran explícitamente dentro del
procedimiento y las que no. Las variables que se declaran explícitamente en un
procedimiento (mediante Dim u otra instrucción equivalente) siempre son
locales del procedimiento. Las variables que se utilizan pero no se declaran
explícitamente en un procedimiento también son locales, a menos que se hayan
declarado explícitamente en algún nivel superior fuera del procedimiento.
Precaución Un
procedimiento puede utilizar una variable que no se ha declarado explícitamente
en el procedimiento, pero puede ocurrir un conflicto de nombres si algo que
definió en un
nivel de módulo tiene
el mismo nombre. Si su procedimiento hace referencia a una variable no
declarada que tiene el mismo nombre que otro procedimiento, constante o
variable, se supone que el procedimiento hace referencia a ese nombre a nivel
de módulo. Declare explícitamente las variables para evitar este tipo de
conflicto. Puede utilizar una instrucción
Option Explicit para forzar la
declaración explícita de variables.
Precaución Visual
Basic puede reorganizar las expresiones aritméticas para mejorar su eficacia
interna. Evite utilizar un procedimiento Function en una expresión
aritmética cuando la función cambie el valor de las variables de la misma
expresión.
Utilizar instrucciones Do...Loop
Se pueden usar instrucciones
Do...Loop para ejecutar un
bloque de
instrucciones un número
indefinido de veces. Las instrucciones se repiten mientras una condición sea
True
o hasta que llegue a ser
True.
Repetir instrucciones mientras una condición es True
Hay dos formas de utilizar la
palabra
clave While para comprobar el estado de una condición en una
instrucción
Do...Loop. Se puede comprobar la condición antes de entrar
en el bucle, o después de que el bucle se haya ejecutado al menos una vez.
En el siguiente procedimiento
ComPrimeroWhile, la condición se comprueba antes de entrar en el
bucle. Si miNum vale 9 en
vez de 20, las instrucciones contenidas en el bucle no se ejecutarán nunca. En
el procedimiento ComFinalWhile,
las instrucciones contenidas en el bucle sólo se ejecutarán una vez antes de
que la condición llegue a ser False.
Sub ComPrimeroWhile()
contador = 0
miNum = 20
Do While miNum > 10
miNum = miNum - 1
contador = contador + 1
Loop
MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub
Sub ComFinalWhile()
contador = 0
miNum = 9
Do
miNum = miNum - 1
contador = contador + 1
Loop While miNum > 10
MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub
Repetir instrucciones hasta que una condición llegue a ser True
Hay dos formas de utilizar la palabra clave Until para
comprobar el estado de una condición en una instrucción Do...Loop. Se
puede comprobar la condición antes de entrar en el bucle (como muestra el
procedimiento ComPrimeroUntil)
o se pueden comprobar después de que el bucle se haya ejecutado al menos una
vez (como muestra el procedimiento ComFinalUntil).
El bucle sigue ejecutándose mientras la condición siga siendo False.
Sub ComPrimeroUntil()
contador = 0
miNum = 20
Do Until miNum = 10
miNum = miNum - 1
contador = contador + 1
Loop
MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub
Sub ComFinalUntil()
contador = 0
miNum = 1
Do
miNum = miNum + 1
contador = contador + 1
Loop Until miNum = 10
MsgBox "El bucle se ha repetido " & counter & " veces."
End Sub
Instrucción de salida de Do...Loop desde dentro del bucle
Es posible salir de Do...Loop usando la instrucción Exit
Do. Por ejemplo, para salir de un bucle sin fin, se puede usar la
instrucción Exit Do en el bloque de instrucciones True de una
instrucción If...Then...Else o Select Case. Si la condición es False,
el bucle seguirá ejecutándose normalmente.
En el siguiente ejemplo, se asigna a miNum un valor que crea un bucle sin fin. La instrucción If...Then...Else
comprueba esa condición y ejecuta entonces la salida, evitando así el bucle sin
fin.
Sub EjemploSalida()
contador = 0
miNum = 9
Do Until miNum = 10
miNum = miNum - 1
contador = contador + 1
If miNum < 10 Then Exit Do
Loop
MsgBox "El bucle se ha repetido " & contador & " veces."
End Sub
Nota Para detener la ejecución de un bucle
sin fin, presione la tecla ESC o CTRL+PAUSE.
Utilizar instrucciones For Each...Next
Las instrucciones
For Each...Next repiten un bloque de
instrucciones para cada uno de los
objetos de una
colección o para cada elemento de una
matriz. Visual Basic asigna valor
automáticamente a una
variable cada
vez que se ejecuta el bucle. Por ejemplo, el siguiente
procedimiento cierra todos los
formularios excepto el que contiene al procedimiento que se está ejecutando.
Sub CierraFormul()
For Each frm In Application.Forms
If frm.Caption <> Screen.ActiveForm.Caption Then frm.Close
Next
End Sub
El siguiente código recorre todos los elementos de una matriz e
introduce en cada uno de ellos el valor de la variable índice I.
Dim PruebaMatriz(10) As Integer, I As Variant
For Each I In PruebaMatriz
PruebaMatriz(I) = I
Next I
Recorrer un conjunto de celdas
Se puede usar el bucle For Each...Next para recorrer las
celdas pertenecientes a un rango determinado. El siguiente procedimiento
recorre las celdas del rango A1:D10 de la Página1 y convierte cualquier valor
absoluto menor de 0,01 en 0 (cero).
Sub RedondeoACero()
For Each miObjeto in miColeccion
If Abs(miObjeto.Value) < 0.01 Then miObjeto.Value = 0
Next
End Sub
Salir de un bucle For Each...Next antes de que finalice
Se puede salir de un bucle For Each...Next mediante la
instrucción Exit For. Por ejemplo, cuando se produce un error se puede
usar la instrucción Exit For en el bloque de instrucciones True
de una instrucción If...Then...Else o Select Case que detecte
específicamente el error. Si el error no se produce, la instrucción If…Then…Else
es False y el bucle se seguirá ejecutando normalmente.
El siguiente ejemplo detecta la primera celda del rango A1:B5 que no
contiene un número. Si se encuentra una celda en esas condiciones, se presenta
un mensaje en pantalla y Exit For abandona el bucle.
Sub BuscaNumeros()
For Each miObjeto In MiColeccion
If IsNumeric(miObjeto.Value) = False Then
MsgBox "El objeto contiene un valor no numérico."
Exit For
End If
Next c
End Sub
Utilizar instrucciones For...Next
Las instrucciones
For...Next se pueden utilizar para
repetir un bloque de
instrucciones un
número determinado de veces. Los bucles
For usan una
variable contador cuyo valor se aumenta o
disminuye cada vez que se ejecuta el bucle.
El siguiente
procedimiento
hace que el equipo emita un sonido 50 veces. La instrucción
For
determina la variable contador
x
y sus valores inicial y final. La instrucción
Next incrementa el valor
de la variable contador en 1.
Sub Bips()
For x = 1 To 50
Beep
Next x
End Sub
Mediante la
palabra
clave Step, se puede aumentar o disminuir la variable contador en el
valor que se desee. En el siguiente ejemplo, la variable contador
j se incrementa en 2 cada vez que
se repite la ejecución del bucle. Cuando el bucle deja de ejecutarse,
total representa la suma de 2, 4,
6, 8 y 10.
Sub DosTotal()
For j = 2 To 10 Step 2
total = total + j
Next j
MsgBox "El total es
" & total
End Sub
Para disminuir la variable contador utilice un valor
negativo en Step. Para disminuir la variable contador es preciso
especificar un valor final que sea menor que el valor inicial. En el siguiente
ejemplo, la variable contador miNum se disminuye en 2 cada vez que se repite el bucle. Cuando
termina la ejecución del bucle, total representa la suma de 16, 14, 12, 10, 8, 6, 4 y 2.
Sub NuevoTotal()
For miNum = 16 To 2 Step -2
total = total + miNum
Next miNum
MsgBox "El total es
" & total
End Sub
Nota
No es necesario incluir el nombre de la variable contador después de la
instrucción Next. En los ejemplos anteriores, el nombre de la variable
contador se ha incluido para facilitar la lectura del código.
Se puede abandonar una instrucción For...Next antes
de que el contador alcance su valor final, para ello se utiliza la instrucción Exit
For. Por ejemplo, si se produce un error se puede usar la instrucción Exit
For en el bloque de instrucciones True de una instrucción If...Then...Else
o Select Case que detecte específicamente ese error. Si el error no se
produce, la instrucción If…Then…Else es False y el bucle
continuará ejecutándose normalmente.
Utilizar instrucciones If...Then...Else
Se puede usar la instrucción
If...Then...Else para ejecutar
una
instrucción o bloque de
instrucciones determinadas, dependiendo del valor de una condición. Las
instrucciones
If...Then...Else se pueden anidar en tantos niveles como
sea necesario. Sin embargo, para hacer más legible el código es aconsejable
utilizar una instrucción
Select Case en vez de recurrir a múltiples
niveles de instrucciones
If...Then...Else anidadas.
Ejecutar una sola instrucción cuando una condición es True
Para ejecutar una sola instrucción cuando una condición es
True,
se puede usar la sintaxis de línea única de la instrucción
If...Then...Else.
El siguiente ejemplo muestra la sintaxis de línea única, en la que se omite el
uso de la
palabra clave Else:
Sub FijarFecha()
miFecha = #13/2/95#
If miFecha < Now Then miFecha = Now
End Sub
Para ejecutar más de una línea de código, es preciso utilizar la
sintaxis de múltiples líneas. Esta sintaxis incluye la instrucción End If,
tal y como muestra el siguiente ejemplo:
Sub AvisoUsuario(valor as Long)
If valor = 0 Then
Aviso.ForeColor = "Red"
Aviso.Font.Bold = True
Aviso.Font.Italic = True
End If
End Sub
Ejecutar unas instrucciones determinadas si una condición es True y
ejecutar otras si es False
Use una instrucción If...Then...Else para definir dos bloques
de instrucciones ejecutables: un bloque que se ejecutará cuando la condición es
True y el otro que se ejecutará si la condición es False.
Sub AvisoUsuario(valor as Long)
If valor = 0 Then
Aviso.ForeColor = vbRed
Aviso.Font.Bold = True
Aviso.Font.Italic = True
Else
Aviso.Forecolor = vbBlack
Aviso.Font.Bold = False
Aviso.Font.Italic = False
End If
End Sub
Comprobar una segunda condición si la primera condición es False
Se pueden añadir instrucciones ElseIf a una instrucción If...Then...Else
para comprobar una segunda condición si la primera es False. Por
ejemplo, el siguiente procedimiento función calcula una bonificación salarial
dependiendo de la clasificación del trabajador. La instrucción que sigue a la
instrucción Else sólo se ejecuta cuando las condiciones de todas las
restantes instrucciones If y ElseIf son False.
Function Bonificación(rendimiento, salario)
If rendimiento = 1 Then
Bonificación = salario * 0.1
ElseIf rendimiento = 2 Then
Bonificación= salario * 0.09
ElseIf rendimiento = 3 Then
Bonificación = salario * 0.07
Else
Bonificación = 0
End If
End Function
Utilizar
instrucciones Select Case
La instrucción
Select Case se utiliza como alternativa
a las instrucciones
ElseIf en instrucciones
If...Then...Else
cuando se compara una
expresión con
varios valores diferentes. Mientras que las instrucciones
If...Then...Else
pueden comparar una expresión distinta para cada instrucción
ElseIf, la
instrucción
Select Case compara únicamente la expresión que evalúa al
comienzo de la estructura de control.
En el siguiente ejemplo, la instrucción
Select Case
evalúa el argumento
rendimiento que se pasa al procedimiento. Observe que cada instrucción
Case puede contener más de un valor, una gama de valores, o una
combinación de valores y
operadores de
comparación. La instrucción opcional
Case Else se ejecuta si la
instrucción
Select Case no encuentra ninguna igualdad con los valores de
la instrucciones
Case.
Function Bonificación(rendimiento, salario)
Select Case rendimiento
Case 1
Bonificación =
salario * 0.1
Case 2, 3
Bonificación =
salario * 0.09
Case 4 To 6
Bonificación = salario * 0.07
Case Is > 8
Bonificación = 100
Case Else
Bonificación = 0
End Select
End Function
Utilizar instrucciones With
La instrucción
With permite especificar una vez un
objeto o
tipo definido por el usuario en una serie
entera de
instrucciones. Las
instrucciones
With aceleran la ejecución de los procedimientos y ayudan
a evitar el tener que escribir repetidas veces las mismas palabras.
El siguiente ejemplo introduce en un rango de celdas el
número 30, aplica a esas celdas un formato en negrita y hace que su color de
fondo sea el amarillo.
Sub RangoFormato()
With Worksheets("Hoja1").Range("A1:C10")
.Value = 30
.Font.Bold = True
.Interior.Color = RGB(255, 255, 0)
End With
End Sub
Las instrucciones With se pueden anidar para
aumentar su eficiencia. El siguiente ejemplo inserta una formula en la celda A1
y selecciona a continuación el tipo de letra.
Sub MiEntrada()
With
Workbooks("Libro1").Worksheets("Hoja1").Cells(1, 1)
.Formula = "=SQRT(50)"
With .Font
.Name = "Arial"
.Bold = True
.Size = 8
End With
End With
End Sub
Comprender el alcance y la visibilidad
El alcance de una variable se determina cuando se declara. es
aconsejable declarar todas las variables explícitamente para evitar errores de
conflicto de nombres entre variables que tiene alcances distintos.
Definir el alcance de un nivel de procedimiento
Una variable o constante definida desde dentro de un procedimiento
no es visible fuera de ese procedimiento. Sólo el procedimiento que contiene la
declaración de la variable puede usarlos. En el siguiente ejemplo, el primer procedimiento
presenta un cuadro de mensaje que contiene una cadena de texto. El segundo
procedimiento presenta un cuadro de mensaje en blanco ya que la variable strMensaje es local para el primer
procedimiento.
Sub VariableLocal()
Dim strMensaje As String
strMensaje = "Esta variable no se puede usar fuera de este procedimiento."
MsgBox strMensaje
End Sub
Sub FueraAlcance()
MsgBox strMensaje
End Sub
Definir el alcance de nivel de módulo privado
Se pueden definir variables y constantes de nivel de módulo en la
sección Declarations de un módulo. Las variables de nivel de módulo pueden ser
públicas o privadas. Las variables públicas están disponibles para todos los
procedimientos de todos los módulos de un
proyecto;
las variables privadas sólo están disponibles para los procedimientos de ese
módulo. Las variables declaradas con la instrucción
Dim en la sección
Declarations tiene un alcance privado a no ser que se especifique otra cosa.
Sin embargo, es aconsejable colocar la palabra clave
Private delante del
nombre de la variable para que el alcance sea evidente al leer el código.
En el siguiente ejemplo, la variable de cadena strMensaje está disponible para
cualquier procedimiento definido en el módulo. Cuando se llama al segundo
procedimiento, presenta el contenido de la variable de cadena strMensaje en un cuadro de dialogo.
' Añada lo siguiente a la sección de Declarations del módulo.
Private strMensaje sAs String
Sub InicializaVariablePrivada()
strMensaje = "Esta variable no se puede usar fuera de este módulo."
End Sub
Sub UsaVariablePrivada()
MsgBox strMensaje
End Sub
Nota Los procedimientos públicos de un
módulo estándar o
módulo de clase están disponibles para
cualquier
proyecto de referencia al
proyecto actual. Para limitar el alcance de todos los procedimientos de un
módulo al proyecto actual, añada una instrucción
Option Private Module a
la sección Declarations del módulo. Las variables y procedimientos públicos
seguirán estando disponibles para los restantes procedimientos del proyecto
actual, pero no lo estarán para los proyectos que a los que puedan hacer
referencia.
Definir el alcance de nivel de módulo público
Si se declara una variable de nivel de módulo como pública, estará
disponible para todos los procedimientos del mismo proyecto. En el siguiente
ejemplo, la variable de cadena strMensaje
se puede usar en cualquier procedimiento de un módulo del proyecto.
' Incluya esto en la sección Declarations del módulo.
Public strMensaje As String
Todos los procedimientos son públicos a menos que se especifique lo
contrario, excepto en el caso de los procedimientos evento. Cuando Visual Basic
crea un procedimiento evento, la
palabra
clave Private se inserta automáticamente antes de la declaración del
procedimiento. Para los restantes procedimientos, debe declarar explícitamente
con la palabra clave
Private si no desea que sean públicos.
Se pueden usar procedimientos, variables y constantes públicas
definidas en módulos estándar o módulos de clase de proyectos que hagan
referencia al actual. Sin embargo, es preciso establecer una referencia al
proyecto en que están definidos.
Los procedimientos, variables y constantes públicas definidas en
módulos que no sean estándar o de clase, como pueden ser los
módulos de formulario o módulos de
informe, no están disponibles desde los proyectos que hacen referencia al
actual, ya que estos módulos son privados para el proyecto en el que residen.
Comprender la vida de las variables
El tiempo durante el que una
variable
conserva su valor se conoce como vida. El valor de la variable puede cambiar
durante su vida, pero conserva algún valor. Cuando una variable pierde su
alcance, ya no tiene ningún valor.
Cuando un
procedimiento
comienza a ejecutarse, se inicializan todas las variables. Las variables
numéricas se inicializan a cero, las cadenas de longitud variable se
inicializan a una cadena vacía de longitud cero ("") y una cadena de
longitud fija se llena con los caracteres correspondientes al código ASCII 0, o
Chr(0
). Las variables
Variant
se inicializan a
Empty. Cada uno de
los elementos de una variable de
tipo
definido por el usuario se inicializa como si se tratase de una variable
independiente.
Cuando se declara una
variable
de objeto, se reserva el espacio correspondiente en memoria, pero se le da
el valor
Nothing hasta que se le asigne una referencia a objeto mediante
la instrucción
Set.
Si el valor de una variable no cambia durante la ejecución del
código, conserva su valor de inicialización hasta que pierda alcance.
Una variable
de nivel de
procedimiento declarada mediante la instrucción
Dim conserva su
valor hasta que el procedimiento termina de ejecutarse. Si el procedimiento
llama a otros procedimientos, la variable conserva su valor también mientras se
ejecutan esos procedimientos.
Si una variable de nivel de procedimiento de declara con la palabra
clave
Static, la variable conserva su valor mientras haya código en
ejecución, sea cual sea el
módulo.
Cuando todo el código ha terminado de ejecutarse, la variable pierde su alcance
y su valor. Su vida es la misma que la de una variable de
nivel de módulo.
Una variable de nivel de módulo es distinta a una variable estática.
En un
módulo estándar o un
módulo de clase, conserva su valor hasta
que se termina de ejecutar el código. En un módulo de clase conserva su valor
mientras exista una definición de la clase. Las variables de nivel de módulo
consumen memoria hasta que sus valores se vuelven a inicializa, por eso sólo se
deben utilizar cuando sea necesario.
Si se incluye la palabra clave Static antes de una
instrucción Sub o Function, los valores de todas las variables de
nivel de procedimiento del procedimiento se conservarán entre las sucesivas
llamadas.
Comprender la
sintaxis de Visual Basic
En la sección de Ayuda de Visual Basic correspondiente a un
método,
instrucción o
procedimiento Function la sintaxis
muestra todos los elementos necesarios para utilizar correctamente ese método,
instrucción o función. Los ejemplos siguientes explican como deben
interpretarse los elementos sintácticos más comunes.
Sintaxis del método Activate
objeto.Activate
En la sintaxis del método
Activate, la palabra
"objeto" en cursiva es la posición reservada para la información que
introduce el usuario — en este caso, código que devuelve un
objeto. Las palabras que se muestran en
negrita deben escribirse exactamente tal y como se indica. Por ejemplo, el
siguiente
procedimiento activa la
segunda ventana en el documento activo.
Sub Activar()
Windows(2).Activate
End Sub
Sintaxis de la función MsgBox
MsgBox(texto[, botones] [, título] [, archivoayuda,
contexto])
En la sintaxis de la función
MsgBox, las palabras en
cursiva y negrita son
argumentos con
nombre de la función. Los
argumentos
que aparecen entre corchetes son opcionales. (No escriba los corchetes en el
código de Visual Basic). En el caso de la función
MsgBox, el único
argumento que se debe incluir es el texto de la pregunta.
Los argumentos para funciones y métodos se pueden
especificar en el código mediante su posición o por su nombre. Para especificar
argumentos mediante su posición, siga el orden que se indica en la sintaxis,
separando los argumentos con una coma, por ejemplo:
MsgBox "¡Su respuesta es correcta!",0,"Cuadro de
Respuesta"
Para especificar un argumento mediante su nombre basta con
usar el nombre del argumento seguido de dos puntos y un signo igual (:=)
y el valor del argumento. Los argumentos con nombre se pueden especificar en
cualquier orden, por ejemplo:
MsgBox Title:="Cuadro de Respuesta", Prompt:="¡Su
respuesta es correcta!"
La sintaxis de las funciones y algunos métodos muestran los
argumentos entre paréntesis. Estas funciones y métodos devuelven valores, por
eso deben encerrarse los argumentos entre paréntesis al asignar un valor a una
variable. Si se ignora el valor de retorno o si no se pasan argumentos en forma
alguna, no deben incluirse los paréntesis. Los métodos que no devuelven valores
no necesitan que sus argumentos aparezcan encerrados entre paréntesis. Estas
normas son aplicables tanto si se usan argumentos posicionales o nominativos.
En el siguiente ejemplo, el valor que devuelve la función MsgBox
es un número que indica el botón seleccionado almacenado en la variable miVar. Dado que se utiliza el
valor que devuelve la función, es preciso utilizar paréntesis. Otro cuadro de
mensaje presenta entonces en pantalla el valor de la variable.
Sub Pregunta()
miVar =
MsgBox(Prompt:="Me gusta mi trabajo.", _
Title:="Cuadro
de respuesta", Buttons:="4")
MsgBox miVar
End Sub
Sintaxis de la instrucción Option
Option Compare {Binary
| Text | Database}
En la sintaxis de la instrucción
Option Compare,
las llaves y la línea vertical indican una elección obligatoria entre tres
opciones. (No escriba las llaves en la instrucción de Visual Basic). Por
ejemplo, la siguiente instrucción especifica que dentro del
módulo, las cadenas se comparan en un
criterio de ordenación que no depende
del mayúsculas o minúsculas.
Option Compare Text
Sintaxis de la instrucción Dim
Dim nombrevariable[([subscriptos])]
[As tipo] [, nombrevariable[([subscriptos])]
[As tipo]] . . .
En la sintaxis de la instrucción
Dim, la palabra
Dim
es una
palabra clave exigida. El
único elemento necesario es
nombrevariable (el nombre de la variable).
Por ejemplo, la siguiente instrucción crea tres variables:
miVar,
siguienteVar y
terceraVar. Estas variables se
declaran automáticamente como
Variant.
Dim miVar, siguienteVar, terceraVar
El siguiente ejemplo declara una variable como
String.
Al incluir un
tipo de datos se ahorra
memoria y se pueden evitar errores en el código.
Dim miRespuesta As String
Para declarar varias variables en una instrucción, debe
incluirse el tipo de datos para cada variable. Las variables declaradas sin un
tipo de datos se declaran automáticamente como Variant.
Dim x As Integer, y As Integer, z As Integer
En la siguiente instrucción, a x e y se les asigna el tipo de datos Variant.
Sólo a z se le
asigna el tipo de datos Integer.
Dim x, y, z As Integer
Si se declara una variable
matriz, deben incluirse los paréntesis.
Los subscriptos son opcionales. La siguiente instrucción define las dimensiones
de una matriz dinámica,
miMatriz.
Dim miMatriz()
Comprender los argumentos
con nombre y opcionales
Cuando se hace una llamada a un
procedimiento
Sub o
Function, se pueden incluir
argumentos de forma posicional, es decir,
en el orden en que aparecen en la definición del procedimiento, o se pueden
incluir los argumentos con su nombre sin respetar ningún orden.
Por ejemplo, el siguiente procedimiento Sub acepta tres
argumentos:
Sub PasaArgs(strNombre As String, intEdad As Integer, dteNacimiento As Date)
Debug.Print strNombre, intEdad, dteNacimiento
End Sub
Al llamar este procedimiento se pueden incluir sus argumentos en la
posición correcta, todos separados por comas, tal y como muestra el siguiente
ejemplo:
PasaArgs "María", 29, #21-2-69#
También se puede hacer una llamada a este procedimiento e incluir
argumentos con nombre, separados por
comas.
PasaArgs intEdad:=29, dteNacimiento:=#21/2/69#, strNombre:="Maria"
Un argumento nominativo está formado por el nombre del argumento
seguido por dos puntos y un signo igual (:=), todo ello seguido por el
valor del argumento.
Los argumentos con nombre son muy útiles cuando se llama a
procedimientos con argumentos opcionales. Si se usan argumentos con nombre no
será necesario incluir sucesivas comas para sustituir argumentos posicionales
ausentes. Al usar argumentos con nombre es más fácil controlar qué argumentos
se pasan y cuáles se omiten.
Los argumentos opcionales van precedidos por la
palabra clave Optional en la
definición del procedimiento. En la definición del procedimiento se puede
especificar también un valor predefinido para el argumento opcional. Por
ejemplo:
Sub ArgsOpcionales(strProvincia As String, Optional strPais As String = "MÉXICO")
. . .
End Sub
Cuando se hace una llamada a un procedimiento con un argumento
opcional, se puede optar por especificar o no el argumento opcional. Si no se
especifica, se usará el valor predefinido si existe. Si no se ha especificado
tampoco un valor predefinido, el argumento tendrá el valor de inicialización
que le corresponda a una variable del mismo tipo.
El siguiente procedimiento incluye un argumento opcional, la
variable varPais. La función
IsMissing determina si se ha pasado o no un argumento opcional al
procedimiento.
Sub ArgsOpcionales(strProvincia As String, Optional intRegion As Integer, _
Optional strPais As String = "MÉXICO")
If IsMissing(intRegion) AND IsMissing(strPais) Then
Debug.Print strProvincia
ElseIf IsMissing(strPais) Then
Debug.Print strProvincia, intRegion
ElseIf IsMissing(intRegion) Then
Debug.Print strProvincia, strPais
Else
Debug.Print strProvincia, intRegion, strPais
End If
End Sub
Este procedimiento se puede llamar empleando argumentos con nombre
tal y como muestran los siguientes ejemplos.
ArgsOpcionales strPais:="MÉXICO", strProvincia:="SE"
ArgsOpcionales strProvincia:= "SE", intRegion:=5
Comprender los tipos de datos
Variant
El tipo de datos
Variant se especifica automáticamente si no
se especifica otro
tipo de datos al
declarar una
constante,
variable, o
argumento. Las variables declaradas como
del tipo de datos
Variant pueden contener valores numéricos, cadenas de
texto, fecha, hora o Booleans y pueden convertir los valores que contienen de
forma automática. Los valores numéricos
Variant ocupan 16 bytes de
memoria (lo que sólo es significativo en
procedimientos
grandes o
módulos complejos) y son más
lentos a la hora de su acceso que las variables de tipo explícito de los
restantes tipos. Es muy raro utilizar el tipo de datos
Variant para una
constante. Los valores de cadena
Variant necesitan 22 bytes de memoria.
Las siguientes instrucciones crean variables Variant:
Dim miVar
Dim tuVar As Variant
laVar = "Esto es un texto."
La última instrucción no declara explícitamente la variable laVar, sino que la declara
implícitamente, o automáticamente. Las variables que se declaran implícitamente
se especifican como del tipo de datos Variant.
Sugerencia Si se especifica un tipo de
datos para una variable o argumento y a continuación se utiliza un tipo erróneo
de datos, se producirá un error de tipo de datos. Para evitar errores de tipo
de datos, se deben usar sólo variables (del tipo de datos Variant) o
declarar explícitamente todas las variables y especificar para ellas un tipo de
datos. El último método es el preferible.
Comprender objetos, propiedades,
métodos y eventos
Un objeto representa un elemento de una aplicación, como una hoja de
cálculo, una celda, un diagrama, un formulario o un informe. En código de
Visual Basic, un objeto debe identificarse antes de se pueda aplicar uno de los
métodos del objeto o cambiar el valor
de una de sus
propiedades.
Una colección es un objeto que contiene varios objetos que
normalmente, pero no siempre, son del mismo tipo. En Microsoft Excel, por
ejemplo, el objeto Workbooks contiene todos los objetos Workbook
abiertos. En Visual Basic, la colección Forms contiene todos los objetos
Form existentes en una aplicación.
Los elementos de una colección se pueden identificar mediante su
número o su nombre. Por ejemplo, en el siguiente
procedimiento,
Libro(1) identifica al primer objeto
Workbook
abierto.
Sub CierraPrimero()
Libro(1).Close
End Sub
El siguiente procedimiento utiliza un nombre especificado como
cadena para identificar un objeto Form.
Sub CierraForm()
Forms("MiForm.frm").Close
End Sub
También es posible operar al mismo tiempo sobre toda una colección
de objetos siempre que los objetos compartan
métodos comunes. Por ejemplo, el
siguiente procedimiento cierra todos los formularios abiertos.
Sub CierraTodos()
Forms.Close
End Sub
Método es toda acción que puede realizar un objeto. Por ejemplo, Add
es un método del objeto ComboBox ya que sirve para añadir un nuevo
elemento a un cuadro combinado.
El siguiente procedimiento utiliza el método Add para añadir
un nuevo elemento a un ComboBox.
Sub AñadeElemen(nuevoElemento as String)
Combo1.Add nuevoElemento
End Sub
Propiedad es un atributo de un objeto que define una de las
características del objeto, tal como su tamaño, color o localización en la
pantalla, o un aspecto de su comportamiento, por ejemplo si está visible o
activado. Para cambiar las características de un objeto, se cambia el valor de
sus propiedades
Para dar valor a una propiedad, hay que colocar un punto detrás de
la referencia a un objeto, después el nombre de la propiedad y finalmente el
signo igual (=) y el nuevo valor de la propiedad. Por ejemplo, el
siguiente procedimiento cambia el título de un formulario de Visual Basic dando
un valor a la propiedad Caption.
Sub CambiaNombre(nuevoTitulo)
miForm.Caption = nuevoTitulo
End Sub
Hay propiedades a las que no se puede dar valor. El tema de ayuda de
cada propiedad indica si es posible leer y dar valores a la propiedad
(lectura/escritura), leer sólo el valor de la propiedad (sólo lectura) o sólo
dar valor a la propiedad (sólo escritura).
Se puede obtener información sobre un objeto devolviendo el valor de
una de sus propiedades. El siguiente procedimiento utiliza un cuadro de diálogo
para presentar el título que aparece en la parte superior del formulario activo
en ese momento.
Sub NombreFormEs()
formNonmbre = Screen.ActiveForm.Caption
MsgBox formNombre
End Sub
Evento es toda acción que puede ser reconocida por un objeto, como
puede ser el clic del mouse o la pulsación de una tecla y para la que es
posible escribir código como respuesta. Los eventos pueden ocurrir como
resultado de una acción del usuario o del código de l programa, también pueden
ser originados por el sistema.
Devolver objetos
Cada aplicación tiene una forma de devolver los objetos que
contiene. Sin embargo estos procedimientos no son siempre iguales, por ello
debe consultar el tema de ayuda correspondiente al objeto o colección que está
usando en la aplicación para determinar la forma de devolver el objeto.
Declarar constantes
Al declarar una
constante,
se puede asignar a un valor un nombre que tenga algún significado apropiado. La
instrucción
Const se utiliza para declarar una constante y darle valor.
Una constante no puede modificarse o cambiar de valor una vez que ha sido
declarada.
Se puede declarar una constante dentro de un
procedimiento o al principio de un
módulo, en la sección de Declarations.
Las constantes a
nivel de módulo son
privadas, a menos que se especifique lo contrario. Para declarar una constante
pública a nivel de módulo, la instrucción
Const debe ir precedida por la
palabra clave Public. Se puede
declarar explícitamente una constante como privada colocando la palabra clave
Private
antes de la instrucción
Const para facilitar la lectura y comprensión
del código. Si desea más información, consulte la sección "Comprender el
alcance y la visibilidad" en la Ayuda de Visual Basic.
El siguiente ejemplo declara la constante Public EdadCon como un Integer y le
asigna el valor 34.
Public Const EdadCon As Integer = 34
Las constantes se pueden declarar de uno de los siguientes tipos de
datos: Boolean, Byte, Integer, Long, Currency,
Single, Double, Date, String, o Variant.
Dado que ya se conoce el valor de una constante, es muy fácil elegir el tipo de
datos en la instrucción Const. Si desea más información sobre tipos de
datos, consulte la sección "Tipo de datos Summary" en la Ayuda de
Visual Basic.
En una sola instrucción se pueden declarar varias constantes. Para
especificar un tipo de datos, debe incluirse el tipo de datos para cada
constante. En la siguiente instrucción se declaran como Integer las
constantes EdadCon y SalarioCon.
Const EdadCon As Integer = 34, SalarioCon As Currency = 35000
Declarar matrices
Las
matrices se declaran
igual que las restantes
variables,
utilizando instrucciones
Dim,
Static,
Private, o
Public.
La diferencia entre las variables escalares (aquellas que no son matrices) y
las variables matriz es que normalmente se debe especificar el tamaño de la
matriz. Una matriz con un tamaño especificado es una matriz de tamaño fijo. Una
matriz cuyo tamaño puede cambiar mientras el programa se está ejecutando es una
matriz dinámica.
Si una matriz se indexa desde 0 ó desde 1 depende del valor de la
instrucción Option Base. Si Option Base 1 no
se especifica, todos los índices de matrices comienzan en cero.
Declarar una matriz fija
En la siguiente línea de código se declara como matriz Integer
una matriz de tamaño fijo con 11 filas y 11 columnas:
Dim MiMatriz(10, 10) As Integer
El primer argumento corresponde al número de filas y el segundo al
número de columnas.
Como sucede en cualquier otra declaración de variable, a menos que
se especifique para la matriz un
tipo de
datos, los elementos de ésta serán del tipo
Variant. Cada elemento
numérico
Variant de la matriz utiliza 16 bytes. Cada elemento de cadena
Variant
utiliza 22 bytes. Para escribir código de la forma más compacta posible, debe
declarar explícitamente sus matrices con un tipo de datos distinto a
Variant.
Las siguientes líneas de código comparan el tamaño de varias matrices:
' Una matriz Integer utiliza 22 bytes (11 elementos * 2 bytes).
ReDim MiMatrizInteger(10) As Integer
' Una matriz Double-precision utiliza 88 bytes (11 elementos * 8 bytes).
ReDim MiMatrizDoble(10) As Double
' Una matriz Variant utiliza al menos 176 bytes (11 elementos * 16 bytes).
ReDim MiMatrizVariant(10)
' La matriz Integer utiliza 100 * 100 * 2 bytes (20.000 bytes).
ReDim MiMatrizInteger(99, 99) As Integer
' La matriz Double-precision utiliza 100 * 100 * 8 bytes (80.000 bytes).
ReDim MiMatrizDoble (99, 99) As Double
' La matriz Variant utiliza al menos 160.000 bytes (100 * 100 * 16 bytes).
ReDim MiMatrizVariant(99, 99)
El tamaño máximo de una matriz depende del sistema operativo y de la
cantidad de memoria disponible. Es más lento utilizar una matriz que sobrepasa
la cantidad de memoria RAM disponible en el sistema ya que los datos tienen que
ser leídos y escritos del disco.
Declarar una matriz dinámica
Al declarar una matriz dinámica se puede cambiar el tamaño de una
matriz mientras que el código se está ejecutando. Para declarar una matriz
dinámica se usan las instrucciones Static, Dim, Private, o
Public, dejando los paréntesis vacíos, tal y como se muestra en el
siguiente ejemplo.
Dim MatrizSingle() As Single
Nota Se puede usar la instrucción ReDim
para declarar implícitamente una matriz dentro de un procedimiento. Tenga
cuidado para no cambiar el nombre de la matriz cuando use la instrucción ReDim,
ya que se creará una segunda matriz incluso en el caso de que se haya incluido
la instrucción Option Explicit en el módulo.
La instrucción
ReDim se puede utilizar en un procedimiento,
dentro del
alcance de la matriz, para
cambiar el número de dimensiones, definir el número de elementos y para definir
los límites superior e inferior para cada dimensión. Se puede usar la
instrucción
ReDim para modificar la matriz dinámica cuantas veces sea
necesario. Sin embargo, cada vez que se hace, se pierden los valores
almacenados en la matriz. Se puede usar la instrucción
ReDim Preserve
para ampliar una matriz conservando los valores que contiene. Por ejemplo, la
siguiente instrucción añade 10 nuevos elementos a la matriz
MatrizVar sin perder los valores
almacenados en los elementos originales.
ReDim Preserve MatrizVar(UBound(MatrizVar) + 10)
Nota Cuando se utiliza la
palabra clave Preserve con una
matriz dinámica, sólo se puede cambiar el límite superior de la última dimensión,
no pudiendo modificarse el número de dimensiones.
Declarar variables
Para declarar
variables se
utiliza normalmente una instrucción
Dim. La instrucción de declaración
puede incluirse en un procedimiento para crear una variable de
nivel de procedimiento. O puede colocarse
al principio de un
módulo, en la
sección Declarations, para crear una variable de
nivel de módulo.
El siguiente ejemplo crea la variable
NombreTexto y específicamente le asigna el
tipo de datos String.
Dim NombreTexto As String
Si esta instrucción aparece dentro de un procedimiento, la variable
NombreTexto se puede usar sólo en ese
procedimiento. Si la instrucción aparece en la sección Declarations del módulo,
la variable
NombreTexto
estará disponible en todos los procedimientos dentro del módulo, pero para los
restantes módulos del
proyecto. Para
hacer que esta variable esté disponible para todos los procedimientos de un
proyecto, basta con comenzar la declaración con la instrucción
Public,
tal y como muestra el siguiente ejemplo:
Public NombreTexto As String
Si desea más información sobre cómo dar nombre a sus variables,
puede consultar la sección "Visual Basic Naming Rules" en la Ayuda de
Visual Basic.
Las variables se pueden declarar como de uno de los siguientes tipos
de datos:
Boolean,
Byte,
Integer,
Long,
Currency,
Single,
Double,
Date,
String (para cadenas de longitud
variable),
String * longitud (para cadenas de longitud fija),
Object,
o
Variant. Si no se especifica el tipo de datos, el tipo de datos
Variant
es el predefinido. También es posible crear un
tipo definido por el usuario empleando la
instrucción
Type. Si desea más información sobre tipos de datos puede
consultar la sección "Tipo de datos Summary" en la Ayuda de Visual
Basic.
Se pueden declarar varias variables en una instrucción. Para
especificar el tipo de datos se debe incluir un tipo de datos para cada
variable. En la siguiente instrucción se declaran las variables intX, intY,
e intZ como del tipo Integer.
Dim intX As Integer, intY As Integer, intZ As Integer
En la siguiente instrucción, intX
e intY se declaran como del
tipo Variant; y sólo intZ
se declara como del tipo Integer.
Dim intX, intY, intZ As Integer
No es necesario especificar el tipo de datos en la instrucción de
declaración. Si se omite, la variable será del tipo Variant.
Utilizar la instrucción Public
La instrucción Public se puede utilizar para declarar
variables públicas de nivel de módulo.
Public NombreTexto As String
Las variables públicas se pueden usar en cualquier procedimiento del
proyecto. Si una variable pública se declara en un
módulo estándar o en un
módulo de clase, también se podrá usar
en los proyectos referenciados por el proyecto en que se declara la variable
pública.
Utilizar la instrucción Private
La instrucción Private se puede usar para declarar variables
privadas de nivel de módulo.
Private MiNombre As String
Las variables Private pueden ser usadas únicamente por
procedimientos pertenecientes al mismo módulo.
Nota Cuando se utiliza a nivel de módulo,
la instrucción Dim es equivalente a la instrucción Private. Sería
aconsejable usar la instrucción Private para facilitar la lectura y
comprensión del código.
Utilizar la instrucción Static
Cuando se utiliza la instrucción Static en lugar de la
instrucción Dim, la variable declarada mantendrá su valor entre llamadas
sucesivas.
Utilizar la instrucción Option Explicit
En Visual Basic se puede declarar implícitamente una variable
usándola en una instrucción de asignación. Todas las variables que se definen
implícitamente son del tipo Variant. Las variables del tipo Variant
consumen más recursos de memoria que la mayor parte de las otros tipos de
variables. Su aplicación será más eficiente si se declaran explícitamente las
variables y se les asigna un tipo de datos específico. Al declararse
explícitamente las variables se reduce la posibilidad de errores de nombres y
el uso de nombres erróneos.
Si no desea que Visual Basic realice declaraciones implícitas, puede
incluir en un módulo la instrucción
Option Explicit antes de todos los
procedimientos. Esta instrucción exige que todas las variables del módulo se
declaren explícitamente. Si un módulo incluye la instrucción
Option Explicit,
se producirá un error en
tiempo de
compilación cuando Visual Basic encuentre un nombre de variable que no ha
sido previamente declarado, o cuyo nombre se ha escrito incorrectamente.
Se puede seleccionar una opción del entorno de programación de
Visual Basic para incluir automáticamente la instrucción Option Explicit
en todos los nuevos módulos. Consulte la documentación de su aplicación para
encontrar la forma de modificar las opciones de entorno de Visual Basic. Tenga
en cuenta que esta opción no tiene ningún efecto sobre el código que se haya
escrito con anterioridad.
Nota Las matrices fijas y dinámicas
siempre se tiene que declarar explícitamente.
Declarar una variable de objeto para automatización
Cuando se utiliza una aplicación para controlar los objetos de otra
aplicación, debe establecerse una referencia a la
biblioteca de tipos de la otra
aplicación. Una vez que se ha establecido la referencia, se pueden declarar
variables de objeto conforme a su tipo
más específico. Por ejemplo, si desde Microsoft Word se establece una
referencia a la biblioteca de tipos de Microsoft Excel, se puede declarar una
variable del tipo
Worksheet desde Microsoft Word para representar un
objeto
Worksheet de Microsoft Excel.
Si se utiliza otra aplicación para controlar objetos de Microsoft
Access, es posible, en la mayor parte de los casos, declarar variables objetos
del tipo más específico. Se puede usar también la palabra clave New para
crear automáticamente una nueva definición de un objeto. Sin embargo, puede ser
necesario indicar que se trata de un objeto Microsoft Access. Por ejemplo,
cuando se declara una variable de objeto para representar un formulario de
Microsoft Access desde Microsoft Visual Basic, debe distinguirse entre el
objeto Form de Microsoft Access y un objeto Form de Visual Basic.
Para ello se incluye el nombre de la biblioteca de tipos en la declaración de
la variable, como muestra el siguiente ejemplo:
Dim frmPedidos As New Access.Form
Algunas aplicaciones no reconocen algunos de los tipos de objetos de
Microsoft Access. En ese caso, incluso después de establecer una referencia a
la biblioteca de tipos de Microsoft Access, será necesario declarar todas las
variables objeto de Microsoft Access como del tipo Object. Tampoco puede
usarse la palabra clave New para crear una nueva definición del objeto.
El siguiente ejemplo muestra cómo declarar una variable que represente una
nueva definición del objeto Application de Microsoft Access desde una
aplicación que no reconoce los tipos de objeto de Microsoft Access. La
aplicación crea entonces una nueva definición del objeto Application.
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
Para determinar la sintaxis a utilizar con una aplicación
determinada debe consultarse la documentación de la aplicación.
Escribir instrucciones de asignación
Las instrucciones de asignación asignan un valor o
expresión a una
variable o
constante. Las instrucciones de
asignación incluyen siempre un signo igual (
=). El siguiente ejemplo
asigna el valor que devuelve la función
InputBox a la variable
suNombre.
Sub Pregunta()
Dim suNombre As String
suNombre = InputBox("¿Cómo se llama?")
MsgBox "Su nombre es " & suNombre
End Sub
La instrucción Let es opcional y normalmente se omite. Por
ejemplo, la instrucción de asignación anterior podría haberse escrito así:
Let suNombre = InputBox("¿Cómo se llama?").
La instrucción Set se utiliza para asignar un objeto a una
variable que ha sido declarada como objeto. La palabra clave Set es
necesaria. En el siguiente ejemplo, la instrucción Set asigna un rango
de Hoja1 a la variable de
objeto miCelda:
Sub DarFormato()
Dim miCelda As Range
Set miCelda = Worksheets("Hoja1").Range("A1")
With miCelda.Font
.Bold = True
.Italic = True
End With
End Sub
Las instrucciones que establecen valores
propiedad son también instrucciones de
asignación. El siguiente ejemplo asigna la propiedad
Bold del objeto
Font
para la celda activa:
ActiveCell.Font.Bold = True
Escribir
instrucciones de declaración
El siguiente ejemplo contiene tres declaraciones.
Sub DarFormato()
Const limite As Integer = 33
Dim miCelda As Range
' Mas instrucciones
End Sub
La instrucción Sub (con la correspondiente
instrucción End Sub) declara un procedimiento llamado DarFormato. Todas las
instrucciones que aparecen entre las instrucciones Sub y End Sub
se ejecutan cuando el procedimiento DarFormato se ejecuta o se llama.
La instrucción Const declara la constante limite, especificando el tipo de
datos Integer y un valor de 33.
La instrucción Dim declara la variable miCelda. El tipo de datos es
objeto, en este caso, un objeto Range de Microsoft Excel. Se puede
declarar una variable que sea cualquiera de los objetos que están accesibles a
la aplicación que se está usando. Las instrucciones Dim son un tipo de
instrucción que se utiliza para declarar variables. Otras palabras clave
utilizadas en las declaraciones son ReDim, Static, Public,
Private y Const.
Escribir instrucciones de Visual Basic
- Las instrucciones de
declaración, que dan nombre a una variable, constante o procedimiento y
pueden también especificar su tipo de datos.
- Las instrucciones de asignación,
que asignan un valor o expresión a una variable o constante.
- Las instrucciones
ejecutables, que inician acciones. Estas instrucciones pueden ejecutar un
método o función y pueden saltar a o evitar bloques de código. Las
instrucciones ejecutables a menudo contienen operadores condicionales o
matemáticas.
Continuar instrucciones en múltiples líneas
Una instrucción cabe normalmente en una línea, pero puede
continuarse en la siguiente utilizando un
carácter
de continuación de línea. En el siguiente ejemplo, la instrucción
ejecutable
MsgBox se extiende por las tres líneas que le siguen:
Sub CuadroDemo() 'Este procedimiento declara una variable de cadena,
' le asigna el valor Juan y a continuación
' presenta en pantalla un mensaje concatenado.
Dim miVar As String
miVar = "Juan"
MsgBox Prompt:="Hola " & myVar, _
Title:="Cuadro de saludo", _
Buttons:=vbExclamation
End Sub
Añadir comentarios
Los comentarios pueden explicar un procedimiento o una instrucción
en particular a cualquier persona que tenga que leer el código. Visual Basic
ignora los comentarios cuando ejecuta los procedimientos. Las líneas de
comentario comienzan por un apóstrofe (') o con la palabra clave Rem
seguida por un espacio y puede colocarse en cualquier lugar del procedimiento.
Para añadir un comentario a la misma línea que ocupa una instrucción, debe
insertarse un apóstrofe después de esta, seguido por el comentario. Los
comentarios aparecen en pantalla en color verde, color predefinido.
Comprobar errores de sintaxis
Si se presiona la tecla ENTRAR después de escribir una línea de
código y la línea aparece en pantalla en color rojo (puede que aparezca también
un mensaje de error), debe averiguar cuál es el problema en esa instrucción y
corregirlo.
Escribir instrucciones ejecutables
Una
instrucción ejecutable
inicia una acción. Puede ejecutar un
método
o función y saltar a bloques de código o no ejecutar otros. Las instrucciones
ejecutables incluyen a menudo operadores condicionales o matemáticos.
El siguiente ejemplo utiliza la instrucción For Each...Next
para pasar por cada una de las celdas de un rango llamado MiIntervalo en la Hoja1 de un libro Microsoft Excel
activo. La variable c es una
celda en la colección de celdas que componen MiIntervalo.
Sub DarFormato()
Const limite As Integer = 33
For Each c In Worksheets("Hoja1").Range("MiIntervalo").Cells
If c.Value > limite Then
With c.Font
.Bold = True
.Italic = True
End With
End If
Next c
MsgBox "¡Fin!"
End Sub
La instrucción If...Then...Else del ejemplo comprueba el
valor de la celda. Si el valor es mayor de 33, la instrucción With
establece las propiedades Bold e Italic del objeto Font
para esa celda. Las instrucciones If...Then...Else acaban con una
instrucción End If.
La instrucción With puede evitar que haya que escribir muchas
veces las mismas palabras ya que las instrucciones que contiene se ejecutan
automáticamente en el objeto que sigue a la palabra clave With.
La instrucción Next llama a la siguiente celda de la
colección de celdas contenida en MiIntervalo.
La función MsgBox (que presenta en pantalla un cuadro de
diálogo de Visual Basic) presenta un mensaje indicando que el procedimiento Sub
ha terminado de ejecutarse.
Escribir un procedimiento Function
Un procedimiento
Function es una serie de
instrucciones de Visual Basic encerradas
entre dos instrucciones
Function y
End Function. Un procedimiento
Function es similar a un procedimiento
Sub, aunque una función
puede devolver además un valor. Un procedimiento
Function acepta
argumentos, como pueden ser
constantes,
variables o
expresiones que le pasa el procedimiento
que efectúa la llamada. Si un procedimiento
Function no tiene
argumentos, la instrucción
Function debe incluir un par de paréntesis
vacíos. Una función devuelve un valor asignándolo a su nombre en una o más
instrucciones del procedimiento.
En el siguiente ejemplo, la función Celsius calcula grados
centígrados a partir de grados Fahrenheit. Cuando se llama a la función desde
el procedimiento Principal, se le pasa una variable que contiene el
valor del argumento. El resultado de los cálculos se devuelve al procedimiento
que efectúo la llamada y se presenta en un cuadro de mensaje.
Sub Principal()
temp = Application.InputBox(Texto:= _
"Por favor, introduzca la temperatura en grados F.", Tipo:=1)
MsgBox "La temperatura es " & Celsius(temp) & " grados C."
End Sub
Function Celsius(GradosF)
Celsius = (GradosF - 32) * 5 / 9
End Function
Escribir un procedimiento Sub
Un procedimiento
Sub es una serie de
instrucciones Visual Basic, encerradas
entre un par de instrucciones
Sub y
End Sub, que realizan
acciones específicas pero no devuelven ningún valor. Un procedimiento
Sub
puede aceptar argumentos, como
constantes,
variables o
expresiones que le pasa el procedimiento
que ha efectuado la llamada. Si un procedimiento
Sub no tiene
argumentos, la instrucción
Sub debe incluir un par de paréntesis vacío.
El siguiente procedimiento Sub dispone de
comentarios explicativos en cada línea.
' Declara un procedimiento llamado ObtenInformacion
' Este procedimiento Sub no acepta argumentos
Sub ObtenInformacion()
' Declara una variable de cadena llamada respuesta
Dim respuesta As String
' Asigna el valor que devuelve la funcion InputBox a la variable respuesta
respuesta = InputBox(Prompt:="¿Cómo se llama?")
' Instrucción
condicional If...Then...Else
If respuesta = Empty
Then
' Llama a la función
MsgBox
MsgBox
Prompt:="No ha escrito su nombre."
Else
' Función MsgBox
concatenada con la variable respuesta
MsgBox
Prompt:="Su nombre es " & respuesta
' Fin de la
instrucción If...Then...Else
End If
' Fin del
procedimiento Sub
End Sub
Llamar a procedimientos
Sub y Function
Para efectuar una llamada a un procedimiento
Sub desde otro
procedimiento, escriba el nombre del
procedimiento e incluya valores para todos los
argumentos requeridos. No es necesaria
una instrucción
Call, pero si la utiliza, los argumentos deben aparecer
encerrados entre paréntesis.
Se puede utilizar un procedimiento Sub para organizar otros
procedimientos de forma que sean más fáciles de entender y depurar. En el
siguiente ejemplo, el procedimiento Sub Principal efectúa una llamada al procedimiento Sub
MultiBeep, pasando como
argumento el valor 56. Después de que MultiBeep
acaba su ejecución, el control vuelve a Principal
y Principal llama al
procedimiento Sub Mensaje.
Mensaje presenta en pantalla
un cuadro de mensaje; cuando el usuario hace clic en Aceptar, el control
vuelve a Principal y Principal termina.
Sub Principal()
MultiBeep 56
Mensaje
End Sub
Sub MultiBeep(númbips)
For contador = 1 To númbips
Beep
Next contador
End Sub
Sub Mensaje()
MsgBox "¡Es hora de descansar!"
End Sub
Llamar a procedimientos Sub con más de un argumento
El siguiente ejemplo muestra dos formas de llamar a un procedimiento
Sub con más de un argumento. La segunda vez que se llama a CalcuCasa, es necesario utilizar
paréntesis a ambos lados de los argumentos ya que se utiliza la instrucción Call.
Sub Principal()
CalcuCasa 99800, 43100
Call CalcuCasa(380950, 49500)
End Sub
Sub CalcuCasa(precio As Single, salario As Single)
If 2.5 * salario <= 0.8 * precio Then
MsgBox "No puede permitirse esta casa."
Else
MsgBox "Esta casa está a su alcance."
End If
End Sub
Utilizar paréntesis al efectuar llamadas a procedimientos Function
Para utilizar el valor que devuelve una función debe asignar la
función a una
variable y encerrar los
argumentos entre paréntesis, tal y como muestra el siguiente ejemplo.
Respuesta3 = MsgBox("¿Está contento con su salario?", 4, "Pregunta 3")
Si no está interesado en el valor que devuelve una función, puede
efectuar la llamada a la función de la misma forma que si llamara a un
procedimiento Sub. No utilice los paréntesis, incluya una lista de
argumentos y no asigne la función a una variable, todo ello como muestra el
siguiente ejemplo.
MsgBox "¡Tarea concluida!", 0, "Cuadro de tarea"
Precaución Si en el ejemplo anterior se
incluyen paréntesis, la instrucción puede producir un error de sintaxis.
Transferir argumentos con nombre
Una instrucción de un procedimiento
Sub o
Function
puede pasar valores a los procedimientos que llama mediante
argumentos con nombre. Los argumentos con
nombre pueden aparecer en cualquier orden. Un argumento con nombre se compone
del nombre del argumento seguido por dos puntos y un signo igual (
:=) y
el valor asignado al argumento.
El siguiente ejemplo efectúa una llamada a la función MsgBox
utilizando argumentos con nombre que no devuelven ningún valor.
MsgBox Titulo:="Cuadro de tarea", Mensaje:="¡Tarea concluida!"
El siguiente ejemplo llama a la función MsgBox empleando
argumentos con nombre. El valor que devuelve la función se asigna a la variable
respuesta3.
respuesta3 = MsgBox(Titulo:="Pregunta 3", _
Mensaje:="¿Está satisfecho con su salario?", Botones:=4)
Reglas de asignación de nombres en
Visual Basic
- El primer carácter
debe ser una letra.
- En el nombre no se
pueden utilizar espacios, puntos (.), signos de interjección (!),
ni los caracteres @, &, $, #.
- El nombre no puede
tener más de 255 caracteres de longitud.
- Como regla general,
no se deben usar nombres iguales a los de los procedimientos Function, instrucciones y métodos de Visual Basic. Al final
puede terminar usando las mismas palabras
clave que utiliza el lenguaje. Para utilizar una función intrínseca
del lenguaje, o una instrucción o método, cuyo nombre coincide con uno de
los nombres asignados, es preciso identificarlos explícitamente. Para ello
se sitúa delante del nombre de la función intrínseca, instrucción o
método, el nombre de la biblioteca
de tipos asociada. Por ejemplo, si utiliza una variable llamada Left,
la única forma de utilizar la función Left es escribiendo VBA.Left.
- Los nombres no se
pueden repetir dentro del mismo nivel de alcance. Por ejemplo, no se pueden
declarar dos variables con el nombre edad dentro
del mismo procedimiento. Sin embargo, se puede declarar una variable
privada edad y una variable de nivel de procedimiento llamada edad
dentro del mismo módulo.
Nota Visual Basic no diferencia entre
mayúsculas y minúsculas, pero respeta la forma en que se escriben las
instrucciones de declaración de nombres.
No hay comentarios:
Publicar un comentario