#Const (Ejemplo de directiva)
# Ejemplo de directiva Const

Este ejemplo utiliza la directiva #Const para declarar constantes condicionales de compilación que se utilizarán en estructuras #If...#Else...#End If.

#Const DebugVersion = 1	' Se evaluará como verdadero	' en el bloque #If.


#If...Then...#Else (Ejemplo)
# Ejemplo If...Then...#Else

Este ejemplo hace referencia a constantes condicionales de compilación en una estructura #If...Then...#Else para determinar si hay que compilar determinadas instrucciones.

' Si Mac se evalúa como verdadero, ejecuta las instrucciones a continuación de #If.

#If Mac Then

'. Escriba aquí instrucciones exclusivamente de Mac.

'.

'.

' De lo contrario, si es un programa para Windows de 32 bits, ejecuta lo siguiente:

#ElseIf Win32 Then

'. Escriba aquí instrucciones exclusivamente de Windows de 32 bits.

'.

'.

' En caso contrario, si no es ninguna, ejecuta esto:

#Else

' Escriba aquí instrucciones de otras plataformas.

'.

'.

#End If


#Const (Directiva)

Se utiliza para definir constantes de compilación condicional para Visual Basic.

Sintaxis

#Const constante = expresión

La sintaxis de la directiva de compilación #Const consta de las siguientes partes:

Parte	Descripción
constante	Se requiere; Variant (String). Nombre de la constante; sigue las convenciones estándar de nombres de variable.
expresión	Requerido. Literal, otra constante de compilación condicional o cualquier combinación que incluya operadores aritméticos o lógicos, excepto Is.
Comentarios

Las constantes de compilación condicional son siempre de tipo Private para el módulo en que aparecen. No es posible crear constantes de compilación de tipo Public con la directiva #Const. Las constantes de compilación de tipo Public solamente se pueden crear desde la interfaz de usuario.

En expresión solamente se pueden utilizar constantes de compilación condicional (y literales). El uso de una constante estándar definida con Const o de una constante no definida producirá un error. A la inversa, las constantes definidas con la palabra clave  #Const solamente se pueden utilizar para compilación condicional.

Las constantes de compilación condicional siempre se evalúan a nivel de módulo independientemente de su ubicación en el código.


#If...Then...#Else (Directiva)

Compila condicionalmente bloques de código de Visual Basic seleccionados.

Sintaxis

#If expresión Then

instrucciones

[#ElseIf expresión-n Then

[instrucciones_elseif]]

[#Else

[instrucciones_else]]

#End If

La sintaxis de la directiva #If...Then...#Else consta de las siguientes partes:

Parte	Descripción
expresión	Requerido. Cualquier expresión, formada exclusivamente por una o más constantes de compilación condicional, literales y operadores, que se evalúa como True o False.
instrucciones	Requerido. Líneas de programa de Visual Basic o directivas de compilación que se evaluarán si su expresión asociada da como resultado True.
expresión-n	Opcional. Cualquier expresión formada exclusivamente por una o más constantes de compilación condicional, literales y operadores, que se evalúa como True o False.
instrucciones_elseif	Opcional. Una o más líneas de programa o directivas de compilación que se evalúan si expresión-n da como resultado True.
instrucciones_else	Opcional. Una o más líneas de programa o directivas de compilación que se evalúan si ninguna expresión o expresión-n anterior da como resultado True.
Comentarios

El comportamiento de la directiva #If...Then...#Else es análogo al de la instrucción If...Then...Else, excepto en que no existe la forma de una única línea para las directivas #If, #Else, #ElseIf y #End If; es decir, en la misma línea de una de estas directivas no puede aparecer otro código. La compilación condicional se utiliza habitualmente para compilar el mismo programa en plataformas distintas. También se utiliza para evitar que el código de depuración aparezca en los archivos ejecutables. El código excluido durante una compilación condicional se omite completamente en el archivo ejecutable final, de modo que no tiene ningún efecto en el tamaño ni en el rendimiento.

Independientemente de la utilización de las expresiones, todas ellas se evalúan. Por tanto, todas las constantes utilizadas en las expresiones se deben haber definido. Las constantes no definidas se evalúan como Empty.

Nota  La instrucción Option Compare no afecta a las expresiones de las instrucciones #If y #ElseIf. Las expresiones de las directivas de compilación condicional siempre se evalúan con Option Compare Text.


Constantes de Visual Basic

Visual Basic for Applications define constantes para simplificar la programación. Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constantes Calendar

Constantes de color

Constantes del compilador

Constantes de fecha

Constantes Dir, GetAttr y SetAttr

Constantes IMEStatus

Constantes Instr, StrComp

Constantes de código de teclas

Otras constantes

Constantes MsgBox

Constantes QueryClose

Constantes Shell

Constantes StrConv

Constantes de color del sistema

Constantes VarType


Calendar (Constantes)
Constantes Calendar

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbCalGreg	0	Indica que se utiliza el calendario gregoriano.
VbCalHijri	1	Indica que se utiliza el calendario Hijri.


Constantes del compilador

Visual Basic for Applications define constantes para uso exclusivo con la directiva #If...Then...#Else. Estas constantes son funcionalmente equivalentes a las constantes definidas con la directiva #If...Then...#Else excepto que son de alcance global; es decir, se aplican a todo el proyecto.

En plataformas de programación de 16 bits, las constantes del compilador se definen de la siguiente forma:

Constante	Valor	Descripción
Win16	True	Indica que el entorno de programación es de 16 bits.
Win32	False	Indica que el entorno de programación no es de 32 bits.
En plataformas de programación de 32 bits, las constantes del compilador se definen de la siguiente forma:

Constante	Valor	Descripción
Win16	False	Indica que el entorno de programación no es de 16 bits.
Win32	True	Indica que el entorno de programación es de 32 bits.
Nota   Puesto que es Visual Basic el que proporciona estas constantes, no puede definir en ningún nivel sus propias constantes que tengan estos mismos nombres.


Date (Constantes)
Constantes de fecha

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Valores del argumento

El argumento firstdayofweek tiene los siguientes 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 firstdayofyear tiene los siguientes 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.
Valores devueltos

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


Dir, GetAttr y SetAttr (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbNormal	0	Normal (valor predeterminado para Dir y SetAttr).
vbReadOnly	1	De sólo lectura
vbHidden	2	Oculto
vbSystem	4	Archivo de sistema
vbVolume	8	Etiqueta de volumen
vbDirectory	16	Directorio o carpeta
vbArchive	32	El archivo ha cambiado desde la última copia de seguridad


IMEStatus (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales.

La constantes para la configuración regional japonesa son las siguientes:

Constante	Valor	Descripción
vbIMENoOp	0	No hay IME instalado
vbIMEOn	1	IME activo
vbIMEOff	2	IME inactivo
vbIMEDisable	3	IME deshabilitado
vbIMEHiragana	4	Caracteres Hiragana de doble byte (DBC)
vbIMEKatakanaDbl	5	DBC Katakana
vbIMEKatakanaSng	6	Caracteres Katakana de un byte (SBC)
vbIMEAlphaDbl	7	DBC alfanumérico
vbIMEAlphaSng	8	SBC alfanumérico
La constantes para la configuración regional china (tradicional y simplificada) son las siguientes:

Constante	Valor	Descripción
vbIMENoOp	0	No hay IME instalado
vbIMEOn	1	IME activo
vbIMEOff	2	IME inactivo
Para la configuración regional coreana, los cinco primeros bits devueltos están establecidos de la siguiente forma

Bit	Valor	Descripción	Valor	Descripción
0	0	No hay IME instalado	1	IME instalado
1	0	IME deshabilitado	1	IME activo
2	0	IME en modo inglés	1	Modo Hangeul
3	0	Modo Banja (SBC).	1	Modo Junja (DBC)
4	0	Modo normal	1	Modo de conversión Hanja


Instr, StrComp (Constantes)

Las siguientes constantes están definidas en la biblioteca de tipos de Visual Basic for Applications y se pueden utilizar en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbBinaryCompare	0	Realiza una comparación binaria
vbTextCompare	1	Realiza una comparación textual
vbDatabaseCompare	2	En Microsoft Access, realiza una comparación basándose en la información contenida en su base de datos.


Otras constantes

Las siguientes constantes están definidas en la biblioteca de tipos de Visual Basic for Applications y se pueden utilizar en cualquier lugar del código en vez de los valores reales:

Constante	Equivalente	Descripción
vbCrLf	Chr(13) + Chr(10)	Combinación de retorno de carro y avance de línea
vbCr	Chr(13)	Carácter de retorno de carro
vbLf	Chr(10)	Carácter de avance de línea
vbNewLine	Chr(13) + Chr(10) or Chr(13)	Carácter de avance de línea específico de plataforma; siempre que sea válido para la plataforma actual
vbNullChar	Chr(0)	Carácter que tiene el valor 0
vbNullString	Cadena con el valor 0	No es lo mismo que una cadena de longitud cero ("");se utiliza para llamar a procedimientos externos
vbTab	Chr(9)	Carácter de tabulador
vbBack	Chr(8)	Carácter de retroceso
vbFormFeed	Chr(12)	No es útil en Microsoft Windows
vbVerticalTab	Chr(11)	No es útil en Microsoft Windows


MsgBox (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Argumentos de MsgBox

Constante	Valor	Descripción
vbOKOnly	0	Sólo el botón Aceptar (predeterminado)
vbOKCancel	1	Los botones Aceptar y Cancelar
vbAbortRetryIgnore	2	Los botones Anular, Reintentar e Ignorar
vbYesNoCancel	3	Los botones Sí, No y Cancelar.
VbYesNo	4	Los botones Sí y No
vbRetryCancel	5	Los botones Reintentar y Cancelar
vbCritical	16	Mensaje crítico
vbQuestion	32	Consulta de advertencia
vbExclamation	48	Mensaje de advertencia
vbInformation	64	Mensaje de información
vbDefaultButton1	0	El primer botón es el predeterminado (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	Cuadro de mensajes de aplicación modal (valor predeterminado)
vbSystemModal	4096	Cuadro de mensajes modal del sistema
Valores devueltos por MsgBox

Constante	Valor	Descripción
vbOK	1	Botón Aceptar presionado
vbCancel	2	Botón Cancelar presionado
vbAbort	3	Botón Anular presionado
vbRetry	4	Botón Reintentar presionado
vbIgnore	5	Botón Ignorar presionado
vbYes	6	Botón Sí presionado
vbNo	7	Botón No presionado


Shell (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbHide	0	La ventana se oculta y el enfoque pasa a la ventana oculta.
VbNormalFocus	1	La ventana tiene el enfoque y se restaura a su tamaño y posición originales.
VbMinimizedFocus	2	La ventana se muestra en forma de icono con el enfoque.
VbMaximizedFocus	3	La ventana se maximiza con el enfoque.
VbNormalNoFocus	4	La ventana se restaura a su tamaño y posición más recientes. La ventana activa actualmente permanece activa.
VbMinimizeNoFocus	6	La ventana se muestra en forma de icono. La ventana activa actualmente permanece activa.


StrConv (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbUpperCase	1	Convierte la cadena en mayúsculas.
VbLowerCase	2	Convierte la cadena en minúsculas.
VbProperCase	3	Pone en mayúscula la primera letra de cada palabra de la cadena.
VbWide	4	Los caracteres estrechos (un solo byte) se convierten en caracteres anchos (de doble byte). Se aplica a configuraciones regionales del Lejano Oriente
vbNarrow	8	Los caracteres anchos (de doble byte) se convierten en caracteres estrechos (de un solo byte). Se aplica a configuraciones regionales del Lejano Oriente.
VbKatakana	16	Los caracteres Hiragana de una cadena se convierten en caracteres Katakana. Sólo se aplica en Japón.
VbHiragana	32	Los caracteres Katakana de una cadena se convierten en caracteres Hiragana. Sólo se aplica en Japón.
VbUnicode	64	Convierte la cadena a Unicode utilizando la página de códigos predeterminada del sistema.
VbFromUnicode	128	Convierte la cadena desde Unicode a la página de códigos predeterminada del sistema.


VarType (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbEmpty	0	Sin inicializar (predeterminado)
vbNull	1	No contiene datos válidos
vbInteger	2	Integer
vbLong	3	Entero largo
vbSingle	4	Número de signo flotante de precisión simple
vbDouble	5	Número de signo flotante de precisión doble
vbCurrency	6	Currency
vbDate	7	Date
vbString	8	String
vbObject	9	Objeto
vbError	10	Error
vbBoolean	11	Boolean
vbVariant	12	Variant (sólo se utiliza para matrices de variants)
vbDataObject	13	Objeto de acceso a datos
vbDecimal	14	Decimal
vbByte	17	Byte
vbArray	8192	Matriz


Color (Constantes)
Constantes de color

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbBlack	0x0	Negro
vbRed	0xFF	Rojo
vbGreen	0xFF00	Verde
vbYellow	0xFFFF	Amarillo
vbBlue	0xFF0000	Azul
vbMagenta	0xFF00FF	Fucsia
vbCyan	0xFFFF00	Aguamarina
vbWhite	0xFFFFFF	Blanco


Keycode (Constantes)
Constantes de código de teclas

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbKeyLButton	0x1	Botón izquierdo del mouse
vbKeyRButton	0x2	Botón derecho del mouse
vbKeyCancel	0x3	Tecla CANCELAR
vbKeyMButton	0x4	Botón izquierdo del mouse
vbKeyBack	0x8	Tecla RETROCESO
vbKeyTab	0x9	Tecla TAB
vbKeyClear	0xC	Tecla SUPR
vbKeyReturn	0xD	Tecla ENTRAR
vbKeyShift	0x10	Tecla MAYÚS
vbKeyControl	0x11	Tecla CTRL
vbKeyMenu	0x12	Tecla MENÚ
vbKeyPause	0x13	Tecla PAUSA
vbKeyCapital	0x14	Tecla BLOQ MAYÚS
vbKeyEscape	0x1B	Tecla ESC
vbKeySpace	0x20	Tecla BARRA ESPACIADORA
vbKeyPageUp	0x21	Tecla RE PÁG
vbKeyPageDown	0x22	Tecla AV PÁG
vbKeyEnd	0x23	Tecla FIN
vbKeyHome	0x24	Tecla INICIO
vbKeyLeft	0x25	Tecla FLECHA IZQUIERDA
vbKeyUp	0x26	Tecla FLECHA ARRIBA
vbKeyRight	0x27	Tecla FLECHA DERECHA
vbKeyDown	0x28	Tecla FLECHA ABAJO
vbKeySelect	0x29	Tecla SELECCIONAR
vbKeyPrint	0x2A	Tecla IMPR PANT
vbKeyExecute	0x2B	Tecla EJECUTAR
vbKeySnapshot	0x2C	Tecla IMPR PANT
vbKeyInsert	0x2D	Tecla INSERT
vbKeyDelete	0x2E	Tecla SUPR
vbKeyHelp	0x2F	Tecla AYUDA
vbKeyNumlock	0x90	Tecla BLOQ NUM
Las teclas de A a Z son las mismas que sus equivalentes ASCII de A a Z:

Constante	Valor	Descripción
vbKeyA	65	Tecla A
vbKeyB	66	Tecla B
vbKeyC	67	Tecla C
vbKeyD	68	Tecla D
vbKeyE	69	Tecla E
vbKeyF	70	Tecla F
vbKeyG	71	Tecla G
vbKeyH	72	Tecla H
vbKeyI	73	Tecla I
vbKeyJ	74	Tecla J
vbKeyK	75	Tecla K
vbKeyL	76	Tecla L
vbKeyM	77	Tecla M
vbKeyN	78	Tecla N
vbKeyO	79	Tecla O
vbKeyP	80	Tecla P
vbKeyQ	81	Tecla Q
vbKeyR	82	Tecla R
vbKeyS	83	Tecla S
vbKeyT	84	Tecla T
vbKeyU	85	Tecla U
vbKeyV	86	Tecla V
vbKeyW	87	Tecla W
vbKeyX	88	Tecla X
vbKeyY	89	Tecla Y
vbKeyZ	90	Tecla Z
Las teclas de 0 a 9 son las mismas que sus equivalentes ASCII de 0 a 9:

Constante	Valor	Descripción
vbKey0	48	Tecla 0
vbKey1	49	Tecla 1
vbKey2	50	Tecla 2
vbKey3	51	Tecla 3
vbKey4	52	Tecla 4
vbKey5	53	Tecla 5
vbKey6	54	Tecla 6
vbKey7	55	Tecla 7
vbKey8	56	Tecla 8
vbKey9	57	Tecla 9
Las siguientes constantes representan teclas en el tecla numérico:

Constante	Valor	Descripción
vbKeyNumpad0	0x60	Tecla 0
vbKeyNumpad1	0x61	Tecla 1
vbKeyNumpad2	0x62	Tecla 2
vbKeyNumpad3	0x63	Tecla 3
vbKeyNumpad4	0x64	Tecla 4
vbKeyNumpad5	0x65	Tecla 5
vbKeyNumpad6	0x66	Tecla 6
vbKeyNumpad7	0x67	Tecla 7
vbKeyNumpad8	0x68	Tecla 8
vbKeyNumpad9	0x69	Tecla 9
vbKeyMultiply	0x6A	Tecla SIGNO DE MULTIPLICACIÓN (*)
vbKeyAdd	0x6B	Tecla SIGNO MÁS (+)
vbKeySeparator	0x6C	Tecla ENTRAR
vbKeySubtract	0x6D	Tecla SIGNO MENOS (–)
vbKeyDecimal	0x6E	Tecla PUNTO DECIMAL(,)
vbKeyDivide	0x6F	Tecla SIGNO DE DIVISIÓN (/)
Las siguientes constantes representan teclas de función:

Constante	Valor	Descripción
vbKeyF1	0x70	Tecla F1
vbKeyF2	0x71	Tecla F2
vbKeyF3	0x72	Tecla F3
vbKeyF4	0x73	Tecla F4
vbKeyF5	0x74	Tecla F5
vbKeyF6	0x75	Tecla F6
vbKeyF7	0x76	Tecla F7
vbKeyF8	0x77	Tecla F8
vbKeyF9	0x78	Tecla F9
vbKeyF10	0x79	Tecla F10
vbKeyF11	0x7A	Tecla F11
vbKeyF12	0x7B	Tecla F12
vbKeyF13	0x7C	Tecla F13
vbKeyF14	0x7D	Tecla F14
vbKeyF15	0x7E	Tecla F15
vbKeyF16	0x7F	Tecla F16


QueryClose (Constantes)

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbFormControlMenu	0	El usuario elige el comando Close del menú Control en el formulario.
VbFormCode	1	Se llama a la instrucción Unload desde el código.
VbAppWindows	2	Se finaliza la sesión en el entorno operativo actual de Microsoft Windows.
VbAppTaskManager	3	El Administrador de tareas de Windows cierra la aplicación.
VbFormMDIForm	4	Se cierra un formulario MDI secundario porque se cierra el formulario MDI. No admitido para UserForm.


System Color (Constantes)
Constantes de color del sistema

Se pueden utilizar las siguientes constantes en cualquier lugar del código en vez de los valores reales:

Constante	Valor	Descripción
vbScrollBars	0x80000000	Color de la barra de desplazamiento
vbDesktop	0x80000001	Color del escritorio
vbActiveTitleBar	0x80000002	Color de la barra de título de la ventana activa
vbInactiveTitleBar	0x80000003	Color de la barra de título de la ventana inactiva
vbMenuBar	0x80000004	Color del menú de fondo
vbWindowBackground	0x80000005	Color de la ventanade fondo
vbWindowFrame	0x80000006	Color del marco de la ventana
vbMenuText	0x80000007	Color of text on menus
vbWindowText	0x80000008	Color del texto en las ventanas
vbTitleBarText	0x80000009	Color del texto en el título, cuadro control de tamaño y flecha de desplazamiento
vbActiveBorder	0x8000000A	Color del borde de la ventana activa
vbInactiveBorder	0x8000000B	Color del borde de la ventana inactiva
vbApplicationWorkspace	0x8000000C	Color de fondo de las aplicaciones de interfaz de documentos múltiples (MDI)
vbHighlight	0x8000000D	Color de fondo de los elementos seleccionados en un control
vbHighlightText	0x8000000E	Color del texto de los elementos seleccionados en un control
vbButtonFace	0x8000000F	Color del sombredo en la cara de los botones de comando
vbButtonShadow	0x80000010	Color del sombredo en la borde de los botones de comando
vbGrayText	0x80000011	Texto atenuado (desactivado)
vbButtonText	0x80000012	Color del texto en botones de comando
vbInactiveCaptionText	0x80000013	Color del texto en un título inactivo
vb3Dhighlight	0x80000014	Color de resalte para elementos mostrados en 3D
vb3DDKShadow	0x80000015	Color de sombra más oscura para elementos mostrados en 3D
vb3Dlight	0x80000016	Segundo color más brillante en 3D después de vb3DHighlight
vbInfoText	0x80000017	Color del texto en la Información sobre herramientas
vbInfoBackground	0x80000018	Color de fondo en la Información sobre herramientas


Call (Ejemplo de la instrucción)
Ejemplo de la instrucción Call

En este ejemplo se ilustra cómo se utiliza la instrucción Call para transferir el control a un procedimiento Sub, una función intrínseca, un procedimiento de biblioteca de vínculos dinámicos (DLL) y un procedimiento de un recurso de código Macintosh.

' Llama a un procedimiento Sub.

Call PrintToDebugWindow("Hola")

' La instrucción anterior pasa el control al siguiente

' procedimiento Sub

Sub PrintToDebugWindow(UnaCadena)

Debug.Print UnaCadena	' Imprime en la ventana Depuración.

End Sub

' Llama a una función intrínseca. El valor devuelto por

' la función se descarta.

Call Shell(NombreApl, 1)	' NombreApl contiene

' la ruta de acceso del ejecutable.

' Llama a un procedimiento de una DLL de Microsoft Windows. La instrucción Declare debe

' ser Private en un módulo de clase, pero no es un módulo estándar.

Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

Sub LlamamiDLL()

Call MessageBeep(0)	' Llama al procedimiento de DLL.

MessageBeep 0	' Llama otra vez sin la palabra clave Call.

End Sub

' Llama a un recurso de código de Macintosh.

Declare Sub MensajedeAlerta Lib "MiHd:MiAlerta" Alias "MiAlerta" (ByVal N _

 As Integer)

Sub LlamamiRecurso()

Call MensajedeAlerta(0)	' Llama a recurso de código de Macintosh.

MensajedeAlerta 0	' Llama otra vez sin la palabra clave Call.

End Sub


Choose (Ejemplo de la funció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


DoEvents (Ejemplo de la función)
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.


Do...Loop (Ejemplo de la instrucción)
Ejemplo de la instrucción Do...Loop

En este ejemplo se muestra cómo se pueden utilizar las instrucciones Do...Loop. La instrucción interna Do...Loop hace un bucle 10 veces, establece el valor del indicador a False y sale prematuramente mediante la instrucción Exit Do. El bucle externo sale inmediatamente al comprobar el valor del indicador.

Dim Comprobar, Contador

Comprobar = True: Contador = 0	' Inicializa variables.

Do	' Bucle externo.

Do While Contador < 20	' Bucle interno.

Contador = Contador + 1	' Incrementa el contador.

If Contador = 10 Then	' Si la condición es verdadera.

Comprobar = False	' Establece el valor a False.

Exit Do	' Sale del bucle interno.

End If

Loop

Loop Until Comprobar = False	' Sale inmediatamente del bucle externo.


End (Ejemplo de la instrucción)
Ejemplo de la instrucción End

En este ejemplo se utiliza la instrucción End para terminar la ejecución del código si el usuario especifica una contraseña no válida.

Sub Form_Load

Dim Contraseña, Cseña

Contraseña = "Delfines"

Cseña = InputBox("Escriba la contraseña")

If Cseña <> Contraseña Then

MsgBox "Lo siento, la contraseña es incorrecta"

End

End If

End Sub


Exit (Ejemplo de la instrucción)
Ejemplo de la instrucción Exit

En este ejemplo se utiliza la instrucción Exit para salir del bucle For...Next, Do...Loop y de un procedimiento Sub.

Sub ExitStatementDemo()

Dim I, MiNúmero

Do	' Establece un bucle infinito.

For I = 1 To 1000	' Hace un bucle 1000 veces.

MiNúmero = Int(Rnd * 1000)' Genera números aleatorios.

Select Case MiNúmero	' Evalúa el número aleatorio.

Case 7: Exit For	' Si es 7, sale de For...Next.

Case 29: Exit Do	' Si es 29, sale de Do...Loop.

Case 54: Exit Sub	' Si es 54, sale del procedimiento Sub.

End Select

Next I

Loop

End Sub


For Each...Next (Ejemplo de la instrucción)
Ejemplo de la instrucción For Each...Next

En este ejemplo se utiliza la instrucción For Each...Next para buscar la cadena "Hola" en la propiedad Text de todos los elementos de una colección. En el ejemplo, MiObjeto es un objeto relacionado con texto y es un elemento de la colección MiColección. Ambos son nombres genéricos utilizados sólo a modo de ilustración.

Dim Found, MiObjeto, MiColección

Found = False	' Inicializa variable.

For Each MiObjeto In MiColección	' Itera por cada elemento.

If MiObjeto.Text = "Hola" Then	' Si Texto es igual "Hola".

Found = True	' Establece como Verdadero.

Exit For	' Sale del bucle.

End If

Next


For...Next (Ejemplo de la instrucción)
Ejemplo de la instrucción For...Next

En este ejemplo se utiliza la instrucción For...Next para crear una cadena que contiene 10 instancias de números del 0 al 9, donde cada cadena está separada de la otra por un espacio en blanco. El bucle externo utiliza una variable de contador de bucle cuyo valor disminuye en uno cada vez que se ejecuta el bucle.

Dim Palabras, Caracteres, MiCadena

For Palabras = 10 To 1 Step -1 	' Establece 10 repeticiones.

For Caracteres = 0 To 9	' Establece 10 repeticiones.

MiCadena = MiCadena & Caracteres	' Agrega un número a la cadena.

Next Caracteres	' Incrementa el contador

MiCadena = MiCadena & " "	' Agrega un espacio.

Next Palabras


GoSub...Return (Ejemplo de la instrucción)
Ejemplo de la instrucción GoSub...Return

En este ejemplo se utiliza GoSub para llamar a una subrutina ubicada dentro de un procedimiento Sub. La instrucción Return hace que se reanude la ejecución en la instrucción que está inmediatamente después de la instrucción GoSub. La instrucción Exit Sub se utiliza para evitar que el control de la ejecución continúe accidentalmente en la subrutina.

Sub GosubDemo()

Dim Número

' Pide un número al usuario.

Número = InputBox("Escriba un número positivo para dividir entre 2.")

' Sólo se utiliza la subrutina si el usuario escribe un ' número positivo.

If Número > 0 Then GoSub MiRutina

Debug.Print Número

Exit Sub	' Utiliza Exit para evitar un error.

MiRutina:

Número = Número/2	' Realiza la división.

Return	' Devuelve control a la instrucción,

End Sub	' que sigue a la instrucción GoSub.


GoTo (Ejemplo de la instrucción)
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 Depuración.

End Sub


If...Then...Else (Ejemplo de la instrucción)
Ejemplo de la instrucción If...Then...Else

Este ejemplo muestra los dos posibles usos de If...Then...Else como bloque y en una única línea. También muestra el uso de If TypeOf...Then...Else.

Dim Número, Dígitos, MiCadena

Número = 53	' Inicializa variable.

If Número < 10 Then

Dígitos = 1

ElseIf Número < 100 Then

' La condición es True, por lo que se ejecuta la siguiente instrucción.

Dígitos = 2

Else

Dígitos = 3

End If

' Asigna un valor con la sintaxis de una línea.

If Dígitos = 1 Then MiCadena = "Una" Else MiCadena = "Más de una"

Puede utilizar If TypeOf para determinar si el control que se pasa a un procedimiento es un cuadro de texto.

Sub ControlProcessor(MiControl As Control)

If TypeOf MiControl Is CommandButton Then

Debug.Print "Ha pasado un " & TypeName(MiControl)

ElseIf TypeOf MiControl Is CheckBox Then

Debug.Print "Ha pasado un " & TypeName(MiControl)

ElseIf TypeOf MiControl Is TextBox Then

Debug.Print "Ha pasado un " & TypeName(MiControl)

End If

End Sub


IIf (Ejemplo de la función)
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


On...GoSub y On...GoTo (Ejemplo de las instrucciones)
Ejemplo de las instrucciones On...GoSub y On...GoTo

En este ejemplo se utilizan las instrucciones On...GoSub y On...GoTo para bifurcar a subrutinas y etiquetas de línea, respectivamente.

Sub OnGosubGotoDemo()

Dim Número, MiCadena

Número = 2	' Inicializa variable.

' Bifurcación a Sub2.

On Número GoSub Sub1, Sub2	' La ejecución se reanuda aquí después del

' On...GoSub.

On Número GoTo Line1, Line2	' Salta a la Línea2.

' La ejecución no se reanuda aquí después de On...GoTo.

Exit Sub

Sub1:

MiCadena = "En Sub1" : Return

Sub2:

MiCadena = "En Sub2" : Return

Line1:

MiCadena = "En Línea1"

Line2:

MiCadena = "En Línea2"

End Sub


Partition (Ejemplo de la función)
Ejemplo de la función Partition

Este ejemplo supone que tiene una tabla de Pedidos que contiene un campo Cargo. Crea una selección de procedimiento que cuenta el número de pedidos cuyo Cargo se encuentra entre varios intervalos. La función Partition se utiliza para establecer estos intervalos y después la función SQL Count cuenta el número de pedidos de cada intervalo. En este ejemplo, los argumentos de la función Partition son inicio = 0, detener = 500, intervalo = 50. El primer intervalo es de 0 a 49, hasta 500.

SELECT DISTINCTROW Partition([Cargo],0, 500, 50) AS Range,

Count(Pedidos.Cargo) AS Count

FROM Pedidos

GROUP BY Partition([Cargo],0,500,50);


Select Case (Ejemplo de la instrucción)
Ejemplo de la instrucción Select Case

En este ejemplo se utiliza la instrucción Select Case para evaluar el valor de una variable. La segunda cláusula Case contiene el valor de la variable que se evalúa y, por tanto, sólo se ejecuta la instrucción asociada con ella.

Dim Número

Número = 8	' Inicializa variable.

Select Case Número	' Evalúa Número.

Case 1 To 5	' Número entre 1 y 5.

Debug.Print "Entre 1 y 5"

'Es la única cláusula Case cuyo valor es True.

Case 6, 7, 8	' Número entre 6 y 8.

Debug.Print "Entre 6 y 8"

Case Is > 8 And Número < 11	' Número es 9 ó 10.

Debug.Print "Mayor que 8"

Case Else	' Otros valores.

Debug.Print "No está entre 1 y 10"

End Select


Shell (Ejemplo de la funció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. El uso de la función MacID en Macintosh asegura que la aplicación se pueda ejecutar aún cuando se haya cambiado el nombre del archivo de la aplicación. La función Shell no está disponible en Macintosh para versiones anteriores al Sistema 7.0.

' En Microsoft 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.

' En Macintosh:

' Ambas instrucciones ejecutan Microsoft Excel.

RetVal = Shell("Microsoft Excel")	' Especifica el nombre de archivo.

RetVal = Shell(MacID("XCEL"))	' Especifica la firma.


Stop (Ejemplo de la instrucción)
Ejemplo de la instrucción Stop

En este ejemplo se utiliza la instrucción Stop para suspender la ejecución para cada iteración a través del bucle For...Next.

Dim I

For I = 1 To 10	' Inicia el bucle For...Next.

Debug.Print I	' Imprime I en la ventana Depuración.

Stop	' Se detiene en cada iteración.

Next I


Switch (Ejemplo de la función)
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


While...Wend (Ejemplo de la instrucción)
Ejemplo de la instrucción While...Wend

En este ejemplo se utiliza la instrucción While...Wend para incrementar una variable de contador. Las instrucciones del bucle se ejecutan mientras la condición sea True.

Dim Contador

Contador = 0	' Inicializa la variable.

While Contador < 20	' Comprueba el valor del Contador.

Contador = Contador + 1	' Incrementa Contador.

Wend	' Finaliza el bucle End While cuando Contador > 19.

Debug.Print Contador	' Imprime 20 en la ventana Depuración.


With (Ejemplo de la instrucción)
Ejemplo de la instrucción With

En este ejemplo se utiliza la instrucción With para ejecutar una serie de instrucciones en un único objeto. El objeto MiObjeto y sus propiedades son nombres genéricos utilizados sólo a modo de ilustración.

With MiObjeto

.Height = 100	' Idéntico a MiObjeto.Height = 100.

.Caption = "Hola"	 'Idéntico a MiObjeto.Caption = "Hola".

With .Font

.Color = Red	' Idéntico a MiObjeto.Font.Color = Red.

.Bold = True	' Idéntico a MiObjeto.Font.Bold = True.

End With

End With


Call (Instrucción)

Transfiere el control a un procedimiento Sub, a un procedimiento Function o a un procedimiento de biblioteca de vínculos dinámicos (DLL).

Sintaxis

[Call] nombre [listaargumentos]

La sintaxis de la instrucción Call consta de las siguientes partes:

Parte	Descripción
Call	Opcional; palabra clave. Si se especifica, listaargumentos se debe colocar entre paréntesis. Por ejemplo:
	Call MiProced(0)
nombre	Requerido. Nombre del procedimiento al que se transfiere el control.
Listaargumentos	Opcional. Lista de variables, matrices o expresiones delimitadas por comas, que se van a transferir al procedimiento. Los componentes de listaargumentos pueden incluir las palabras clave ByVal o ByRef para describir la forma en la que el procedimiento llamado trata los argumentos. Sin embargo, ByVal y ByRef se pueden utilizar con la instrucción Call solamente cuando se llama a un procedimiento de DLL.
Comentarios

No es necesario que utilice la palabra clave Call cuando llama a un procedimiento. Sin embargo, si utiliza la palabra clave Call para llamar a un procedimiento que requiere los argumentos, listaargumentos debe estar entre paréntesis. Si omite la palabra clave Call, debe omitir también los paréntesis de listaargumentos. Si utiliza cualquiera de las formas de la sintaxis Call para llamar a cualquier función intrínseca o a una función definida por el usuario, se descartará el valor devuelto por la función.

Para transferir una matriz completa a un procedimiento, utilice el nombre de la matriz seguida de paréntesis vacíos.


Choose (Función)

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	Requerido. Expresión de tipo Variant que contiene una de las opciones posibles.
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.


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 edición estándar. 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.

Precaución   Cuando 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.


Do...Loop (Instrucción)

Repite un bloque de instrucciones cuando una condición es True o hasta que una condición se convierta en True.

Sintaxis

Do [{While | Until} condición]
[instrucciones]
[Exit Do]
[instrucciones]

Loop

O bien, puede utilizar esta sintaxis:

Do
[instrucciones]
[Exit Do]
[instrucciones]

Loop [{While | Until} condición]

La sintaxis de la instrucción Do Loop consta de las siguientes partes:

Parte	Descripción
condición	Opcional. Expresión numérica o expresión de cadena que es True o False. Si la condición es Null, condición se considera False.
Instrucciones	Una o más instrucciones que se repiten mientras o hasta que condición sea True.
Comentarios

Se puede utilizar cualquier número de instrucciones Exit Do ubicadas en cualquier lugar dentro de una estructura de control Do…Loop, para proporcionar una salida alternativa de un Do…Loop. La instrucción Exit Do se utiliza frecuentemente en la evaluación de alguna condición, por ejemplo, If…Then; en este caso, la instrucción Exit Do transfiere el control a la instrucción que sigue inmediatamente a la instrucción Loop.

Cuando se utiliza con instrucciones anidadas Do…Loop, la instrucción Exit Do transfiere control al bucle que está anidado un nivel por encima del bucle donde ocurre.


End (Instrucción)

Termina un procedimiento o bloque.

Sintaxis

End

End Function

End If

End Property

End Select

End Sub

End Type

End With

La sintaxis de la instrucción End tiene las siguientes variantes:

Instrucción	Descripción
End	Finaliza la ejecución inmediatamente. No es estrictamente necesaria, pero se puede colocar en cualquier lugar de un procedimiento para finalizar la ejecución de código, cerrar archivos abiertos con la instrucción Open y borrar variables.
End Function	Requerido para terminar una instrucción Function.
End If	Requerido para terminar una instrucción de bloque If…Then…Else.
End Property	Requerido para terminar un procedimiento a Property Let, Property Get o Property Set.
End Select	Requerido para terminar una instrucción Select Case.
End Sub	Requerido para terminar una instrucción Sub.
End Type	Requerido para terminar una definición de tipo definido por el usuario (instrucción Type).
End With	Requerido para terminar una instrucción With.
Comentarios

Cuando se ejecuta la instrucción End, se restablecen todas las variables de nivel de módulo y todas las variables locales estáticas en todos los módulos. Utilice Stop si necesita conservar el valor de estas variables. Puede reanudar la ejecución y al mismo tiempo conservar los valores de esas variables.

Nota   La instrucción End detiene la ejececución bruscamente, sin llama a los eventos Unload, QueryUnload o Terminate, o cualquier otro código Visual Basic. El código que ha colocado en los eventos Unload, QueryUnload y Terminate de los módulo de clase y de formularios no se ejecuta. Se destruyen los objetos creados desde módulo de clase, se cierran los archivos abiertos utilizando el método Open y se libera la memoria utilizada por el programa. Se invalidan las referencias de objetos mantenidas por otros programas.

La instrucción End proporciona una manera de forzar la detención de un programa. Para la finalización normal de un programa Visual Basic, debe descargar todos los formularios. El programa se cierra en cuanto no haya otros programas que mantienen referencias a objetos creados en los módulos de clase públicos y se ejecute ningún código.


Exit (Instrucción)

Sale de un bloque de código de Do…Loop, For...Next, Function, Sub o Property.

Sintaxis

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub

La sintaxis de la instrucción Exit puede ser la siguiente:

Instrucción	Descripción
Exit Do	Proporciona una manera de salir de una instrucción Do...Loop. Solamente se puede utilizar dentro de una instrucción Do...Loop. La instrucción Exit Do transfiere el control a la instrucción que sigue a la instrucción Loop. Cuando se utiliza con instrucciones anidadas Do...Loop, la instrucción Exit Do transfiere el control al bucle que está anidado un nivel por encima del bucle donde ocurre.
Exit For	Proporciona una manera de salir de un bucle For. Sólo se puede utilizar en un bucle For...Next o For Each...Next. La instrucción Exit For transfiere el control a la instrucción que sigue a la instrucción Next. Cuando se utiliza con bucles anidados For, la instrucción Exit For transfiere el control al bucle que está anidado un nivel por encima del bucle donde ocurre.
Exit Function	Sale inmediatamente del procedimiento Function en el que aparece. La ejecución continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Function.
Exit Property	Sale inmediatamente del procedimiento Property en el que aparece. La ejecución continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Property.
Exit Sub	Sale inmediatamente del procedimiento Sub en el que aparece. La ejecución continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Sub.
Comentarios

No confunda las instrucciones Exit con las instrucciones End. La instrucción Exit no define dónde termina una estructura.


For Each...Next (Instrucción)

Repite un grupo de instrucciones para cada elemento de una matriz o de una colección.

Sintaxis

For Each elemento In grupo
[instrucciones]
[Exit For]
[instrucciones]

Next [elemento]

La sintaxis de la instrucción For Each...Next consta de las siguientes partes:

Parte	Descripción
elemento	Requerido. Variable que se utiliza para iterar por los elementos del conjunto o matriz. Para conjuntos, elemento solamente puede ser una variable Variant, una variable de objeto genérica o cualquier variable de objeto específica. Para matrices, elemento solamente puede ser una variable tipo Variant.
Grupo	Requerido. Nombre de un conjunto de objetos o de una matriz (excepto una matriz de tipos definidos por el usuario).
instrucciones	Opcional. Una o más instrucciones que se ejecutan para cada elemento de un grupo.
Comentarios

La entrada al bloque For Each se produce si hay al menos un elemento en grupo. Una vez que se ha entrado en el bucle, todas las instrucciones en el bucle se ejecutan para el primer elemento en grupo. Después, mientras haya más elementos en grupo, las instrucciones en el bucle continúan ejecutándose para cada elemento. Cuando no hay más elementos en el grupo, se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next.

Se pueden colocar en el bucle cualquier número de instrucciones Exit For. La instrucción Exit For se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then) y transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next.

Puede anidar bucles For Each...Next, colocando un bucle For Each...Next dentro de otro. Sin embargo, cada elemento del bucle debe ser único.

Nota   Si omite elemento en una instrucción Next, la ejecución continúa como si se hubiera incluido. Si se encuentra una instrucción Next antes de su instrucción For correspondiente, se producirá un error.

No se puede utilizar la instrucción For Each...Next con una matriz de tipos definidos por el usuario porque un tipo Variant no puede contener un tipo definido por el usuario.


For...Next (Instrucción)

Repite un grupo de instrucciones un número especificado de veces.

Sintaxis

For contador = principio To fin [Step incremento]
[instrucciones]
[Exit For]
[instrucciones]

Next [contador]

La sintaxis de la instrucción For...Next consta de las siguientes partes:

Parte	Descripción
contador	Requerido. Variable numérica que se utiliza como contador de bucle. La variable no puede ser de tipo Boolean, ni ningún elemento de matriz.
principio	Requerido. Valor inicial del contador.
Fin	Requerido. Valor final del contador.
Incremento	Opcional. Cantidad en la que cambia el contador cada vez que se ejecuta el bucle. Si no se especifica, el valor predeterminado de incremento es uno.
Instrucciones	Opcional. Una o más instrucciones entre For y Next que se ejecutan un número especificado de veces.
Comentarios

El argumento incremento puede ser positivo o negativo. El valor del argumento incremento determina la manera en que se procesa el bucle, como se muestra a continuación:

Valor	El bucle se ejecuta si
Positivo ó 0	contador <= fin
Negativo	contador >= fin
Una vez que se inicia el bucle y se han ejecutado todas las instrucciones en el bucle, incremento se suma a contador. En este punto, las instrucciones del bucle se pueden ejecutar de nuevo (si se cumple la misma prueba que causó que el bucle se ejecutara inicialmente) o bien se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next.

Sugerencia   Una cambio en el valor de contador mientras está dentro de un bucle hace difícil su lectura y depuración.

Se pueden colocar en el bucle cualquier número de instrucciones Exit For como una manera alternativa de salir del mismo. La instrucción Exit For, que se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then), transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next.

Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, proporcione a cada bucle un nombre de variable único como su contador. La siguiente construcción es correcta:

For I = 1 To 10

For J = 1 To 10

For K = 1 To 10

...

Next K

Next J

Next I

Nota   Si omite un contador en una instrucción Next, la ejecución continúa como si se hubiera incluido. Se produce un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.


GoSub...Return (Instrucción)

Salta a una subrutina desde un procedimiento para posteriormente volver a él.

Sintaxis

GoSub línea
...
línea
...

Return

El argumento línea puede ser una etiqueta de línea o un número de línea.

Comentarios

Puede utilizar GoSub y Return en cualquier lugar de un procedimiento, pero GoSub y su correspondiente Return deben estar en el mismo procedimiento. Una subrutina puede contener más de una instrucción Return, pero la primera instrucción Return que se encuentra hace que el flujo de la ejecución regrese a la instrucción que sigue inmediatamente a la instrucción GoSub ejecutada más recientemente.

Nota   No puede entrar o salir de procedimientos Sub utilizando una instrucción GoSub...Return.

Sugerencia   La creación de procedimientos separados a los que puede llamar proporcionan una alternativa más estructurada que el uso de GoSub...Return.


GoTo (Instrucción)

Salta incondicionalmente a una línea especificada en un procedimiento.

Sintaxis

GoTo línea

El argumento línea puede ser cualquier etiqueta de línea o un número de 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).


If...Then...Else (Instrucción)

Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresión.

Sintaxis

If condición Then [instrucciones]-[Else instrucciones_else]

Puede utilizar la siguiente sintaxis en formato de bloque:

If condición Then
[instrucciones]

[ElseIf condición-n Then
[instrucciones_elseif] ...

[Else
[instrucciones_else]]

End If

La sintaxis de la instrucción If...Then...Else consta de tres partes:

Parte	Descripción
condición	Requerido. Uno o más de los siguientes dos tipos de expresiones:
	Una expresión numérica  o expresión de cadena que puede ser evaluada como True o False. Si condición es Null, condición se considera False.
	Una expresión del formulario TypeOf nombre_objeto Is tipo_objeto. El nombre_objeto es cualquier referencia al objeto y tipo_objeto es cualquier tipo de objeto válido. La expresión es True si nombre_objeto es del tipo de objeto especificado por tipo_objeto; en caso contrario es False.
Instrucciones	Opcional en formato de bloque; se requiere en formato de línea sencilla que no tenga una cláusula Else. Una o más instrucciones separadas por dos puntos ejecutados si la condición es True.
condición-n	Opcional. Igual que condición.
Instrucciones_elseif	Opcional. Una o más instrucciones ejecutadas si la condición-n asociada es True.
instrucciones_else	Opcional. Una o más instrucciones ejecutadas si ninguna de las expresiones anteriores condición o condición-n es True.
Comentarios

Puede utilizar la forma de una sola línea (Sintaxis 1) para pruebas cortas y sencillas. Sin embargo, el formato de bloque (Sintaxis 2) proporciona más estructura y flexibilidad que la forma de línea simple y, generalmente, es más fácil de leer, de mantener y de depurar.

Nota   Con la sintaxis es posible ejecutar múltiples instrucciones como resultado de una decisión If...Then, pero todas deben estar en la misma línea y separadas por dos puntos, como en la instrucción siguiente:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

Una instrucción con formato de bloque If debe ser la primera de la línea. Las partes Else, ElseIf y End If, de la instrucción, solamente pueden ir precedidas de un número de línea o por una etiqueta de línea. El bloque If debe terminar con una instrucción End If.

Para determinar si una instrucción If es un bloque, examine lo que sigue a la palabra clave Then. Si lo que aparece detrás de Then en la misma línea no es un comentario, la instrucción se considera como una instrucción If de una sola línea.

Las cláusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas cláusulas If como desee, pero ninguna puede aparecer después de una cláusula Else. Las instrucciones de bloque If se pueden anidar; es decir, unas pueden contener a otras.

Cuando se ejecuta un bloque If (Sintaxis 2), se prueba condición. Si condición es True, se ejecutan las instrucciones que están a continuación de Then. Si condición es False, se evalúan una a una las condiciones ElseIf (si existen). Cuando se encuentra una condición True se ejecutan las instrucciones que siguen inmediatamente a la instrucción Then asociada. Si ninguna de las condiciones ElseIf es True (o si no hay cláusulas ElseIf), se ejecutan las instrucciones que siguen a Else. Después de la ejecución de las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción que sigue a End If.

Sugerencia   Select Case puede ser más útil cuando se evalúa una única expresión que tiene varias acciones posibles. Sin embargo, la cláusula TypeOf nombre_objeto Is tipo_objeto no se puede utilizar en una instrucción Select Case.


IIf (Función)

Devuelve uno de entre dos valores, dependiendo de la evaluación de una expresión.

Sintaxis

IIf(expr, truepart, falsepart)

La sintaxis de la función IIf cuenta con los siguientes argumentos con nombre:

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.


On...GoSub, On...GoTo (Instrucciones)

Salta a una de las líneas especificadas, dependiendo del valor de una expresión.

Sintaxis

On expresión GoSub lista_destino

On expresión GoTo lista_destino

La sintaxis de las instrucciones On...GoSub y On...GoTo consta de las siguientes partes:

Parte	Descripción
expresión	Requerido. Cualquier expresión numérica  cuyo valor es un número entero entre 0 y 255, inclusive. Si expresión es cualquier número no entero, se redondea antes de evaluarse.
Lista_destino	Requerido. Lista de números de líneas o de etiquetas de línea separados por comas.
Comentarios

El valor de expresión determina a qué línea de lista_destino salta la ejecución. Si el valor de expresión es menor que 1 o mayor que el número de elementos en la lista, se produce uno de los siguientes resultados:

Si expression es	Entonces
Igual a 0	El control se transfiere a la instrucción que sigue a On...GoSub o On...GoTo.
Mayor que el número de elementos en una lista	El control se transfiere a la instrucción que sigue a On...GoSub o On...GoTo.
Negativo	Se produce un error.
Mayor que 255	Se produce un error.
Pueden mezclar números de línea y etiquetas de línea en la misma lista. En la práctica no hay límite para el número de etiquetas de línea o de números de línea que se pueden utilizar con On...GoSub y On...GoTo. Sin embargo, si utiliza más etiquetas o números de los que puede contener una línea simple, debe utilizar el carácter de continuación de línea para seguir la línea lógica en la siguiente línea física.

Sugerencia   Select Case proporciona una manera más estructurada y flexible de realizar saltos múltiples.


Partition (Función)

Devuelve una Variant (String) indicando en qué punto se encuentra un número dentro de una serie calculada de intervalos.

Sintaxis

Partition(number, start, stop, interval)

La sintaxis de la función Partition consta de los siguientes argumentos con nombre:

Parte	Descripción
number	Requerido. Número entero que quiere evaluar frente a los intervalos.
Start	Requerido. Número entero que indica el comienzo del intervalo global de números. No puede ser inferior a 0.
Stop	Requerido. Número entero que indica el final del intervalo global de números. No puede ser igual ni menor que start.
Interval	Requerido. Número entero que indica el intervalo que abarca cada intervalo de la serie entre start y stop. No puede ser inferior a 1.
Comentarios

La función Partition identifica el intervalo en particular en que se encuentra number y devuelve una Variant (String) que describe ese intervalo. La función Partition resulta útil sobre todo en las consultas. Puede crear una consulta de selección que muestre cuántos pedidos se encuentran en determinados intervalos, por ejemplo, valores de pedido entre 1 y 1000, entre 1001 y 2000, etc.

En la tabla siguiente se muestra la forma en que se determinan los intervalos utilizando tres conjuntos de componentes start, stop e interval. Las columnas Primer intervalo y Último intervalo muestran los valores devueltos por Partition. Los intervalos se representan en la forma valorinferior:valorsuperior, donde el extremo mínimo (valorinferior) del intervalo se separa con dos puntos ( : ) del extremo máximo (valorsuperior).

start	stop	interval	Antes del primero	Primer intervalo	Último intervalo	Después del último
0	99	5	"   :-1"	"      0:  4"	"     95: 99"	"   100:   "
20	199	10	"   :  19"	"    20:  29"	"   190: 199"	"   200:   "
100	1010	20	"   :   99"	"  100:  119"	" 1000: 1010"	" 1011:   "
En la tabla anterior, la tercera línea muestra el resultado cuando start y stop definen un conjunto de números que no se pueden dividir exactamente entre interval. El último intervalo se extiende hasta stop (11 números), aunque interval es 20.

Si es necesario, Partition devolverá un intervalo con los suficientes espacios a la izquierda para que haya el mismo número de caracteres, a la izquierda y derecha de los dos puntos, que en stop, más uno. Así se asegura que si se utiliza Partition con otros números, el texto resultante se procesará correctamente en una operación de ordenación posterior.

Si interval es 1, el intervalo será number:number, independientemente de los argumentos start y stop. Por ejemplo, si interval es 1, number es 100 y stop es 1000, Partition devolverá "  100:  100".

Si alguno de los argumentos es Null, Partition devolverá Null.


Select Case (Instrucción)

Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresión.

Sintaxis

Select Case expresión_prueba
[Case lista_expresion-n
[instrucciones-n]] ...
[Case Else
[instrucciones_else]]

End Select

La sintaxis de la instrucción Select Case consta de las siguientes partes:

Parte	Descripción
expresión_prueba	Requerido. Cualquier expresión numérica o expresión de cadena.
lista_expresión-n	Requerido si aparece la palabra clave Case. Lista delimitada por comas de una o más de las formas siguientes: expresión, expresión To expresión, Is expresión operador_de_comparación. La palabra clave especifica un intervalo de valores. Si se utiliza la palabra clave To, el valor menor debe aparecer antes de To. Utilice la palabra clave Is con operadores de comparación (excepto Is y Like) para especificar un intervalo de valores. Si no se escribe, la palabra clave Is se insertará automáticamente.
Instrucciones-n	Opcional. Una o más instrucciones ejecutadas si expresión_prueba coincide con cualquier parte de lista_expresión-n.
instrucciones_else	Opcional. Una o más instrucciones que se ejecuten si expresión_prueba no coincide con nada de la cláusula Case.
Comentarios

Si expresión_prueba coincide con cualquier lista_expresión asociada con una cláusula Case, las instrucciones que siguen a esa cláusula Case se ejecutan hasta la siguiente cláusula Case o, para la última cláusula, hasta la instrucción End Select. El control pasa después a la instrucción que sigue a End Select. Si expresión_prueba coincide con una expresión de lista_expresión en más de una cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia.

La cláusula Case Else se utiliza para indicar las instrucciones que se van a ejecutar si no se encuentran coincidencias entre expresión_prueba y una lista_expresión en cualquiera de las otras selecciones de Case. Aunque no es necesario, es buena idea tener una instrucción Case Else en el bloque Select Case para controlar valores imprevistos de expresión_prueba. Cuando no hay una instrucción Case Else y ninguna expresión de la lista en las cláusulas Case coincide con la expresión de prueba, la ejecución continúa en la instrucción que sigue a End Select.

Se pueden utilizar expresiones múltiples o intervalos en cada cláusula Case. Por ejemplo, la línea siguiente es válida:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Nota   El operador de comparación Is no es lo mismo que la palabra clave Is utilizada en la instrucción Select Case.

También puede especificar intervalos y expresiones múltiples para cadenas de caracteres. En el siguiente ejemplo, Case coincide con las cadenas que son exactamente iguales a todo, cadenas que están entre nueces y sopa en orden alfabético y el valor actual de ElemPrueba:

Case "iguales a todo", "nueces" To "sopa", ElemPrueba

Las instrucciones Select Case se pueden anidar. Cada instrucción Select Case debe tener su correspondiente instrucción End Select.


Shell (Función)

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])

La sintaxis de la función Shell tiene estos argumentos con nombre:

Parte	Descripción
pathname	Requerido; Variant (String). Nombre del programa a ejecutar y de cualquier argumento o conmutador de comando o de línea de comando requeridos; puede incluir directorio o carpeta y unidad de disco.
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.
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.
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. Si se utiliza la función MacID con Shell en Microsoft Windows, ocurrirá un error.

Nota   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.


Stop (Instrucción)

Suspende la ejecución.

Sintaxis

Stop

Comentarios

Se pueden colocar instrucciones Stop en cualquier parte de los procedimientos para suspender la ejecución. El uso de la instrucción Stop es similar a establecer un punto de ruptura en el código.

La instrucción Stop suspende la ejecución, pero a diferencia de End no cierra ningún archivo ni borra variables, a menos que sea un archivo ejecutable compilado (.exe).


Switch (Función)

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	Requerido. Expresión de tipo Variant que se desea evaluar.
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.


While...Wend (Instrucción)

Ejecuta una serie de intrucciones mientras una condición dada sea True.

Sintaxis

While condición
[intrucciones]

Wend

La sintaxis de la instrucción While...Wend consta de las siguientes partes:

Parte	Descripción
condición	Requerido. Expresión numérica o expresión de cadena cuyo valor es True o False. Si condición es Null, condición se considera False.
Instrucciones	Opcional. Una o más instrucciones que se ejecutan mientras la condición es True.
Comentarios

Si condición es True, todas las instrucciones se ejecutan hasta que se encuentra la instrucción Wend. Después, el control vuelve a la instrucción While y se comprueba de nuevo condición. Si condición es aún True, se repite el proceso. Si no es True, la ejecución se reanuda con la instrucción que sigue a la instrucción Wend.

Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While más reciente.

Sugerencia   La instrucción Do...Loop proporciona una manera más flexible y estructurada de realizar los bucles.


With (Instrucción)

Ejecuta una serie de instrucciones sobre un único objeto o sobre un tipo definido por el usuario.

Sintaxis

With objeto
[instrucciones]

End With

La sintaxis de la instrucción With consta de las siguientes partes:

Parte	Descripción
objeto	Requerido. Nombre de un objeto o de un tipo definido por el usuario.
Instrucciones	Opcional. Una o más instrucciones que se van a ejecutar sobre objeto.
Comentarios

La instrucción With permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto. Por ejemplo, para cambiar un número de propiedades diferentes en un único objeto, es más conveniente colocar las instrucciones de asignación de las propiedades en la estructura de control With, haciendo referencia al objeto una vez, en lugar de hacerlo con cada asignación de propiedad. El siguiente ejemplo ilustra el uso de la instrucción With para asignar valores a varias propiedades del mismo objeto.

With MyLabel

.Height = 2000

.Width = 2000

.Caption = "Esta es mi etiqueta"

End With

Nota   Una vez que se ha entrado en un bloque With no es posible cambiar el objeto. Por tanto, no puede utilizar una única instrucción With para varios objetos.

Se pueden anidar instrucciones With colocando un bucle With dentro de otro. Sin embargo, como los miembros de los bloques externos With están enmascarados por los propios bloques With, deberá proporcionar un cualificador completo como referencia al objeto en el bloque With para referirse a cualquier otro objeto fuera del bloque With.

Importante   No salte hacia dentro o hacia fuera de bloques With. Puede tener errores y comportamientos inesperados si se ejecutan instrucciones en bloques With, sin que se ejecuten las instrucciones With o End With.


Asc (Ejemplo de la función)
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.


CBool (Ejemplo de la función)
Ejemplo de la función CBool

En este ejemplo se utiliza la función CBool para convertir una expresión a un tipo de datos Boolean. Si la expresión se evalúa como un valor diferente de cero, CBool devolverá True; de lo contrario, devolverá False.

Dim A, B, Prueba

A = 5: B = 5	' Inicializa variables.

Prueba = CBool(A = B)	' Prueba contiene True.

A = 0	' Define variable.

Prueba = CBool(A)	' Prueba contiene False.


CByte (Ejemplo de la función)
Ejemplo de la función CByte

En este ejemplo se utiliza la función CByte para convertir una expresión a un tipo de datos Byte.

Dim MiDoble, MiByte

MiDoble = 125.5678	' MiDoble es un Double.

MiByte = CByte(MyDouble)	' MiByte contiene 126.


CDate (Ejemplo de la función)
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#, #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.


CCur (Ejemplo de la función)
Ejemplo de la función CCur

En este ejemplo se utiliza la función CCur para convertir una expresión a un tipo de datos Currency.

Dim MiDoble, MiMoneda

MiDoble = 543.214588	' MiDoble es del tipo Double.

MiMoneda = CCur(MiDoble * 2)	' Convierte el resultado ' de MiDoble * 2

' (1086.429176) al tipo

' Currency (1086.4292).


CDbl (Ejemplo de la función)
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.


CInt (Ejemplo de la función)
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.


CLng (Ejemplo de la función)
Ejemplo de la función CLng

En este ejemplo se utiliza la función CLng para convertir un valor a un tipo de datos Long.

Dim MiValor1, MiValor2, MiLargo1, MiLargo2

MiValor1 = 25427.45: MiValor2 = 25427.55	' MiValor1, MiValor2 son Doubles.

MiLargo1 = CLng(MiValor1)	' MiLargo1 contiene 25427.

MiLargo2 = CLng(MiValor2)	' MiLargo2 contiene 25428.


CSng (Ejemplo de la función)
Ejemplo de la función CSng

En este ejemplo se utiliza la función CSng para convertir un valor a un tipo de datos Single.

Dim MiDoble1, MiDoble2, MiSimple1, MiSimple2

' MiDoble1, MiDoble2 son Doubles.

MiDoble1 = 75.3421115: MiDoble2 = 75.3421555

MiSimple1 = CSng(MiDoble1)	' MiSimple1 contiene 75.34211.

MiSimple2 = CSng(MiDoble2)	' MiSimple2 contiene 75.34216.


CStr (Ejemplo de la función)
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".


CVar (Ejemplo de la función)
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.


CVErr (Ejemplo de la función)
Ejemplo de la función CVErr

En este ejemplo se utiliza la función CVErr para devolver una Variant cuyo VarType es vbError (10). La función definida por el usuario CalcularDoble devuelve un error si el argumento que se le pasa no es un número. CVErr es útil para devolver errores definidos por el usuario desde procedimientos definidos por el usuario o para diferir el tratamiento de un error en tiempo de ejecución. Use la función IsError para comprobar si el valor representa un error.

' Llama a CalcularDoble con un argumento que produce un
' error.

Sub Test()

Debug.Print CalcularDoble("345.45roberto")

End Sub

' Define el procedimiento Function CalcularDoble.

Function CalcularDoble(Número)

If IsNumeric(Número) Then

CalcularDoble = Número * 2	' Devuelve el resultado.

Else

CalcularDoble = CVErr(2001)	' Devuelve un número de error definido por el usuario

End If

End Function


Val (Ejemplo de la función)
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.


Funciones de conversión

Asc (Función)

CBool (Función)

CByte (Función)

CCur (Función)

CDate (Función)

CDec (Función)

CDbl (Función)

Chr (Función)

CInt (Función)

CLng (Función)

CSng (Función)

CStr (Función)

CVar (Función)

CVErr (Función)

Format (Función)

Hex (Función)

Oct (Función)

Str (Función)

Val (Función)


Asc(Función)

Devuelve un tipo Integer que representa el código de carácter correspondiente a la primera letra de una cadena.

Sintaxis

Asc(cadena)

El argumento obligatorio cadena es una expresión de cadena válida. Si cadena no contiene caracteres, se produce un error en tiempo de ejecución.

Comentarios

El intervalo del valor de retorno es entre 0 y 255 en sistemas que no sean DBCS, y entre -32768 y 32767 en sistemas DBCS.

Nota   La función AscB se utiliza con bytes de datos contenidos en una cadena. En lugar de devolver el código de carácter para el primer carácter, AscB devuelve el primer byte. La función AscW siempre devuelve el código de carácter Unicode en plataformas donde no se admite Unicode, en cuyo caso, el comportamiento es idéntico al de la función Asc.


CVErr (Función)

Devuelve un tipo Variant de un subtipo Error que contiene un número de error especificado por el usuario.

Sintaxis

CVErr(númeroerror)

El argumento obligatorio númeroerror es cualquier número de error válido.

Comentarios

Utilice la función CVErr para crear errores definidos por el usuario en los procedimientos creados por el usuario. Por ejemplo, si ha creado una función que acepta varios argumentos y normalmente devuelve una cadena, puede hacer que su función evalúe los argumentos de entrada para asegurarse de que están en el intervalo adecuado. Si no lo están, es probable que su función no devuelva el valor de retorno que esperaba. En este caso, CVErr le permite devolver un número de error que le indicará qué acción realizar.

No hay una conversión implícita en Error. Por ejemplo, no puede asignar directamente el valor de retorno de CVErr a una variable que no sea Variant. Sin embargo, puede realizar una conversión explícita (utilizando CInt, CDbl, etc…) del valor devuelto por CVErr y asignar a una variable del tipo de dato adecuado.


Val (Función)

Devuelve los números contenidos en una cadena como un valor numérico del tipo adecuado.

Sintaxis

Val(cadena)

El argumento obligatorio cadena es cualquier expresión de cadena válida.

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 existe la posibilidad de que se puedan utilizar separadores decimales diferentes, debe utilizar CDbl para convertir una cadena a un número.


Funciones de conversión de tipos

Cada función convierte una expresión a un tipo de datos específico.

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)

CVar(expresión)

CStr(expresión)

El argumento obligatorio expresión es cualquier expresión de cadena o expresión numérica.

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	Boolean	Cualquier expresión de cadena o numérica válida.
CByte	Byte	0 a 255.
CCur	Currency	-922.337.203.685.477,5808 a 922.337.203.685.477,5807.
CDate	Date	Cualquier expresión de fecha.
CDbl	Double	-1,79769313486232E308 a  -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos.
CDec	Decimal	+/-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	Integer	-32.768 a 32.767; las fracciones se redondean.
CLng	Long	-2.147.483.648 a 2.147.483.647; las fracciones se redondean.
CSng	Single	-3,402823E38 a -1,401298E-45 para valores negativos; 1,401298E-45 a 3,402823E38 para valores positivos.
CVar	Variant	El mismo intervalo que Double para valores numéricos. El mismo intervalo que String para valores no numéricos.
CStr	String	El valor de retorno de CStr depende del argumento expresión.
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.


Valores de retorno de CStr

Si expresión es	CStr devuelve
Boolean	Una cadena que contiene True o False
Date	Una cadena que contiene una fecha en el formato de fecha corta de su sistema
Null	Un error en tiempo de ejecución
Empty	Una cadena de longitud cero ("")
Error	Una cadena que contiene la palabra Error seguida del número de error
Otro número	Una cadena que contiene el número


Boolean (Tipo de datos)

Las variables tipo Boolean se almacenan como números de 16 bits (2 bytes), pero sólo pueden ser True o False. Las variables tipo Boolean se presentan como True o False(cuando se utiliza Print) o #TRUE# o #FALSE# (cuando se utiliza Write #). Utilice las palabras clave True y False para asignar uno de los dos estados a las variables tipo Boolean.

Cuando se convierten a tipo Boolean otros tipos numéricos, 0 se convierte en False, y el resto de los valores se convierten en True. Cuando los valores tipo Boolean se convierten a otros tipos de datos numéricos, False se convierta en 0 y True se convierte en -1.


Byte (Tipo de datos)

Las variables tipo Byte se almacenan como números de 8 bits (1 byte) sencillos sin signo con un intervalo de valores entre 0 y 225.

El tipo de dato Byte es útil para almacenar datos binarios.


Currency (Tipo de datos)

Las variables tipo Currency se almacenan como números de 64 bits (8 bytes) en un formato de número entero a escala de 10.000 para dar un número de punto fijo con 15 dígitos a la izquierda del signo decimal y 4 dígitos a la derecha. Esta representación proporciona un intervalo de -922.337.203.685.477,5808 a 922.337.203.685.477,5807. El carácter de declaración de tipo para Currency es el signo @.

El tipo de datos Currency es útil para cálculos monetarios y para cálculos de punto fijo, en los cuales la precisión es especialmente importante.


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,79769313486232E308 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 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.


Date (Tipo de datos)

Las variables tipo Date se almacenan como números IEEE de signo flotante de 64 bits (8 bytes) que van del 1 de enero del 100 al 31 de diciembre de 9999 y horarios de 0:00:00 a 23:59:59. Cualquier valor reconocible de fecha literal se puede asignar a las variables tipo Date. Los literales de fechas se deben poner entre caracteres de signo de número (#). Por ejemplo, #1 Enero, 1993# o #1 Ene 93#.

Las variables tipo Date presentan fechas de acuerdo al formato de fecha corto reconocido por su sistema. La hora se presenta de acuerdo al formato de hora reconocido por su sistema (12 ó 24 horas).

Cuando se convierten a tipo Date otros tipos de datos numéricos, los valores a la izquierda del signo decimal representan la información de fecha, mientras que los valores a la derecha del signo decimal representan la hora. Medianoche es 0 y mediodía es 0,5. Los números enteros negativos representan fechas anteriores al 30 de diciembre de 1899.


Decimal (Tipo de datos)

Las variables tipo Decimal se almacenan como enteros sin signo de 96 bits (12 bytes) escalados con una potencia variable de 10. La potencia del factor de escala de 10 especifica el número de dígitos que hay a la derecha del signo decimal y varía desde 0 a 28. Con una escala de 0 (sin decimales), el mayor valor posible es +/-79.228.162.514.264.337.593.543.950.335. Con 28 posiciones decimales, el mayor valor es +/-7,9228162514264337593543950335 y el menor valor destinto de 0 es +/-0,0000000000000000000000000001.

Nota   En este momento, el tipo de dato Decimal sólo se puede utilizar con un Variant, es decir, no puede declarar una variable de tipo Decimal. Sin embargo, puede crear un tipo Variant con subtipo Decimal utilizando la función CDec.


Double (Tipo de datos)

Las variables tipo Double (coma flotante y precisión doble) se almacenan como números IEEE de coma flotante de 64 bits (8 bytes) con valores de -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos y de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. El carácter de declaración de tipo para Double es el signo de número (#).


Integer (Tipo de datos)

Las variables tipo Integer se almacenan como números de 16 bits (2 bytes) con valores que van de -32.768 a 32.767. El carácter de declaración de tipo para el tipo Integer es el signo de porcentaje (%).

Las variables tipo Integer también se pueden utilizar para representar valores enumerados. Un valor enumerado puede contener un conjunto finito de números enteros únicos, cada uno de los cuales tiene un significado especial en el contexto en el que se utiliza. Los valores enumerados proporcionan una forma cómoda de seleccionar entre un número conocido de opciones. Por ejemplo, cuando se pregunta al usuario que elija un color de una lista, se podría tener 0 = negro, 1 = blanco y así sucesivamente. Es una buena práctica de programación definir constantes utilizando la instrucción Const para cada valor enumerado.


Long (Tipo de datos)

Las variables tipo Long (entero largo) se almacenan como números con signo de 32 bits (4 bytes) con un valor comprendido entre - 2.147.483.648 y 2.147.483.647. El carácter de declaración de tipo para Long es el signo &.


Object (Tipo de datos)

Las variables tipo Object se almacenan como direcciones de 32 bits (4 bytes) que hacen referencia a objetos. Al utilizar la instrucción Set, una variable declarada con tipo Object puede tener asignado cualquier referencia a un objeto.

Nota   A pesar de que una variable declarada con un tipo Object es lo suficientemente flexible como para contener una referencia a cualquier objeto, enlazar con el objeto referenciado por dicha variable es un proceso lento (enlace en tiempo de ejecución). Para forzar el enlace temprano (enlace en tiempo de compilación), se puede asignar la referencia del objeto a una variable declarada con un nombre de clase específico.


Single (Tipo de datos)

Las variables tipo Single (coma flotante y precisión simple) se almacenan como números IEEE de coma flotante de 32 bits (4 bytes) con valores que van de -3,402823E38 a -1,401298E-45 para valores negativos y de 1,401298E-45 a 3,402823E38 para valores positivos. El carácter de declaración de tipo para Single es el signo de exclamación (!).


String (Tipo de datos)

Hay dos clases de cadenas: cadenas de longitud variable y cadenas de longitud fija.

•	Las cadenas de longitud variable pueden contener hasta 2.000 millones de caracteres (2^31).

•	Las cadenas de longitud fija que pueden contener de 1 a 64 KB (2^16) caracteres.

Nota   No puede utilizar cadenas de longitud fija tipo Public en un módulo de clase.

Los códigos para caracteres de tipo String varían desde 0 a 255. Los primeros 128 caracteres (0–127) del juego de caracteres corresponden a las letras y los símbolos de un teclado estándar de EE.UU. Estos primeros 128 caracteres son los mismos que los definidos por el juego de caracteres ASCII. Los siguientes 128 caracteres (128–255) representan caracteres especiales, como letras de alfabetos internacionales, acentos, símbolos de moneda y fracciones. El carácter de declaración de tipo para String es el signo de dólar ($).


Tipo de datos definido por el usuario

Cualquier tipo de datos que defina utilizando la instrucción Type. Los tipos de datos definidos por el usuario pueden contener uno o más elementos de cualquier tipo de datos, de matriz o de un tipo previamente definido por el usuario. Por ejemplo:

Type MiTipo

MiNombre As String	' La variable tipo String almacena un nombre.

MiFechaNacimiento As Date	' La variable tipo Date almacena una fecha de nacimiento.

MiSexo As Integer	' La variable Integer almacena el sexo (0 para

End Type	' mujer, 1 para hombre).


Variant (Tipo de datos)

Variant es el tipo de datos al que se convierten todas las variables si no se declaran explícitamente como de algún otro tipo (utilizando instrucciones como Dim, Private, Public o Static). El tipo de datos Variant no tiene carácter de declaración de tipo.

Variant es un tipo de datos especial que puede contener cualquier clase de datos excepto datos tipo String de longitusd fija y tipos definidos por el usuario. Variant también puede contener los valores especiales Empty, Error, Nothing y Null. Puede determinar la forma en que desea tratar los datos tipo Variant utilizando las funciones VarType o TypeName.

Los datos numéricos pueden ser cualquier número entero o real entre -1,797693134862315E308 y -4,94066E-324 para los valores negativos, y entre 4,94066E-324 y 1,797693134862315E308 para los valores positivos. Generalmente, los datos tipo Variant numéricos se conservan en su tipo de datos original dentro de un tipo Variant. Por ejemplo, si asigna un tipo Integer a un tipo Variant, las operaciones posteriores tratan el tipo Variant como si fuera un tipo Integer. No obstante, si realiza una operación aritmética en un tipo Variant que contenga un tipo de datos Byte, Integer, Long o Single, y el resultado supera el intervalo normal del tipo de datos original, el resultado se promociona dentro del tipo Variant hasta el tipo de datos mayor siguiente. Un tipo Byte se promociona a un tipo Integer, un tipo Integer a un tipo Long, y un tipo Long y un tipo Single se promocionan a un tipo Double. Se produce un error cuando las variables tipo Variant que contienen valores tipo Currency, Decimal y Double superan sus intervalos respectivos.

Puede utilizar el tipo de datos Variant en lugar de cualquier otro tipo de datos para trabajar con los datos de una manera más flexible. Si el contenido de una variable tipo Variant está formado por dígitos, pueden ser la representación de cadena de los dígitos o su valor real, dependiendo del contexto. Por ejemplo:

Dim MiVar As Variant

MiVar = 98052

En el ejemplo anterior, MiVar contiene una representación numérica, el valor real 98052. Los operadores aritméticos funcionan de la manera esperada en las variables tipo Variant que contienen valores numéricos o datos de cadena que se pueden interpretar como números. Si utiliza el operador + para agregar MiVar a otra variable tipo Variant que contiene un número, o a una variable de un tipo numérico, el resultado es una suma aritmética.

El valor Empty indica una variable tipo Variant que no se ha inicializado (a la que no se ha asignado un valor inicial). Una variable tipo Variant que contenga Empty se considera 0 si se utiliza en un contexto numérico y una cadena de longitud cero ("") si se utiliza en un contexto de cadenas.

No confunda Empty con Null. Null indica que la variable tipo Variant intencionadamente no contiene ningún dato válido.

En un tipo Variant, Error es un valor especial utilizado para indicar que se ha producido una condición de error en un procedimiento. No obstante, a diferencia de otros tipos de errores, no se produce el control de errores normal a nivel de aplicación. Esto permite al usuario, o a la propia aplicación, seleccionar entre varias acciones alternativas basándose en el valor de error. Los valores Error se crean convirtiendo números reales a valores de error mediante la función CVErr.


Date (Ejemplo de la función)
Ejemplo de la función Date

En este ejemplo se utiliza la función Date para devolver la fecha del sistema actual.

Dim MiFecha

MiFecha = Date	' MiFecha contiene la fecha del sistema actual.


Date (Ejemplo de la instrucción)
Ejemplo de la instrucción Date

En este ejemplo se utiliza la instrucción Date para establecer la fecha del sistema del ordenador. En el entorno de desarrollo, el literal de fecha se presentará en formato abreviado, utilizando la configuración regional de su código.

Dim MiFecha

MiFecha = #12 Febrero 1985#	' Asigna una fecha.

Date = MiFecha	' Cambia la fecha del sistema.


DateAdd (Ejemplo de la función)
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


DateDiff (Ejemplo de la función)
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


DatePart (Ejemplo de la función)
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 (Ejemplo de la función)
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 (Ejemplo de la función)
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 (Ejemplo de la función)
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.


Hour (Ejemplo de la función)
Ejemplo de la función Hour

En este ejemplo se utiliza la función Hour para obtener el componente horario de una hora 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 MiTiempo, MiHora

MiTiempo = #4:35:17 PM#	' Asigna una hora.

MiHora = Hour(MiTiempo)	' MiHora contiene 16.


Minute (Ejemplo de la función)
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, la hora(literal de fecha), 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 (Ejemplo de la función)
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.


Now (Ejemplo de la función)
Ejemplo de la función Now

En este ejemplo se utiliza la función Now para devolver la fecha y la hora del sistema actual.

Dim Hoy

Hoy = Now	' Obtiene la fecha y la hora del sistema actual.


Second (Ejemplo de la función)
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, la hora(literal de fecha), 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.


Time (Ejemplo de la función)
Ejemplo de la función Time

En este ejemplo se utiliza la función Time para devolver la hora del sistema actual.

Dim MiTiempo

MiTiempo = Time	' Devuelve la hora del sistema actual.


Time (Ejemplo de la instrucción)
Ejemplo de la instrucción Time

En este ejemplo se utiliza la instrucción Time para establecer la hora del sistema del ordenador en una hora definida por el usuario.

Dim MiTiempo

MiTiempo = #4:35:17 PM#	' Asigna una hora.

Time = MiTiempo	' Establece la hora del sistema MiTiempo.


Timer (Ejemplo de la función)
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


TimeSerial (Ejemplo de la función)
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 (Ejemplo de la función)
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.


Weekday (Ejemplo de la función)
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.


Year (Ejemplo de la función)
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.


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.


Date (Instrucción)

Establece la fecha actual del sistema.

Sintaxis

Date = fecha

Para equipos que trabajen con Microsoft Windows 95, el argumento fecha debe ser una fecha entre el 1 de enero de 1980 y el 31 de diciembre de 2099. Para equipos que trabajen con Microsoft Windows NT, el argumento fecha debe estar comprendido entre el 1 de enero de 1980 al 31 de diciembre del 2079.


DateAdd (Función)

Devuelve un valor de tipo Variant (Date) con una fecha a la que se ha agregado un intervalo de tiempo especificado.

Sintaxis

DateAdd(interval, number, date)

La sintaxis de la función DateAdd consta de los siguientes argumentos con nombre:

Parte	Descripción
interval	Requerido. Expresión de tipo cadena (String) que contiene el intervalo de tiempo que se desea agregar.
Number	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).
Date	Requerido. Valor de tipo Variant (Date) o literal que representa la fecha en la que se agregó el intervalo.
Valores

El argumento interval 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 date, 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 date 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 date), se produce un error.

Si number no es un valor de tipo Long se redondeará al número entero más cercano antes de ser evaluado.


DateDiff (Función)

Devuelve un valor de tipo Variant (Long) que especifica el número de intervalos de tiempo entre dos fechas determinadas.

Sintaxis

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

La sintaxis de la función DateDiff consta de los siguientes argumentos con nombre:

Parte	Descripción
interval	Requerido. Expresión de tipo cadena con el intervalo de tiempo utilizado para calcular la diferencia entre date1 y date2.
date1, date2	Se requiere; Variant (Date). Las dos fechas que se van a utilizar en el cálculo.
firstdayofweek	Opcional. Constante que especifica el primer día de la semana. Si no se especifica, se asume que es el domingo.
firstweekofyear	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 interval 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
El argumento firstdayofweek toma los siguientes valores:

Constante	Valor	Descripción
vbUseSystem	0	Utilice la 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
El argumento firstweekofyear toma los valores siguientes:

Constante	Valor	Descripción
vbUseSystem	0	Utilice la configuración de la API de NLS.
VbFirstJan1	1	Empieza con la semana en la que se encuentra el 1 de enero (predeterminado).
VbFirstFourDays	2	Empieza con la primera semana que tenga al menos cuatro días en el nuevo año.
VbFirstFullWeek	3	Empieza con la primera semana que esté completamente incluída en el nuevo año.
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 date1 y date2, puede utilizar Día del año ("y") o Día ("d"). Cuando interval es Día de la semana ("w"), DateDiff devuelve el número de semanas entre las dos fechas. Si date1 es lunes, DateDiff contará el número de lunes hasta date2. En la cuenta incluirá date2, pero no date1. Si interval 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 date1 y date2. DateDiff contará date2 si es domingo, pero no date1, aunque sea domingo.

Si date1 se refiere a un momento posterior en el tiempo a date2, la función DateDiff devolverá un número negativo.

El argumento firstdayofweek 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.


DatePart (Función)

Devuelve un valor de tipo Variant (Integer) que contiene la parte especificada de la fecha dada.

Sintaxis

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

La sintaxis de la función DatePart consta de los siguientes argumentos con nombre:

Parte	Descripción
interval	Requerido. Expresión de tipo cadena con el intervalo de tiempo que desea devolver.
date	Requerido. Tipo de valor Variant (Date) que se desea evaluar.
firstdayofweek	Opcional. Una constante que especifica el primer día de la semana. Si no se especifica, se asume que es el domingo.
firstweekofyear	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 interval 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 firstdayofweek 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
El argumento firstweekofyear toma los siguientes valores:

Constante	Valor	Descripción
vbUseSystem	0	Utiliza el valor de la API de NLS.
vbFirstJan1	1	Empieza con la semana en la que se encuentra el 1 de enero (predeterminado).
vbFirstFourDays	2	Empieza con la primera semana que tenga al menos cuatro días en el nuevo año.
vbFirstFullWeek	3	Empieza con la primera semana que esté completamente incluída en el nuevo año.
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 firstdayofweek 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.


DateSerial (Función)

Devuelve un tipo Variant (Date) para un año, mes y día especificados.

Sintaxis

DateSerial(year, month, day)

La sintaxis de la función DateSerial consta de los siguientes argumentos con nombre:

Parte	Descripción
year	Se requiere; Integer. Número entre 100 y 9999, inclusive o una expresión numérica.
month	Se requiere; Integer. Cualquier expresión numérica.
Day	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)

Para el argumento year, los valores entre 0 y 99, inclusive, se interpretan como los años 1900–1999. Para el resto de los argumentos year se usa un año con los cuatro dígitos (por ejemplo, 1800).

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.


DateValue (Función)

Devuelve un tipo Variant (Date).

Sintaxis

DateValue(fecha)

El argumento fecha es normalmente una expresión de tipo cadena (String) 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.


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)

El argumento fecha es cualquier valor de tipo Variant, expresión numérica, cadena o cualquier combinación que pueda representar una fecha. Si fecha contiene Null, la función devolverá Null.


Hour (Función)

Devuelve un valor de tipo Variant (Integer) que especifica un número entero entre 0 y 23, inclusive, que representa la hora del día.

Sintaxis

Hour(hora)

El argumento hora puede ser un valor de tipo Variant, una expresión numérica, expresión de tipo cadena o cualquier combinación, que pueda representar una hora. Si hora contiene Null, la función devolverá Null.


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)

El argumento hora es cualquier valor de tipo Variant, una expresión numérica, expresión de tipo cadena o cualquier combinación que pueda representar una hora. Si hora contiene Null, la función devolverá Null.


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)

El argumento fecha es cualquier valor de tipo Variant, una expresión numérica, expresión de tipo cadena o cualquier combinación, que pueda representar una fecha. Si fecha contiene Null, la función devolverá Null.


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


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)

El argumento hora es cualquier valor de tipo Variant, una expresión numérica, expresión de tipo cadena o cualquier combinación, que pueda representar una hora. Si hora contiene Null, la función devolverá Null.


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.


Time (Instrucción)

Establece la hora actual del sistema.

Sintaxis

Time = hora

El argumento hora es cualquier expresión numérica, expresión de tipo cadena o cualquier combinación que pueda representar una hora.

Comentarios

Si hora es una cadena, Time intenta convertirla en una hora usando los separadores de hora que se especificaron para su sistema. Si no se puede convertir en una hora válida, se producirá un error.


Timer (Función)

Devuelve un tipo Single que representa el número de segundos transcurridos desde la medianoche.

Sintaxis

Timer


TimeSerial (Función)

Devuelve un tipo Variant (Date) que contiene la hora actual para una hora, minuto y segundo específicos.

Sintaxis

TimeSerial(hour, minute, second)

La sintaxis de la función TimeSerial consta de los siguientes argumentos con nombre:

Parte	Descripción
hour	Se requiere; Variant (Integer). Número entre 0 (12:00 a.m.) y 23 (11:00 p.m.), inclusive o una expresión numérica.
minute	Se requiere; Variant (Integer). Cualquier expresión numérica.
Second	Se requiere; 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.


TimeValue (Función)

Devuelve un tipo Variant (Date) que contiene la hora.

Sintaxis

TimeValue(hora)

El argumento hora es normalmente una expresión de tipo 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.


Weekday (Función)

Devuelve un valor de tipo Variant (Integer) que contiene un número entero que representa el día de la semana.

Sintaxis

Weekday(fecha, [firstdayofweek])

La sintaxis de la función Weekday consta de los siguientes argumentos con nombre:

Parte	Descripción
date	Requerido. Variant, expresión numérica, expresión de tipo cadena o cualquier combinación que puede representar una fecha. Si date contiene Null, la función devolverá Null.
firstdayofweek	Opcional. Una constante que especifica el primer día de la semana. Si no se especifica, se asume el valor vbSunday.
Valores

El argumento firstdayofweek 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


Year Function

Devuelve un valor de tipo Variant (Integer) que contiene un número entero que representa el año.

Sintaxis

Year(fecha)

El argumento fecha es cualquier valor de tipo Variant, expresión numérica, expresión de tipo cadena o cualquier combinación que puede representar una fecha. Si fecha contiene Null, la función devolverá Null.


Array (Ejemplo de la función)
Ejemplo de la función Array

En este ejemplo se utiliza la función Array para devolver una Variant que contiene una matriz.

Dim MiSemana, MiDía

MiSemana = Array("Lun", "Mar", "Miér", "Jue", "Vie", "Sáb", "Dom")

' Se da por hecho que el límite inferior es igual a 1

' en los valores devueltos (utilizando Opción Bases).

MiDía = MiSemana(2)	' MiDía contiene "Mar".

MiDía = MiSemana(4)	' MiDía contiene "Jue".


Const (Ejemplo de la instrucción)
Ejemplo de la instrucción Const

En este ejemplo se utiliza la instrucción Const para declarar constantes que se utilizan en lugar de valores literales. Las constantes Public se producen en la sección General de un módulo estándar, en lugar de en un módulo de clase. Las constantes Private pueden estar en la sección General de cualquier tipo de módulo.

' Las constantes son privadas por configuración
' predeterminada.

Const MiVar = 459

' Declara constante Public.

Public Const MiCadena = "AYUDA"

' Declara constante Private Integer.

Private Const MiEnt As Integer = 5

' Declara varias constantes en la misma línea.

Const MiCad = "Hola", MiDoble As Double = 3.4567


CreateObject (Ejemplo de la función)
Ejemplo de la función CreateObject

Este ejemplo utiliza la función CreateObject para establecer una referencia (xlApp) a Microsoft Excel. Utiliza la referencia para tener acceso a la propiedad Visible de Microsoft Excel, después utiliza el método Quit de Microsoft Excel para cerrarlo. Finalmente, se libera la referencia.

Dim xlApp As Object	' Declara la variable para mantener la referencia.

Set xlApp = CreateObject("excel.application")

' Puede tener la propiedad Visible a True

' si quiere ver la aplicación.

xlApp.Visible = True

' Utiliza xlApp para tener acceso a otros objetos

' Microsoft Excel.

xlApp.Quit	' Cuando finaliza, utiliza el método Quit para cerrar

Set xlApp = Nothing	' la aplicación, después libera la referencia.


Declare (Ejemplo de la instrucción)
Ejemplo de la instrucción Declare

En este ejemplo se muestra como se utiliza la instrucción Declare en el nivel de módulo de un módulo estándar para declarar una referencia a un procedimiento externo en una biblioteca de vínculo dinámico (DLL) o un código de recurso Macintosh. Puede incluir las instrucciones Declare en módulos de clase si las instrucciones Declare son Private.

' En Microsoft Windows (16-bit):

Declare Sub MensajeBip Lib "User" (ByVal N As Integer)

' Suponga que AlgúnBip es un alias para el nombre de procedimiento.

Declare Sub MensajeBip Lib "User" Alias "AlgúnBip"(ByVal N As Integer)

' Use un ordinal en la cláusula Alias para llamar a GetWinFlags.

Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' En sistemas Microsoft Windows de 32 bits, especifique la biblioteca USER32.DLL,

' en lugar de USER.DLL. Puede utilizar la compilación condicional para escribir código

' que se puede ejecutar en Win32 o en Win16.

#If Win32 Then

Declare Sub MensajeBip Lib "User32" (ByVal N As Long)

#Else

Declare Sub MensajeBip Lib "User" (ByVal N As Integer)

#End If

' En Macintosh:

Declare Sub MensajeAlerta Lib "MiDd:MiAlerta" Alias "MiAlerta" (ByVal N _

As Integer)

' Use un recurso de código en la cláusula Alias.

Declare Sub MensajeAlerta Lib "MiDd:MiAlerta" Alias "XTST$MiAlerta" _

(ByVal N As Integer)

' Como el especificador de tipo de recurso de código sólo tiene 3 caracteres, asegúrese de dejar un

' espacio en blanco donde estaría normalmente el último carácter.

Declare Sub MensajeAlerta Lib "MiDd:UnaAlerta" Alias "COD $UnaAlerta" _

ByVal N As Integer)


Deftype (Ejemplo de la instrucción)
Ejemplo de la instrucción Deftipo

En este ejemplo se muestran los usos de la instrucción Deftipo para establecer el tipo de datos predeterminado de variables y funciones cuyos nombres comienzan con caracteres específicos. El tipo de datos predeterminado solamente se puede anular mediante una asignación explícita utilizando la instrucción Dim. Deftipo sólo se pueden utilizar en el nivel módulo (es decir, no se admiten dentro de procedimientos).

' Los nombres de variables que comienzan con las letras de A a K son del tipo Integer de manera predeterminada.

DefInt A-K

' Los nombres de variables que comienzan con las letras de L a Z son del tipo String de manera predeterminada.

DefStr L-Z

VarCálculo = 4	' Inicializa Integer.

VarCadena = "Hola aquí"	' Inicializa String.

UnaVar = "Hola" 	' Causa el error "No coinciden los tipos.

Dim Cálculo As Double	' Establece explícitamente el ' tipo como Double.

Cálculo = 2.3455	' Asigna un Double.

' Las instrucciones Deftipo también se aplican a procedimientos función.

CalcNum = ATestFunction(4)	' Llama a función definida' por el usuario.

' Definición del procedimiento función ATestFunction.

Function ATestFunction(INúmero)

ATestFunction = INúmero * 2	' El valor devuelto es un entero.

End Function


Dim (Ejemplo de la instrucción)
Ejemplo de la instrucción Dim

En este ejemplo se muestran los usos varios de la instrucción Dim para declarar variables. La instrucción Dim también se utiliza para declarar matrices. El límite inferior predeterminado para los subíndices de matrices es 0 y puede ser ignorado en el nivel módulo utilizando la instrucción Option Base.

' AlgúnValor y MiValor se declaran Variant por

' configuración predeterminada, sus valores iniciales
' son iguales a Vacío.

Dim AlgúnValor, MiValor

' Se declara explícitamente una variable del tipo
' Integer.

Dim Número As Integer

' Declaraciones múltiples en una línea. OtraVar es del

' tipo Variant debido a que se omite su tipo.

Dim OtroVar, Elegir As Boolean, FechaNacimiento As Date

' MatrizDías es una matriz de Variants con un índice de

' 51 elementos, que va de 0 hasta 50, asumiendo que

' Option Base está configurada como 0 (predeterminada)
' en el módulo actual.

Dim MatrizDías(50)

' Matriz es una matriz bidimensional de enteros.

Dim Matriz(3, 4) As Integer

' MiMatriz es una matriz tridimensional de dobles con

' límites explícitos.

Dim MiMatriz(1 To 5,  4 To 9,  3 To 5) As Double

' FechaNacimiento es una matriz de fechas con índices
' del 1 al 10.

Dim FechaNacimiento(1 To 10) As Date

' MiMatriz es a una matriz dinámica de variantes.

Dim MiMatriz()


Erase (Ejemplo de la instrucción)
Ejemplo de la instrucción Erase

En este ejemplo se utiliza la instrucción Erase para reinicializar los elementos de matrices de tamaño fijo y liberar espacio de almacenamiento en matrices dinámicas.

' Declara las variables de la matriz.

Dim MatrizNum(10) As Integer	' Matriz de enteros.

Dim MatrizCadVar(10) As String	' Matriz de cadenas variables.

Dim MatrizCadFijas(10) As String * 10	' Matriz de cadenas fijas.

Dim MatrizVar(10) As Variant	' Matriz ' Variante.

Dim MatrizDin() As Integer	' Matriz ' Dinámica.

ReDim MatrizDin(10)	' Establece espacio almacenamiento.

Erase MatrizNum	' Establece en 0 cada elemento.

Erase MatrizCadVar	' Cada elemento se establece a

' una cadena de longitud cero ("").

Erase MatrizCadFijas	' Establece en 0 ' cada elemento.

Erase MatrizVar	' Establece en Vacío cada elemento.

Erase MatrizDin	 Libera memoria utilizada por la matriz.


Function (Ejemplo de la instrucción)
Ejemplo de la instrucción Function

En este ejemplo se utiliza la instrucción Function para declarar el nombre, los argumentos y el código que forman el cuerpo de un procedimiento Function. El último ejemplo utiliza tipos forzados, argumentos Optional inicializados.

' La siguiente función definida por el usuario devuelve

' la raíz cuadrada del argumento que se le pasa.

Function CalculaRaizCuadrada(ArgNumerico As Double) As Double

If ArgNumerico < 0 Then	' Se evalúa el argumento.

Exit Function	' Salida hacia el procedimiento que llamó a la función.

Else

CalculaRaizCuadrada = Sqr(ArgNumerico)
' Devuelve la raíz cuadrada.

End If

End Function

El uso de la palabra clave ParamArray permite que una función acepte un número variable de argumentos. En la siguiente definición, PrimerArg se transfiere por valor.

Function CalcSum(ByVal PrimerArg As Integer, ParamArray OtrosArgs())

Dim ValorDevuelto

' Si se invoca la función como:

ValorDevuelto = CalcSum(4, 3 ,2 ,1)

' Las variables locales obtienen los valores
' siguientes: PrimerArg = 4,

' OtrosArgs(1) = 3, OtrosArgs(2) = 2, y así

' sucesivamente, asumiendo que el límite inferior
' predeterminado para matrices es igual a 1.

Los argumentos Optional ahora pueden tener valores predeterminados y tipos distintos de Variant.

' Si los argumentos de una función se definen como:

Function MiFunc(MiCad As String, Optional MiArg1 As _ Integer = 5, Optional MiArg2 = “Pepa”)

Dim RetVal

' La función puede ser invocada de las formas
' siguientes:

RetVal = MiFunc("Hola", 2, "Mundo")	' Se proveen los 3 argumentos.

RetVal = MiFunc("Prueba", , 5)	' Se omite el segundo argumento.

' Los argumentos uno y tres utilizan argumentos con nombre.

RetVal = MiFunc(MiCad:="Hola ", MiArg1:=7)


GetObject (Ejemplo de la función)
Ejemplo de la función GetObject

Este ejemplo utiliza la función GetObject para obtener una referencia a una hoja de cálculo Microsoft Excel específica (MiXL). Utiliza la propiedad Application de la hoja de cálculo para hacer visible Microsoft Excel, para cerrarlo, etc. La primera llamada a GetObject causa un error si Microsoft Excel no se está ejecutando. En el ejemplo, el error produce que el indicador Excelnoseejecutaba se establezca a True. La segunda llamada a GetObject especifica un archivo a abrir. Si Microsoft Excel no se está ejecutando, esta segunda llamada los inicia y devuelve una referencia a la hoja de cálculo representada por el archivo especificado. El archivo, miprueba.xls en el ejemplo, debe existir en la ubicación especificada; en caso contrario se genera un error de automatización de Visual Basic. A continuación, el código de ejemplo hace visibles Microsoft Excel y la ventana que contiene la hoja de cálculo especificada. Finalmente, si no se ejecutó una versión anterior de Microsoft Excel, el código utiliza el método Quit del objeto Application para cerrar Microsoft Excel. Si la aplicación se estaba ejecutando , no se intenta cerrarla. La referencia se libera estableciendola a Nothing.

' Declara las rutinas API necesarias:

Declare Function FindWindow Lib "user32" Alias _

"FindWindowA" (ByVal lpClassName as String, _

ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _

ByVal wParam as Long _

ByVal lParam As Long) As Long

Sub GetExcel()

Dim MiXL As Object	' Variable que contiene la referencia a

' de Microsoft Excel.

Dim ExcelNoSeEjecutaba As Boolean	' Indicador para liberación final .

' Prueba para ver si hay una copia de Microsoft Excel ejecutándose.

On Error Resume Next	' Inicializa la interceptación del error.

' La llamada a la función Getobject sin el primer argumento devuelve una

' referencia a una instancia de la aplicación . Si no se está ejecutando,

' se produce un error . Observe que se utiliza la coma como el primer marcador del

' argumento.

Set MiXL = Getobject(, "Excel.Application")

If Err.Number <> 0 Then ExcelNoSeEjecutaba = True

Err.Clear	' Borra el objeto Err si se produce un error.

' Comprueba Excel. Si se está ejecutando Excel,

' lo introduce en la tabla Running Object .

DetectExcel

' Establece la variable de objeto para hacer referencia al archivo que desea ver.

Set MiXL = Getobject("c:\vb4\MIPRUEBA.XLS")

' Muestra Microsoft Excel mediante su propiedad Application . Después

' muestra la ventana actual que contiene el archivo que se utiliza la

' colección Windows de la referencia de objeto MiXL .

MiXL.Application.Visible = True

MiXL.Parent.Windows(1).Visible = True

' Haga aquí los controles

 	' del archivo.

' ...

' Si no se está ejecutando esta copia de Microsoft Excel cuando

' comenzó, ciérrela utilizando el método Quit de la propiedad Application.

' Observe que cuando intenta salir de Microsoft Excel, la barra de título

' de Microsoft Excel parpadea y Microsoft Excel muestra un mensaje

' preguntándole si desea guardar los archivos cargados.

If ExcelNoSeEjecutaba = True Then

MiXL.Application.Quit

End IF

Set MiXL = Nothing	' Libera la referencia a la

' aplicación y a la hoja de cálculo.

End Sub

Sub DetectExcel()

' El procedimiento dectecta un Excel en ejecución y lo registra.

Const WM_USER = 1024

Dim hWnd As Long

' Si se está ejecutando Excel esta llamada API devuelve el controlador .

hWnd = FindWindow("XLMAIN", 0)

If hWnd = 0 Then	' 0 quiere decir que Excel no se está ejecutando .

Exit Sub

Else

' Excel se está ejecutando por lo que se utiliza la función API SendMessage

' para introducirlo en la tabla Running Object.

SendMessage hWnd, WM_USER + 18, 0, 0

End If

End Sub


LBound (Ejemplo de la función)
Ejemplo de la función LBound

En este ejemplo se utiliza la función LBound para determinar el subíndice menor disponible para la dimensión indicada de una matriz.  Se utiliza la instrucción Option Base para ignorar el valor predeterminado 0 de la base del subíndice de la matriz.

Dim Menor

Dim MiMatriz(1 To 10, 5 To 15, 10 To 20) 	' Declara las variables de la matriz.

Dim UnaMatriz(10)

Menor = Lbound(MiMatriz, 1) 	' Devuelve 1.

Menor = Lbound(MiMatriz, 3)	' Devuelve 10.

Menor = Lbound(UnaMatriz)	' Devuelve 0 ó 1, dependiendo de la

' configuración de Option Base.


Let (Ejemplo de la instrucción)
Ejemplo de la instrucción Let

En este ejemplo se utilizan instrucciones con y sin la instrucción Let para asignar el valor de una expresión a una variable.

Dim MiCad, MiEnt

' Las siguientes asignaciones de variables utilizan la
' instrucción Let.

Let MiCad = "Hola mundo"

Let MiEnt = 5

Las siguientes son las mismas asignaciones sin la instrucción Let Let.

Dim MiCad, MiEnt

MiCad = "Hola mundo "

MiEnt = 5


Option Base (Ejemplo de la instrucción)
Ejemplo de la instrucción Option Base

En este ejemplo se utiliza la instrucción Option Base para ignorar el valor predeterminado 0 de la base del subíndice de la matriz. La función LBound devuelve el menor subíndice disponible de la dimensión indicada de la matriz. La instrucción Option Base sólo se utiliza en el nivel módulo.

Option base 1	' Establece los subíndices de matriz predeterminados en 1.

Dim Menor

Dim MiMatriz(20), Matriz2D(3, 4)	' Declara las variables de la matriz.

Dim MatrizCero(0 To 5)	' Ignora la base predeterminada del subíndice.

' Utilice la función LBound para determinar los límites inferiores de las matrices.

Menor = LBound(MiMatriz)	' Devuelve 1.

Menor = LBound(Matriz2D, 2)	' Devuelve 1.

Menor = LBound(MatrizCero)	' Devuelve 0.


Option Compare (Ejemplo de la instrucción)
Ejemplo de la instrucción Option Compare

En este ejemplo se utiliza la instrucción Option Compare para establecer el modo de comparación de cadenas predeterminado. La instrucción Option Compare sólo se utiliza en el nivel módulo.

' Establece el método de comparación de cadenas en Binario.

Option compare Binary 	' Esto es, "AAA" menos que "aaa"

' Establece el método de comparación de cadenas en Texto.

Option compare Text	' Esto es, "AAA" es igual a "aaa".


Option Explicit (Ejemplo de la instrucción)
Ejemplo de la instrucción Option Explicit

En este ejemplo se utiliza la instrucción Option Explicit para forzar la declaración explícita de todas las variables. Si se intenta utilizar una variable no declarada se obtiene un error en el tiempo de compilación. La instrucción Option Explicit sólo se utiliza en el nivel módulo.

Option explicit	' Fuerza la declaración explícita de variables.

Dim MiVar	' Declara la variable.

MiEnt = 10	' La variable no declarada genera un error.

MiVar = 10	' La variable declarada no generará error.


Option Private (Ejemplo de la instrucción)
Ejemplo de la instrucción Option Private

En este ejemplo se muestra que la instrucción Option Private se utiliza en el nivel módulo para indicar que el módulo completo es privado. Con Option Private Module, los símbolos a nivel de módulo no declarados como Private continúan estando disponibles para otros módulos del proyecto, pero no para otros proyectos ni aplicaciones.

Option private Module	' Indica que el módulo es privado.


Private (Ejemplo de la instrucción)
Ejemplo de la instrucción Private

En este ejemplo se muestra que la instrucción Private se utiliza en el nivel módulo para declarar variables como privadas, lo que significa que éstas están disponibles sólo en el módulo en el que son declaradas.

Private Nuúmero As Integer	' Variable privado entero.

Private NombreMatriz(1 To 5) As String	' Variable privado matriz.

' Declaraciones múltiples, dos Variants y una Integer,
' todas Private.

Private MiVar, TuVar, EstaVar As Integer


Property Get (Ejemplo de la instrucción)
Ejemplo de la instrucción Property Get

En este ejemplo utiliza la instrucción Property Get para definir un procedimiento propiedad que obtiene el valor de una propiedad que identifica, como una cadena, el color actual de un pincel en un paquete de dibujo.

Dim ColorActual As Integer

Const NEGRO = 0, ROJO = 1, VERDE = 2, AZUL = 3

' Devuelve el color actual de un pincel como una
' cadena.

Property Get PenColor() As String

Select Case ColorActual

Case ROJO

PenColor = "Rojo"

Case VERDE

PenColor = "Verde"

Case AZUL

PenColor = "Azul"

End Select

End Property

' La línea siguiente obtiene el color del pincel

' llamando al procedimiento Property Get.

NombreColor = PenColor


Property Let (Ejemplo de la instrucción)
Ejemplo de la instrucción Property Let

En este ejemplo se utiliza la instrucción Property Let para definir un procedimiento que asigna un valor a una propiedad. La propiedad identifica el color del lápiz para un paquete de dibujo.

Dim ColorActual As Integer

Const NEGRO = 0, ROJO = 1, VERDE = 2, AZUL = 3

' Establece el color del pincel en un paquete de Dibujo.

' La variable de nivel de módulo CurrentColor se

' establece a un valor numérico que identifica el color
' empleado para dibujar.

Property Let PenColor(NombreColor As String)

Select Case NombreColor	' Verifica la cadena nombre del color.

Case "Rojo"

ColorActual = ROJO	' Establece un valor a Rojo.

Case "Verde"

ColorActual = VERDE	' Establece un valor a verde.

Case "Azul"

ColorActual = AZUL	' Establece un valor a Azul.

Case Else

ColorActual = NEGRO	' Establece un valor predeterminado.

End Select

End Property

' La siguiente línea establece el color de la propiedad

' PenColor llamando al procedimiento Property Let.

PenColor = "Rojo"


Property Set (Ejemplo de la instrucción)
Ejemplo de la instrucción Property Set

En este ejemplo se utiliza la instrucción Property Set para declarar un procedimiento propiedad que establece una referencia a un objeto.

' La propiedad Pen puede ser establecida en implementaciones de Pen diferentes.

Property Set Pen(P As Object)

Set CurrentPen = P	' Establece un pincel a un objeto.

End Property


Public (Ejemplo de la instrucción)
Ejemplo de la instrucción Public

En este ejemplo se utiliza la instrucción Public a nivel de módulo (sección General) de un módulo estándar para declarar variables como públicas, es decir, disponibles para todos los procedimientos en todos los módulos de todas las aplicaciones a menos que Option Private Module esté activada.

Public Número As Integer	' Variable entera Public.

Public NombreMatriz(1 To 5) As String
' Variable matriz Public.

' Declaraciones múltiples, dos Variants y una Integer,
' todas Public.

Public MiVar, TuVar, EstaVar As Integer


ReDim (Ejemplo de la instrucción)
Ejemplo de la instrucción ReDim

En este ejemplo se utiliza la instrucción ReDim para asignar y reasignar espacio de almacenamiento para variables de matrices dinámicas. Se supone que Option Base es 1.

Dim MiMatriz() As Integer	' Declara una matriz dinámica.

Redim MiMatriz(5)	' Asigna 5 elementos.

For I = 1 To 5	' Bucle 5 veces.

MiMatriz(I) = I	' Inicializa la matriz.

Next I

La instrucción siguiente cambia el tamaño de la matriz y borra los elementos.

Redim MiMatriz(10)	' Cambia el tamaño a 10 elementos.

For I = 1 To 10	' Bucle 10 veces.

MiMatriz(I) = I	' Inicializa la matriz.

Next I

La instrucción siguiente cambia el tamaño de la matriz pero no borra elementos.

Redim Preserve MiMatriz(15)	' Cambia el tamaño a 15  elementos.


Rem (Ejemplo de la instrucción)
Ejemplo de la instrucción Rem

En este ejemplo se ilustran varias formas de la instrucción Rem, que se utiliza para incluir comentarios explicativos en el programa.

Rem Esta es la primera forma de la sintaxis.

Esta es la segunda forma de la sintaxis.

Dim MiCad1, MiCad2

MiCad1 = "Hola": Rem Comentario después de una instrucción separada por dos puntos.

MiCad2 = "Adiós" 	' Esto también es una nota; no necesita dos puntos.


Set (Ejemplo de la instrucción)
Ejemplo de la instrucción Set

En este ejemplo se utiliza la instrucción Set para establecer referencias de objetos como variables. Se supone que TuObjeto es un objeto válido con una propiedad Texto.

Dim TuObjeto, MiObjeto, MiCad

Set MiObjeto = TuObjeto	' Establece a una referencia de objeto.

' MiObjeto y TuObjeto se refieren al mismo objeto.

TuObjeto.Texto = "Hola a todos"	' Inicializa la propiedad.

MiCad = MiObjeto.Texto	' Devuelve "Hola a todos".

' Fin de la asociación. MiObjeto ya no hace referencia a TuObjeto.

Set MiObjeto = Nothing	' Libera el objeto.


Static (Ejemplo de la instrucción)
Ejemplo de la instrucción Static

En este ejemplo se utiliza la instrucción Static para retener el valor de las variable mientras el código del módulo se esté ejecutando.

' Definición de función.

Function Total(Número)

' Sólo la variable Acumulado conserva su valor entre llamadas.

Static Acumulado

Acumulado = Acumulado + Número

Total = Acumulado

End Function

' Definición de una función como Static.

Static Function MiFunción(Arg1, Arg2, Arg3)

' Todas las variables locales conservan su valor entre llamadas a la función.

Acumulado = Arg1 + Arg2 + Arg3

Mitad = Acumulado / 2

MiFunción = Mitad

End Function


Sub (Ejemplo de la instrucción)
Ejemplo de la instrucción Sub

En este ejemplo se utiliza la instrucción Sub para declarar el nombre, argumentos y código que forman el cuerpo del procedimiento Sub.

' Definición del procedimiento Sub.

' Sub con dos argumentos.

Sub SubAreaPC(Largo, Ancho)

Dim Area As Double	' Declara la variable local.

If Largo = 0 Or Ancho = 0 Then

' Si cualquier argumento = 0.

Exit Sub	' Salir inmediatamente de Sub.

End If

Area = Largo * Ancho	' Calcula el área del rectángulo.

Debug.Print Area	' Imprime Area en la ventana de depuración.

End Sub


Type (Ejemplo de la instrucción)
Ejemplo de la instrucción Type

En este ejemplo se utiliza la instrucción Type para definir un tipo de datos definido por el usuario. La instrucción Type sólo se utiliza en el nivel módulo. Si aparece en un módulo de clase, la instrucción Type debe ir precedida de la palabra clave Private.

Type RegistroEmpleado	' Crea un tipo definido por el usuario.

ID As Integer	' Define los elementos de tipo.

Nombre As String * 20

Dirección As String * 30

Teléfono As Long

FechaContratación As Date

End Type

Sub CreateRecord()

Dim MyRecord As EmployeeRecord	' Declara la variable.

' La asignación a la variable RegistroEmpleado debe producirse en un procedimiento.

MiRegistro.ID = 12003	' Establece un valor a un elemento.

End Sub


UBound (Ejemplo de la función)
Ejemplo de la función UBound

En este ejemplo se utiliza la función UBound para determinar el subíndice disponible más grande para una dimensión indicada de la matriz.

Dim Mayor

Dim MiMatriz(1 To 10, 5 To 15, 10 To 20)	' Declara las variables de matriz.

Dim UnaMatriz(10)

Mayor = UBound(MiMatriz, 1)	' Devuelve 10.

Mayor = UBound(MiMatriz, 3)	' Devuelve 20.

Mayor = UBound(UnaMatriz)	' Devuelve 10.


 Array (Función)

Devuelve un tipo Variant que contiene una matriz.

Sintaxis

Array(listaargumentos)

El argumento listaargumentos requerido es una lista de valores delimitados por comas que se asignan a los elementos de la matriz contenida en el tipo Variant. Si no se especifica ningún argumento, se crea una matriz de longitud cero.

Comentarios

La notación usada para hacer referencia a cualquier elemento de una matriz consiste en el nombre de la variable seguido por un paréntesis que contiene un número de índice para el elemento deseado. En el ejemplo siguiente, la primera instrucción crea una variable A de tipo Variant. La segunda instrucción asigna una matriz a la variable A. La última instrucción muestra cómo asignar el valor contenido en el segundo elemento de la matriz a otra variable.

Dim A As Variant

A = Array(10,20,30)

B = A(2)

El límite inferior de una matriz que ha sido creada utilizando la función Array está determinado por el límite inferior especificado por la instrucción Option Base.

Nota   Una variable Variant no declarada como matriz puede contener, no obstante, una matriz. Una variable Variant puede contener una matriz de cualquier tipo, excepto cadenas de longitud fija y tipos definidos por el usuario. Aunque una variable Variant que contiene una matriz es conceptualmente diferente de una matriz cuyos elementos son de tipo Variant, se tiene acceso a los elementos de la matriz del mismo modo.


Const (Instrucción)

Declara las constantes que se pueden utilizar en lugar de los valores literales.

Sintaxis

[Public | Private] Const nombreconstante [As tipo] = expresión

La sintaxis de la instrucción Const consta de las siguientes partes:

Parte	Descripción
Public	Opcional. Palabra clave utilizada a nivel de módulo para declarar constantes que están disponibles para todos los procedimientos en todos los módulos. No se permite en procedimientos.
Private	Opcional. Palabra clave utilizada a nivel de módulo para declarar constantes que están disponibles solamente dentro del módulo donde se hace la declaración. No se permite en procedimientos.
nombreconstante	Requerido. Nombre de la constante; sigue las convenciones de nombre estándar de variable.
tipo	Opcional. Tipo de datos de la constante; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no admitido actualmente), Date, String o Variant. Use una cláusula As tipo separada para cada constante que declare.
expresión	Requerida. Literal, otra constante o cualquier combinación, incluyendo operadores aritméticos o lógicos excepto Is.
Comentarios

Las constantes son Private de manera predeterminada. Dentro de los procedimientos, las constantes son siempre privadas; es imposible cambiar su visibilidad. En los módulos estándar, la visibilidad predeterminada de las constantes a nivel de módulo se puede modificar mediante la palabra clave Public. Sin embargo, en los módulos de clase, las constantes solamente pueden ser privadas y es imposible cambiar su visibilidad mediante esta palabra clave.

Algunas declaraciones de constantes se pueden combinar en la misma línea separando cada asignación de constante con una coma. Si las declaraciones de constantes se combinan de esta forma, las palabras clave Public o Private, si se usan, se aplican a todas ellas.

No es posible usar variables, funciones definidas por el usuario o funciones intrínsecas de VB (como Chr) en expresiones asignadas a constantes.

Nota   Las constantes facilitan la documentación del programa y lo hacen fácil de modificar. A diferencia de las variables, las constantes no se pueden cambiar inadvertidamente mientras el programa se está ejecutando.

Si no se declara el tipo de constante explícitamente (con As tipo), se le asignará a la constante el tipo de datos más apropiado para la expresión dada.

Las constantes que se declaran en los procedimientos Sub, Function o Property se consideran locales para ese procedimiento. Una constante que se declara fuera de un procedimiento, se definirá para la totalidad del módulo en el que se declara. Puede usar constantes en cualquier lugar en el que usaría una expresión.


 CreateObject (Función)

Crea y devuelve una referencia a un objeto ActiveX.

Sintaxis

CreateObject(clase)

El argumento clase utiliza las sintaxis nombreaplicación.tipoobjeto y tiene estas partes:

Parte	Descripción
nombreaplicación	Requerido. Variant (String). El nombre de la aplicación que proporciona el objeto.
Tipoobjeto	Requerido. Variant (String). El tipo o clase de objeto a crear.
Comentarios

Cada aplicación que admite Automatización proporciona al menos un tipo de objeto. Por ejemplo, una aplicación de procesador de textos puede proporcionar un objeto Application, un objeto Document y un objeto Toolbar.

Para crear un objeto ActiveX, asigne el objeto devuelto por la función CreateObject a una variable de objeto:

‘ Declare una variable de objeto para contener la referencia de

‘ objeto. Dim como Object provoca una dependencia posterior.

Dim ExcelSheet As Object

Set ExcelSheet = CreateObject("Excel.Hoja")

Este código empieza la aplicación creando el objeto, en este caso, una hoja de cálculo de Microsoft Excel. Una vez que está creado, hace referencia a él en el código utilizando la variable de objeto que definió. En el siguiente ejemplo, tiene acceso a propiedades y métodos del nuevo objeto utilizando la variable de objeto, ExcelSheet y otros objetos Microsoft Excel, incluyendo el objeto Application y la colección Cells.

' Hacer visible Excel mediante el objeto Application

ExcelSheet.Application.Visible = True

' Colocar algún texto en la primera celda de la hoja

ExcelSheet.Cells(1, 1).Value = "Esto es la columna A, fila 1"

' Guarda la hoja de propiedades en el directorio C:\test.doc

ExcelSheet.SaveAs "C:\TEST.DOC"

' Cierra Excel con el método Quit en el objeto Application

ExcelSheet.Application.Quit

' Libera la variable de objeto

Set ExcelSheet = Nothing

Declarando una variable de objeto con la cláusula As Object crea una variable que puede contener una referencia a cualquier tipo de objeto. Sin embargo, tener acceso al objeto mediante esta variable es de dependencia limitada; esto quiere decir que la dependencia se produce cuando se ejecuta el programa. Para crear una variable de objeto que resuelva una dependencia anticipada, esto es, que la dependencia se produzca cuando se compile el programa, se declara la variable de objeto con un Id. de clase específico. Por ejemplo, puede declarar y crear las siguientes referencias de Microsoft Excel:

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.WorkSheet

Set xlApp = CreateObject("Excel.Application")

Set xlBook = xlApp.Workbooks.Add

Set xlSheet = xlBook.Worksheets(1)

La referencia mediante una variable de dependencia anticipada puede proporcionar mejor rendimiento, pero sólo puede contener una referencia a la clase especificada en la declaración.

Puede transferir un objeto devuelto por la función CreateObject a una función que espera un objeto como un argumento. Por ejemplo, el siguiente código crea y transfiere una referencia al objeto Excel.Application:

Call MySub (CreateObject("Excel.Application"))

Nota   Utilice la función CreateObject cuando no hay una instancia activa del objeto. Si se está ejecutando una instancia del objeto, se inicia una nueva instancia y se crea un objeto del tipo especificado. Para utilizar la instancia activa o para iniciar la aplicación y tenerla cargada en un archivo, utilice la función GetObject.

Si un objeto se ha registrado a sí mismo como un objeto de instancia única, sólo se crea una instancia del objeto, sin tener en cuenta cuántas veces se ejecuta la función CreateObject.


Declare (Instrucción)

Se usa en el nivel de módulo para declarar referencias a procedimientos externos que están en biblioteca de vínculos dinámicos (DLL).

Sintaxis 1

[Public | Private] Declare Sub nombre Lib "nombrebiblioteca" [Alias "nombrealias"] [([listaargumentos])]

Sintaxis 2

[Public | Private] Declare Function nombre Lib "nombrebiblioteca" [Alias "nombrealias"] [([listaargumentos])] [As tipo]

La sintaxis de la instrucción Declare consta de estas partes:

Parte	Descripción
Public	Opcional. Se usa para declarar procedimientos que están disponibles para todos los otros procedimientos en todos los módulos.
Private	Opcional. Se usa para declarar procedimientos que están disponibles solamente dentro del módulo donde se hace la declaración.
Sub	Opcional (debe aparecer Sub o Function). Indica que el procedimiento no devuelve un valor.
Function	Opcional ( debe aparecer Sub o Function). Indica que el procedimiento devuelve un valor que se puede utilizar en una expresión.
nombre	Requerido. Cualquier nombre de procedimiento válido. Observe que los puntos de entrada de las DLL dintinguen mayúsculas y minúsculas.
Lib	Requerido. Indica que el procedimiento que está declarando se encuentra en una DLL o un recurso de código. La cláusula Lib se necesita para todas las declaraciones.
nombrebiblioteca	Requerido. Nombre del archivo DLL o del recurso de código que contiene el procedimiento declarado.
Alias	Indica que el procedimiento tiene otro nombre en la DLL o que es un recurso de código de Macintosh. Esto es útil cuando el nombre del procedimiento externo es el mismo que el de una palabra clave. También es posible usar Alias cuando un procedimiento DLL tiene el mismo nombre que una variable, o que una constante o que cualquier otro procedimiento con el mismo alcance. Alias también resulta útil si algún carácter del nombre del procedimiento de la DLL no se admite como nombre.
nombrealias	Opcional. Nombre del procedimiento en la DLL o en el recurso de código. Si el primer carácter no es un signo #, nombrealias es el nombre del punto de entrada del procedimiento en la DLL. Si # es el primer carácter, todos los caracteres que le siguen deberán indicar el número ordinal del punto de entrada del procedimiento.
listaargumentos	Opcional. Lista de variables que representan argumentos que son pasados al llamar al procedimiento.
tipo	Opcional. Tipo de datos del valor devuelto por un procedimiento Function; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no admitido actualmente), Date, String (sólo de longitud variable) o Variant, un tipo definido por el usuario o un tipo de objeto.
El argumento listaargumentos posee las siguientes partes y sintaxis:

[Optional] [ByVal | ByRef] [ParamArray] nombrevariable[( )] [As tipo]

Parte	Descripción
Optional	Opcional. Indica que no se requiere un argumento. Si se usa, todos los argumentos subsiguientes en listaargumentos también deben ser opcionales y deben ser declarados usando la palabra clave Optional. Todos los argumentos Optional deben ser tipo Variant. No se puede utilizar Optional para ningún argumento si se utiliza ParamArray.
ByVal	Opcional. Indica que el argumento es pasado por valor.
ByRef	Indica que el argumento es pasado por referencia. ByRef es el modo predeterminado en Visual Basic.
ParamArray	Opcional. Se usa sólo como el último argumento en listaargumentos para indicar que el argumento final es una matriz de elementos Variant. La palabra clave ParamArray le permite incluir un número arbitrario de argumentos. No se usa con ByVal, ByRef u Optional.
nombrevariable	Requerido. Nombre de la variable que representa el argumento que se pasa al procedimiento; sigue las convenciones estándar de nombres de variables.
( )	Requerido para matrices. Indica que nombrevariable  es una matriz.
tipo	Opcional. El tipo de datos del argumento que pasa al procedimiento; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (sólo longitud variable), Object, Variant, un tipo definido por el usuario o un tipo objeto.
Comentarios

Para los procedimientos Function, el tipo de datos del procedimiento determina el tipo de datos que éste devuelve. Puede usar una cláusula As a continuación de listaargumentos para especificar el tipo de valor que devuelve la función. Dentro de listaargumentos es posible utilizar una cláusula As para especificar el tipo de datos de los argumentos que se pasan al procedimiento. Además de especificar cualquiera de los tipos de datos estándar, puede especificar As Any en listaargumentos para inhibir la comprobación del tipo de datos y permitir el paso de cualquier tipo de datos al procedimiento.

Los paréntesis vacíos indican que el procedimiento Sub o Function no tiene ningún argumento y que VB debe comprobar los argumentos para asegurarse de que no haya ninguno. En el ejemplo siguiente, Primero no toma ningún argumento. Si se usan argumentos en una llamada a Primero, ocurrirá un error:

Declare Sub Primero Lib "MiBiblioteca" ()

Si se incluye una lista de argumentos, se comprobará el número y tipo de argumentos cada vez que se llame al procedimiento. En el ejemplo siguiente, Primero toma un argumento Long:

Declare Sub Primero Lib "MiBiblioteca" (X As Long)

Nota   No es posible tener cadenas de longitud fija en la lista de argumentos de una instrucción Declare, sólo se pueden pasar cadenas de longitud variable a los procedimientos. Las cadenas de longitud fija pueden aparecer como argumentos de procedimientos, pero se convierten a cadenas de longitud variable antes de ser pasadas.

Nota   La constante vbNullString se utiliza al llamar a procedimientos externos, donde el procedimiento externo requiere una cadena cuyo valor es cero, que no es lo mismo que una cadena de longitud cero ("").


Deftype (Instrucciones)
Deftipo (Instrucciones)

Se usan en el nivel de módulo para establecer el tipo de datos predeterminado para variables y argumentos que se pasan a los procedimientos y el valor devuelto por los procedimientos Function y Property Get cuyos nombres comienzan con los caracteres especificados.

Sintaxis

DefBool intervaloletra[, intervaloletra] . . .

DefByte intervaloletra[, intervaloletra] . . .

DefInt intervaloletra[, intervaloletra] . . .

DefLng intervaloletra[, intervaloletra] . . .

DefCur intervaloletra[, intervaloletra] . . .

DefSng intervaloletra[, intervaloletra] . . .

DefDbl intervaloletra[, intervaloletra] . . .

DefDec intervaloletra[, intervaloletra] . . .

DefDate intervaloletra[, intervaloletra] . . .

DefStr intervaloletra[, intervaloletra] . . .

DefObj intervaloletra[, intervaloletra] . . .

DefVar intervaloletra[, intervaloletra] . . .

El argumento intervaloletra posee la sintaxis siguiente:

letra1[-letra2]

Los argumentos letra1 y letra2 especifican el intervalo de nombres para el cual se puede establecer un tipo de datos predeterminado. Cada argumento representa la primera letra del nombre de la variable o del procedimiento Property Get, puede ser cualquier letra del abecedario. En intervaloletra no se distingue entre mayúsculas y minúsculas.

Comentarios

El nombre de la instrucción determina el tipo de datos:

Instrucción	Tipo de datos
DefBool	Boolean
DefByte	Byte
DefInt	Integer
DefLng	Long
DefCur	Currency
DefSng	Single
DefDbl	Double
DefDec	Decimal (no se admite actualmente)
DefDate	Date
DefStr	String
DefObj	Object
DefVar	Variant
Por ejemplo, en el siguiente fragmento de programa, Mensaje es una variable de cadena:

DefStr A-Q

. . .

Mensaje = "Espacio de pila insuficiente".

Un argumento Deftipo afecta solamente al módulo donde éste se usa. Por ejemplo, una instrucción DefInt en un módulo afecta sólo al tipo de datos predeterminados de las variables y los procedimientos Function y Property Get declarados en ese módulo; no afecta al tipo de datos predeterminado de las variables en otros módulos. Si no se declara explícitamente con una instrucción Deftipo, el tipo de datos predeterminado para todas las variables y para todos los procedimientos Function y todos los procedimientos Property Get es Variant.

Cuando se especifica un intervalo de letras, generalmente define el tipo de datos para variables que comienzan con las letras de los 128 caracteres inferiores del juego de caracteres. Sin embargo, cuando se especifica el intervalo de letras A - Z, establece el tipo de datos predeterminados para todas las variables, incluyendo cualquiera que comience con caracteres internacionales provenientes de la parte extendida del juego de caracteres (128 - 255).

Tras especificar el intervalo A - Z, no es posible seguir redefiniendo cualquier subintervalo de variables con instrucciones Deftipo. De hecho, una vez definido un intervalo, si se incluye una letra definida anteriormente en otra instrucción Deftipo, ocurrirá un error. Sin embargo, se puede especificar explícitamente el tipo de datos de cualquier variable, definida o no, usando una instrucción Dim con una cláusula As tipo. Por ejemplo, se puede usar el siguiente código en el nivel de módulo para definir una variable como Double aunque el tipo de datos predeterminado sea Integer:

DefInt A-Z

Dim PorcentajeImpuesto As Double

Las instrucciones Deftipo no afectan a elementos de tipos definidos por el usuario ya que éstos deben ser declarados explícitamente.


Dim (Instrucción)

Declara variables y les asigna el espacio de almacenamiento.

Sintaxis

Dim nombrevariable[([subíndices])][As [New] tipo][, nombrevariable[([subíndices])][As [New] tipo]] . . .

La sintaxis de la instrucción Dim consta de las siguientes partes:

Parte	Descripción
WithEvents	Opcional. Palabra clave que especifica que nombrevariable es una variable de objeto utilizada para responder a eventos desencadenados por un objeto ActiveX. Sólo es válido en módulos de clase . Puede declarar tantas variables individuales como desee utilizando WithEvents, pero no puede crear matrices con WithEvents. No puede utilizar New con WithEvents.
nombrevariable	Requerido. Nombre de la variable; sigue las convenciones de nombre estándar de variable.
subíndices	Opcional. Dimensiones de la variable matriz; se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices utiliza la sintaxis siguiente:
	[inferior To] superior [,[inferior To] superior] . . .
	Cuando no se declara específicamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. Este límite inferior es cero si no hay ninguna instrucción Option Base.
New	Opcional. Palabra clave que habilita la creación implícita de un objeto. Si utiliza New cuando declara la variable de objeto, se crea una nueva instancia del objeto como primera referencia, así que no tiene que utilizar la instrucción Set para asignar la referencia del objeto. La palabra clave New no se puede utilizar para declarar variables de cualquier tipo de datos intrínseco, no se puede utilizar para declarar instancias de objetos dependientes y no se puede utilizar con WithEvents.
tipo	Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no admitido actualmente), Date, String (para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario o un tipo de objeto. Utilice una cláusula separada As tipo para cada variable que defina.
Comentarios

Las variables declaradas con Dim en el nivel de módulo están disponibles para todos los procedimientos disponibles sólo dentro de ese módulo. En el nivel de procedimiento, las variables están disponibles sólo dentro de ese procedimiento.

Utilice la instrucción Dim en el nivel de módulo o en el nivel de procedimiento para declarar el tipo de datos o el tipo de objeto de una variable. Por ejemplo, la siguiente instrucción declara una variable como Integer.

Dim NumeroDeEmpleados As Integer

También puede utilizar una instrucción Dim para declarar el tipo de objeto de una variable. La siguiente línea declara una variable para una nueva instancia de una hoja de cálculo.

Dim X As New Worksheet

Si no utiliza la palabra clave New al declarar una variable de tipo objeto, no existe realmente ninguna instancia del objeto. Una variable que se refiere a un objeto debe ser asignada a un objeto existente utilizando la instrucción Set antes de su uso. Hasta que se le asigne un objeto, la variable declarada del objeto tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia particular de un objeto.

También puede utilizar una instrucción Dim con paréntesis vacíos para declarar matrices dinámicas. Después de declarar una matriz dinámica, use la instrucción ReDim dentro de un procedimiento para definir el número de dimensiones y elementos de la matriz. Si intenta volver a declarar una dimensión para una variable matriz cuyo tamaño ha sido explícitamente especificado en una instrucción Private, Public o Dim, ocurrirá un error.

Si no se especifica un tipo de datos o un tipo de objeto y no existe un argumento Deftipo en el módulo, la variable predeterminada será Variant.

Cuando se inicializan variables, una variable numérica se inicializa con 0, una cadena de longitud variable se inicializa con una cadena de longitud 0 ("") y una cadena de longitud fija se completa con ceros. Las variables Variant se inicializan con Empty. Cada elemento de una variable de un tipo definido por el usuario, se inicializa como si fuera una variable separada.

Nota   Cuando utilice la instrucción Dim en un procedimiento, es una práctica de programación generalmente aceptada colocar la instrucción Dim al principio del mismo.


Erase (Instrucción)

Vuelve a inicializar los elementos de matrices de tamaño fijo y libera el espacio de almacenamiento asignado a matrices dinámicas.

Sintaxis

Erase listamatriz

El argumento listamatriz es una o más variables matriciales que se pueden borrar y que están delimitadas por comas.

Comentarios

Erase se comporta de diferente manera dependiendo del tipo de matriz. No se libera memoria cuando se aplica a matrices de tamaño fijo. Erase asigna a los elementos de una matriz fija los siguientes valores:

Tipo de matriz	Efecto de Borrar sobre elementos de una matriz fija
Numérica fija	Asigna cero a todos los elementos.
De cadena fija (longitud variable)	Asigna una cadena de longitud cero a todos los elementos ("").
De cadena fija (longitud fija)	Asigna cero a cada elemento.
Variant fija	Asigna a cada elemento Empty.
Tipos definidos por el usuario	Asigna valor a cada elemento como si fuera una variable separada.
De Objetos	Asigna a cada elemento el valor especial Nothing.
Erase libera la memoria usada por matrices dinámicas. Antes de que el programa se pueda referir de nuevo a la matriz dinámica, debe volver a declarar las dimensiones de las variables de la matriz con la instrucción ReDim.


Function (Instrucción)

Declara el nombre, argumentos y código que componen el cuerpo de un procedimiento Function.

Sintaxis

[Public | Private] [Static] Function nombre [(listaargumentos)] [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 todos los procedimientos de todos los módulos. tienen acceso al procedimiento Function. Si se usa en un módulo privado (uno que contiene una instrucción Option Private) el procedimiento no estará disponible para procedimientos fuera del proyecto.
Private	Opcional. Indica que el procedimiento Function es accesible sólo a otros procedimientos en el módulo donde ha sido declarado.
Static	Opcional. Indica que las variables locales del procedimiento Function se conservan entre llamadas. El atributo Static no afecta a variables declaradas fuera de la Function, aún si se usan en el procedimiento.
Nombre	Requerido. Nombre de la Function; sigue las convenciones de nombres estándar de variables.
listaargumentos	Opcional. Lista de variables que representan los argumentos que se pasan al llamar al procedimiento Function. Cuando hay más de una variable se separan con comas.
tipo	Opcional. Tipo de datos del valor devuelto por el procedimiento Function; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String o (excepto longitud fija), Object, Variant o cualquier tipo definido por el usuario. No se pueden devolver matrices de ningún tipo, pero sí una Variant que contiene una matriz.
instrucciones	Opcional. Cualquier grupo de instrucciones para ser ejecutados dentro del cuerpo del procedimiento Function.
expresión	Opcional. Valor devuelto por la Function.
El argumento listaargumentos posee las partes y sintaxis siguientes:

[Optional] [ByVal | ByRef] [ParamArray] nombrevariable[( )] [As tipo] [= valorpredeterminado]

Parte	Descripción
Optional	Opcional. Indica que no se requiere un argumento. Si se usa, todos los argumentos subsiguientes en listaargumentos también deben ser opcionales y declarados con la palabra clave Optional. Todos los argumentos Optional deben ser de tipo Variant. Optional no se puede utilizar para ningún argumento si se usa ParamArray.
ByVal	Opcional. Indica que el argumento es pasado por valor.
ByRef	Opcional. Indica que el argumento es pasado por referencia. ByRef es el modo predeterminado en Visual Basic.
ParamArray	Opcional. Sólo se utiliza como último argumento en listaargumentos para indicar que el argumento final es una matriz Optional de elementos Variant. La palabra clave ParamArray le permite incluir un número arbitrario de argumentos. No se usa con ByVal, ByRef o con Optional.
nombrevariable	Requerido. Nombre de la variable que representa al argumento; sigue las convenciones de nombres estándar de variables.
tipo	Opcional. El tipo de datos del argumento pasado al procedimiento; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (sólo longitud variable), Object, Variant, un tipo definido por el usuario o un tipo de objeto.
valorpredeterminado	Opcional. Cualquier constante o expresión de constantes. Válido sólo para parámetros Optional. Si el tipo es Object un valor predeterminado explícito sólo puede ser Nothing.
Comentarios

Si no se especifica explícitamente usando los procedimientos Public o Private, los procedimientos Function son públicos de forma predeterminada. Si no se usa Static, el valor de las variables locales no se conserva entre llamadas.

Precaución   Los procedimientos Function pueden ser recursivos; es decir, se pueden llamar a sí mismos para realizar una tarea dada. Sin embargo, esto puede llevar al desbordamiento de la pila. La palabra clave Static generalmente no se usa con procedimientos Function recursivos.

Todo el código ejecutable debe estar en procedimientos. No es posible definir un procedimiento Function dentro de otro procedimiento Function, Sub o Property.

Las palabras clave Exit Function producen la inmediata salida 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 un procedimiento Function puede aparecer cualquier número de instrucciones Exit Function.

Al igual que un procedimiento Sub, un procedimiento Function es un procedimiento separado que puede tomar argumentos, llevar a cabo una serie de instrucciones y cambiar el valor de sus argumentos. Sin embargo, a diferencia de un procedimiento Sub, un procedimiento Function puede ser usado a la derecha de una expresión, de la misma forma en que se usa una función intrínseca como Sqr, Cos o Chr, cuando desee usar el valor devuelto por la función.

Para llamar a un procedimiento Function, se usa el nombre de la función seguido por la lista de argumentos entre paréntesis, como parte de una expresión. Consulte la instrucción Call para obtener información específica sobre la forma de llamar a los procedimientos Function.

Para que una función devuelva un valor, asigne el valor al nombre de la función. Cualquier número de estas asignaciones puede aparecer en cualquier lugar dentro de un procedimiento. Si no se asigna un valor a nombre, el procedimiento devuelve 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 a un objeto, devuelve Nothing si a nombre no se le asigna una referencia a un objeto, (usando Set) dentro de la Function.

El ejemplo siguiente muestra cómo hacer que la función llamada BusquedaBinaria devuelva un valor. En este caso, se asigna False al nombre para indicar que no se encontró algún valor.

Function BusquedaBinaria(. . .) As Boolean

. . .

' No se ha encontrado valor. Devolver el valor False.

If lower > upper Then

BusquedaBinaria = False

Exit Function

End If

. . .

End Function

Las variables usadas en procedimientos Function se dividen en dos categorías: aquellas que están explícitamente declaradas dentro del procedimiento y aquellas que no lo están. Las variables que están explícitamente declaradas en un procedimiento (utilizando Dim o el equivalente) siempre son locales al procedimiento. Otras variables usadas pero no declaradas explícitamente en un procedimiento también son locales, a menos que sean declaradas explícitamente en algún nivel superior fuera del procedimiento.

Precaución   Un procedimiento puede usar una variable que no esté declarada explícitamente en el procedimiento, pero se puede dar un conflicto si cualquier cosa definida en el nivel de módulo tiene el mismo nombre. Si el procedimiento se refiere a una variable no declarada que tiene el mismo nombre que otro procedimiento, constante o variable, se asume que el procedimiento se está refiriendo al nombre de ese nivel de módulo. Para evitar este tipo de conflictos, declare las variables explícitamente. Puede usar una instrucción Option Explicit para forzar la declaración explícita de variables.

Precaución   Visual Basic puede reorganizar las expresiones aritmética para aumentar la eficiencia interna. Evite usar el procedimiento Function en una expresión aritmética cuando la función cambia el valor de las variables en la misma expresión.


GetObject (Función)

Devuelve una referencia a un objeto ActiveX de un archivo.

Sintaxis

GetObject([rutadeacceso] [, clase])

La sintaxis de la función GetObject tiene estos argumentos con nombre:

Parte	Descripción
rutadeacceso	Opcional; Variant (String). La ruta de acceso completa y el nombre del archivo que contiene el objeto a recuperar. Si se omite rutadeacceso, se necesita clase.
clase	Opcional; Variant (String). Una cadena que representa la clase del objeto.
El argumento clase utiliza la sintaxis nombreaplicación.tipoobjeto y tiene estas partes:

Parte	Descripción
nombreaplicación	Requerido; Variant (String). El nombre de la aplicación que proporciona el objeto.
tipoobjeto	Requerido; Variant (String). El tipo o clase de objeto a crear.
Comentarios

Utilice la función GetObject para tener acceso a un objeto ActiveX de un archivo y asignar el mismo a una variable de objeto. Utilice la instrucción Set para asignar el objeto devuelto a por la función GetObject a la variable de objeto. Por ejemplo:

Dim CADObject As Object

Set CADObject = GetObject("C:\CAD\ESQUEMA.CAD")

Cuando se ejecuta este código, se inicia la aplicación asociada con el argumento rutadeacceso especificado y se activa el objeto del archivo especificado.

Si rutadeacceso es una cadena de longitud cero (""), la función GetObject devuelve una instancia del nuevo objeto del tipo especificado. Si se omite el argumento rutadeacceso, GetObject devuelve el objeto activo actual del tipo especificado. Si no existe ningún objeto del tipo especificado, se produce un error.

Algunas aplicaciones le permiten activar parte de un archivo. Agregue un signo de admiración (!) al final del nombre del archivo y a continuación escribir una cadena que identifica la parte del archivo que desea activar. Para obtener información de cómo crear esta cadena, vea la documentación de la aplicación que creó el objeto.

Por ejemplo, en una aplicación de dibujo puede tener muchas capas para un dibujo almacenado en un archivo. Podría utilizar el siguiente código para activar una capa dentro del dibujo llamado ESQUEMA.CAD:

Set LayerObject = GetObject("C:\CAD\ESQUEMA.CAD!Capa3")

Si no especifica el argumento clase del objeto, la Automatización determina la aplicación que se va a iniciar y el objeto que se va a activar, basándose en el nombre del archivo proporcionado. Algunos archivos, sin embargo, pueden admitir más de una clase de objeto. Por ejemplo, un dibujo puede admitir tres tipos diferentes de objetos: un objeto Application, un objeto Drawing y un objeto Toolbar, donde todos forman parte del mismo archivo. Para especificar qué objeto del archivo desea activar, utilice el argumento opcional clase. Por ejemplo:

Dim MiObjeto As Object

Set MiObjeto = GetObject("C:\DIBUJOS\EJEMPLO.DRW", "FIGMENT.DIBUJO")

En el ejemplo anterior, FIGMENT es el nombre de la aplicación de dibujo y DIBUJO es uno de los tipos de objeto que admite.

Una vez que se activa un objeto, haga referencia a él en el código utilizando la variable de objeto que definió. En el ejemplo anterior, tiene acceso a propiedades y métodos del nuevo objeto utilizando la variable de objeto MiObjeto. Por ejemplo:

MiObjeto.Line 9, 90

MiObjeto.InsertText 9, 100, "Hola a todos."

MiObjeto.SaveAs "C:\DIBUJOS\EJEMPLO.DRW"

Nota   Utilice la función GetObject cuando hay una instancia activa del objeto o si desea crear el objeto con un archivo ya cargado. Si no hay ninguna instancia activa y no desea iniciar el objeto con un archivo cargado, utilice la función CreateObject.

Si un objeto se ha registrado a sí mismo como un objeto de instancia simple, sólo se crea una instancia del objeto, sin tener en cuenta cuantas veces se ejecuta la función CreateObject. Con un objeto de instancia simple, la función GetObject siempre devuelve la misma instancia cuando se llama con la sintaxis de cadena de longitud cero ("") y produce un error si se omite el argumento rutadeacceso. No puede utilizar la función GetObject para obtener una referencia a una clase creada con Visual Basic.


LBound (Función)

Devuelve un tipo Long que contiene el subíndice más pequeño para la dimensión indicada de la matriz.

Sintaxis

LBound(nombrematriz[, dimensión])

La sintaxis de la instrucción LBound consta de las siguientes partes:

Parte	Descripción
nombrematriz	Requerido. Nombre de la variable matricial; sigue las convenciones de nombres estándar de variables.
dimensión	Opcional; Variant (Long). Número entero que indica a cuál dimensión corresponde el límite inferior devuelto. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si dimensión se omite, se asume que es 1.
Comentarios

La función LBound se usa con la función UBound para determinar el tamaño de una matriz. Use la función UBound para encontrar el límite superior de una dimensión matricial.

LBound devuelve los valores enumerados en la tabla que aparece abajo para una matriz que tiene las siguientes dimensiones:

Dim A(1 To 100, 0 To 3, -3 To 4)

Instrucción	Valor devuelto
LBound(A, 1)	1
LBound(A, 2)	0
LBound(A, 3)	-3
El límite inferior predeterminado para cualquier dimensión es 0 ó 1, dependiendo de la configuración de la instrucción Option Base. La base de una matriz creada con la función Array es cero; esto no se ve afectado por Option Base.

Las matrices cuyas dimensiones se establecen usando la cláusula To en una instrucción Dim, Private, Public, ReDim o Static pueden tener cualquier valor entero como límite inferior.


Let (Instrucción)

Asigna el valor de una expresión a una variable o propiedad.

Sintaxis

[Let] nombrevariable = expresión

La sintaxis de la instrucción Let consta de las siguientes partes:

Parte	Descripción
Let	Opcional. El uso explícito de la palabra clave Let es una cuestión de estilo, pero normalmente se omite.
nombrevariable	Requerido. Nombre de la variable o de la propiedad; sigue las convenciones de nombres estándar de variables.
expresión	Requerido. Valor asignado a la variable o propiedad.
Comentarios

Una expresión de valor puede ser asignada a una variable solamente si es de un tipo de datos que es compatible con la variable. No es posible asignar expresiones de cadena a variables numéricas ni asignar expresiones numéricas a variables de cadena. Si lo hace, ocurrirá un error durante la compilación.

Las variables Variant pueden ser asignadas a cadenas o a expresiones numéricas. Sin embargo, lo contrario no siempre es verdadero. Cualquier Variant excepto Null, puede ser asignada a una variable de cadena, pero sólo una Variant cuyo valor pueda ser interpretado como un número, puede ser asignada a una variable numérica. Use la función IsNumeric para determinar si la Variant puede ser convertida a un número.

Precaución   Asignar una expresión de un tipo de datos numérico a una variable de un tipo de datos numéricos diferente, fuerza al valor de la expresión a ser del tipo de datos de la variable resultante.

Las instrucciones Let pueden ser usadas para asignar una variable de registro a otra sólo cuando ambas variables son del mismo tipo de datos definido por el usuario. Se utiliza la instrucción LSet para asignar variables de registro de diferentes tipos definidos por el usuario. La instrucción Set se utiliza para asignar referencias de objetos a variables.


Option Base (Instrucción)

Se usa en el nivel de módulo para declarar el límite inferior predeterminado para subíndices de matriz.

Sintaxis

Option Base {0 | 1}

Comentarios

Como la base predeterminada es 0, la instrucción Option Base nunca se requiere. Sin embargo, si usa la instrucción sólo puede aparecer una vez en un módulo antes de cualquier procedimiento. La instrucción Option Base puede aparecer sólo una vez en un módulo y debe preceder a las declaraciones de matriz que incluyen los tamaños.

Nota   La cláusula To en las instrucciones Dim, Private, Public, ReDim y Static proporciona una forma más flexible para controlar el intervalo de los subíndices de una matriz. Sin embargo, si no se establece el límite inferior explícitamente con una cláusula To, puede usar Option Base para cambiar el límite inferior predeterminado a 1. La base de una matriz creada con la función Array o la palabra clave ParamArray es cero; Option Base no afecta a Array o ParamArray.

La instrucción Option Base sólo afecta el límite inferior de matrices en el módulo donde se ubica la instrucción.


 Option Compare (Instrucción)

Se usa en el nivel de módulo para declarar el modo de comparación predeterminado que se usa cuando se comparan datos tipo cadena.

Sintaxis

Option Compare {Binary | Text | Database}

Comentarios

Si se usa, la instrucción Option Compare debe aparecer en un módulo antes de cualquier procedimiento.

La instrucción Option Compare especifica el método de comparación de cadenas (Binary, Text o Database) para un módulo. Si un módulo no incluye una instrucción Option Compare, el método de comparación de texto predeterminado es Binary.

Option Compare Binary compara cadenas usando como criterio de comparación un criterio de ordenación derivado de las representaciones internas binarias de los caracteres. En Microsoft Windows, la ordenación se determina de acuerdo al código de página. En Macintosh, el criterio de ordenación se determina de acuerdo al juego de caracteres. En el ejemplo siguiente se muestra un criterio de ordenación binario típico:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text compara cadenas usando como criterio una ordenación de texto que no reconoce mayúsculas y minúsculas determinado por la configuración regional del sistema. Cuando se ordenan los mismos caracteres utilizando Option Compare Text, se produce la siguiente ordenación de texto:

(A=a) < ( À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

Solamente puede utilizar Option Compare Database dentro de Microsoft Access. Esto da como resultado comparaciones de cadena basadas en el orden, que está determinado por el identificador local de la base de datos en la que tienen lugar las comparaciones de cadena.


Option Explicit (Instrucción)

Se usa en el nivel de módulo para forzar declaraciones explícitas de todas las variables en ese módulo.

Sintaxis

Option Explicit

Comentarios

Si se usa, la instrucción Option Explicit debe aparecer en un módulo antes de cualquier procedimiento.

Cuando se usa la instrucción Option Explicit, se deben declarar explícitamente todas las variables utilizando las instrucciones Dim, Private, Public, ReDim o Static. Si intenta usar un nombre de variable no declarado, ocurrirá un error durante la compilación.

Si no se usa la instrucción Option Explicit, todas las variables no declaradas son Variant, a menos que el tipo predeterminado esté especificado de otra manera con una instrucción Deftipo.

Nota   Use Option Explicit para evitar escribir el nombre de una variable existente incorrectamente o para evitar confusiones arriesgadas en el código, donde el alcance de la variable no es claro.


Option Private (Instrucción)

Cuando se utiliza en aplicaciones host que permiten referencias a través de múltiples proyectos, Option Private Module previene que se haga referencia al contenido de un módulo fuera del proyecto. En las aplicaciones host que no permiten este tipo de referencias, por ejemplo, versiones independientes de Visual Basic, la instrucción Option Private no tiene efecto.

Sintaxis

Option Private Module

Comentarios

Si se usa, la instrucción Option Private debe aparecer en un nivel de módulo antes de cualquier procedimiento.

Las partes públicas (variables, objetos y tipos definidos por el usuario declarados en el nivel de módulo) de módulos declarados como privados utilizando la instrucción Option Private Module todavía están disponibles dentro del proyecto que contiene el módulo, pero no están disponibles para otras aplicaciones o proyectos.

Nota   Option Private solamente es útil para aplicaciones principales que admiten la carga simultánea de múltiples proyectos y que permiten referencias entre los proyectos cargados. Por ejemplo, Microsoft Excel permite la carga de múltiples proyectos y se puede utilizar Option Private Module para restringir la visibilidad de proyectos cruzados. Aunque Visual Basic permite cargar múltiples objetos, nunca se permiten en Visual Basic las referencias entre proyectos.


Private (Instrucción)

Se usa en el nivel de módulo para declarar variables y privadas y para asignar espacio de almacenamiento.

Sintaxis

Private [WithEvents] nombrevariable[([subíndices])] [As [New] tipo] [,[WithEvents] nombrevariable[([subíndices])] [As [New] tipo]] . . .

La sintaxis de la instrucción Private consta de las siguientes partes:

Parte	Descripción
WithEvents	Opcional. Palabra clave que especifica que nombrevariable es una variable de objeto utilizada para responder a eventos desencadenados por un objeto ActiveX. Sólo es válido en módulos de clase. Puede declarar tantas variables individuales como desee utilizando WithEvents, pero no puede crear matrices con WithEvents. No puede utilizar New con WithEvents.
nombrevariable	Requerido. Nombre de la variable; sigue las convenciones de nombres estándar de variable.
subíndices	Opcional. Dimensiones de una variable de matriz; se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices utiliza la sintaxis siguiente:
	[inferior To] superior [,[inferior To] superior] . . .
	Cuando no se declara explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no hay ninguna instrucción Option Base.
New	Opcional. Palabra clave que habilita la creación implícita de un objeto. Si utiliza New cuando declara la variable de objeto, se crea una nueva instancia del objeto como primera referencia, así que no tiene que utilizar la instrucción Set para asignar la referencia del objeto. La palabra clave New no se puede utilizar para declarar variables de cualquier tipo de datos intrínseco, no se puede utilizar para declarar instancias de objetos dependientes y no se puede utilizar con WithEvents.
tipo	Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (para cadenas de longitud fija), String * longitud (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario o un tipo objeto. Utilice una cláusula separada As tipo para cada variable que defina.
Comentarios

Las variables Private están disponibles sólo para el módulo en el que se declaran.

Use la instrucción Private para declarar el tipo de datos de una variable. Por ejemplo, la instrucción siguiente declara una variable como un Integer:

Private NumeroDeEmpleados As Integer

Utilice también una instrucción Private para declarar el tipo de objeto de una variable. La siguiente línea declara una variable para una nueva instancia de una hoja de cálculo.

Private X As New Worksheet

Si no utiliza la palabra clave New al declarar una variable de objeto, no existe realmente ninguna instancia del objeto. Una variable que se refiere a un objeto debe ser asignada a un objeto existente utilizando la instrucción Set antes de que pueda ser usada. Hasta que se le asigne un objeto, la variable declarada del objeto tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia particular de un objeto.

Si no se especifica un tipo de datos o un tipo objeto y no existe una instrucción Deftipo en el módulo, la variable predeterminada es Variant.

También puede usar la instrucción Private con paréntesis vacíos para declarar matrices dinámicas. Después de declarar un matriz dinámica, use la instrucción ReDim dentro de un procedimiento para definir el número de dimensiones y elementos de una matriz. Si intenta volver a declarar una dimensión para una variable matricial cuya medida ha sido explícitamente especificada en una instrucción Private, Public o Dim, ocurrirá un error.

Cuando las variables son inicializadas, una variable numérica se inicializa como 0, una cadena de longitud variable se inicializa como una cadena de longitud cero y una cadena de longitud fija se completa con ceros. Las variables Variant se inicializan como Empty. Cada elemento de una variable de un tipo definido por el usuario se inicializa como si fuera una variable separada.

Nota   Cuando utilice la instrucción Private en un procedimiento, es una práctica de programación ampliamente aceptada incluir dicha instrucción Private al principio del procedimiento.


Property Get (Instrucción)

Declara el nombre, los argumentos y código que componen el cuerpo de un procedimiento Property, el cual obtiene el valor de una propiedad.

Sintaxis

[Public | Private] [Static] Property Get nombre [(listaargumentos)] [As tipo]
[instrucciones]
[nombre = expresión]
[Exit Property]
[instrucciones]
[nombre = expresión]

End Property

La sintaxis de la instrucción Property Get consta de las siguientes partes:

Parte	Descripción
Public	Opcional. Indica que el procedimiento Property Get es accesible a todos los otros procedimientos en todos los los módulos. Si se usa en un módulo privado (el que contiene una instrucción Option Private) el procedimiento no estará disponible fuera del proyecto.
Private	Opcional. Indica que el procedimiento Property Get es accesible sólo a otros procedimientos contenidos en el módulo donde se declara.
Static	Opcional. Indica que las variables locales del procedimiento Property Get se conservan entre llamadas. El atributo Static no afecta a las variables declaradas fuera del procedimiento Property Get, aún si son utilizadas en el mismo.
Nombre	Requerido. Nombre del procedimiento Property Get; sigue las convenciones de nombres estándar de variable, excepto que el nombre puede ser el mismo que el de un procedimiento Property Let o Property Set en el mismo módulo.
Listaargumentos	Opcional. Lista de variables que representan argumentos que son pasados al procedimiento Property Get cuando se llama a éste. Las variables múltiples se separan con comas. El nombre y el tipo de datos de cada argumento de un procedimiento Property Get deben ser iguales que en los argumentos correspondientes de un procedimiento Property Let (si lo hay).
Tipo	Opcional. Tipo de datos del valor devuelto por el procedimiento Property Get; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (excepto longitud fija), Object, Variant o tipo definido por el usuario. No se pueden devolver matrices de ningún tipo, pero sí una Variant que contiene una matriz. El tipo de retorno de un procedimiento Property Get debe ser del mismo tipo de datos que el último (a veces el único) argumento de un procedimiento Property Let correspondiente (si lo hay) que define el valor asignado a la propiedad en la parte derecha de una expresión.
instrucciones	Opcional. Cualquier grupo de instrucciones que se ejecutan dentro del cuerpo del procedimiento Property Get.
Expresión	Opcional. Valor de la propiedad devuelto por el procedimiento definido por la instrucción Property Get.
El argumento listaargumentos posee las siguientes partes y sintaxis:

[Optional] [ByVal | ByRef] nombrevariable[( )] [As tipo] [= valorpredeterminado]

Parte	Descripción
Optional	Opcional. Indica que no se necesita un argumento. Si se utiliza, todos los argumentos subsiguientes de listaargumentos también deben ser opcionales y se deben declarar utilizando la palabra clave Optional.
ByVal	Opcional. Indica que el argumento es pasado por valor.
ByRef	Opcional. Indica que el argumento es pasado por referencia. ByRef es el argumento predeterminado en Visual Basic.
ParamArray	Opcional. Sólo se utiliza como el último argumento en listaargumentos para indicar que el argumento final es una matriz Optional de elementos tipo Variant. La palabra clave ParamArray le eprmite proporcionar un número arbitrario de argumentos. No se puede utilizar con ByVal, ByRef o Optional.
nombrevariable	Requerido. Nombre de la variable que representa al argumento; sigue las convenciones de nombres estándar de variables.
tipo	Opcional. El tipo de datos del argumento pasado al procedimiento Property Get; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (sólo longitud variable), Object, Variant, un tipo definido por el usuario o un tipo de objeto.
valorpredeterminado	Opcional. Cualquier constante o expresión de constantes. Válido sólo para parámetros Optional. Si el tipo es Object un valor predeterminado explícito sólo puede ser Nothing.
Comentarios

Si no se especifica explícitamente utilizando los procedimientos Public o Private, los procedimientos Property son público como opción predeterminada. Si no se usa Static, el valor de las variables locales no se conserva entre llamadas.

Todo el código ejecutable debe estar en procedimientos. No se puede definir un procedimiento Property Get dentro de otro procedimiento Property, Sub o Function.

Las palabras clave Exit Property causan la inmediata salida de un procedimiento Property Get. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Property Get. Cualquier número de instrucciones Exit Property puede aparecer en cualquier lugar de un procedimiento Property Get.

Al igual que un procedimiento Sub y Property Let, un procedimiento Property Get es un procedimiento separado que puede tomar argumentos, llevar a cabo una serie de instrucciones y cambiar el valor de sus argumentos. Sin embargo, a diferencia de un procedimiento Sub o Property Let, un procedimiento Property Get se puede utilizar en el lado derecho de una expresión en la misma forma que utiliza una Function o el nombre de una propiedad cuando desea devolver el valor de una propiedad.


Property Let (Instrucción)

Declara el nombre, los argumentos y el código que forman el cuerpo de un procedimiento Property Let, el cual asigna un valor a una propiedad.

Sintaxis

[Public | Private] [Static] Property Let nombre [(listaargumentos,] valor)]
[instrucciones]
[Exit Property]
[instrucciones]

End Property

La sintaxis de la instrucción Property Let consta de las siguientes partes:

Parte	Descripción
Public	Opcional. Indica que el procedimiento Property Let es accesible a todos los otros procedimientos en todos los módulos. Si se usa en un módulo privado (uno que contiene una instrucción Option Private), el procedimiento no se encuentra disponible fuera del proyecto.
Private	Opcional. Indica que el procedimiento Property Let es accesible sólo a otros procedimientos en el módulo donde ha sido declarado.
Static	Opcional. Indica que las variables locales del procedimiento Property Let se conservan entre llamadas. El atributo Static no afecta a variables que han sido declaradas fuera del procedimiento Property Let, aún si se usan en el procedimiento.
nombre	Requerido. El nombre del procedimiento Property Let; sigue las convenciones de nombres estándar de variables, excepto que el nombre puede ser el mismo que el de los procedimientos Property Get o Property Set en el mismo módulo.
listaargumentos	Requerido. Lista de variables que representan argumentos que se pasan al llamar al procedimiento Property Let. Múltiples variables se separan con comas. El nombre y el tipo de datos de cada argumento de un procedimiento Property Let (excepto el último) deben ser iguales que los argumentos correspondientes de un procedimiento Property Get.
valor	Requerido. Variable para contener el valor que se asigna a la propiedad. Cuando se llama al procedimiento, este argumento aparece en la parte derecha de la expresión que llama. El tipo de datos de valor debe ser el mismo que el del tipo devuelto por procedimiento Property Get correspondiente.
instrucciones	Opcional. Cualquier grupo de instrucciones que se ejecute dentro del cuerpo del procedimiento Property Let.
El argumento listaargumentos posee las siguientes partes y sintaxis:

[Optional] [ByVal | ByRef] [ParamArray] nombrevariable[( )] [As tipo] [= valorpredeterminado]

Parte	Descripción
Optional	Opcional. Indica que no se necesita un argumento. Si se utiliza, todos los argumentos subsiguientes de listaargumentos también deben ser opcionales y se deben declarar utilizando la palabra clave Optional. Observe que la parte derecha de una expresión Property Let no puede ser Optional.
ByVal	Opcional. Indica que el argumento es pasado por valor.
ByRef	Opcional. Indica que el argumento es pasado por referencia. ByRef es el argumento predeterminado en Visual Basic.
ParamArray	Opcional. Sólo se utiliza como el último argumento en listaargumentos para indicar que el argumento final es una matriz Optional de elementos tipo Variant. La palabra clave ParamArray le eprmite proporcionar un número arbitrario de argumentos. No se puede utilizar con ByVal, ByRef o Optional.
nombrevariable	Requerido. El nombre de la variable que representa al argumento; sigue las convenciones de nombres estándar de variables.
tipo	Opcional. El tipo de datos del argumento pasado al procedimiento Property Let; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (sólo longitud variable), Object, Variant. Si el parámetro no es Optional, un tipo definido por el usuario o un tipo de objeto debe estar especificado.
valorpredeterminado	Opcional. Cualquier constante o expresión de constantes. Válido sólo para parámetros Optional. Si el tipo es Object un valor predeterminado explícito sólo puede ser Nothing.
Nota   Toda instrucción Property Let debe definir por lo menos un argumento para el procedimiento que define. Ese argumento (o el último argumento si hay más de uno) contendrá el valor actual que se asigna a la propiedad cuando se invoca el procedimiento definido por Property Let. Ese argumento se le hace referencia como valor en la sintaxis anterior.

Comentarios

Si no se especifica explícitamente utilizando Public o Private, Property, los procedimientos Propiedad son públicos como opción predeterminada. Si no se usa Static, el valor de las variables locales no se conserva entre llamadas.

Todo código ejecutable debe estar en procedimientos. No se puede definir un procedimiento Property Let dentro de otro procedimiento Property, Sub o Function.

Las palabras clave Exit Property causan la inmediata salida de un procedimiento Property Let. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Property Let. Cualquier número de instrucciones Exit Property puede aparecer en cualquier lugar de un procedimiento Property Let.

Al igual que una Function y un procedimiento Property Get, un procedimiento Property Let es un procedimiento separado que puede tomar argumentos, llevar a cabo una serie de instrucciones y cambiar el valor de sus argumentos. Sin embargo, a diferencia de una Function y de un procedimiento Property Get, los cuales devuelven un valor, un procedimiento Property Let sólo puede ser usado en el lado izquierdo de una expresión de asignación de propiedad o de una instrucción Let.


Property Set (Instrucción)

Declara el nombre, argumentos y código que componen el cuerpo de un procedimiento Property, el cual asigna una referencia a un objeto.

Sintaxis

[Public | Private] [Static] Property Set nombre [(listaargumentos,] referencia)]
[instrucciones]
[Exit Property]
[instrucciones]

End Property

La sintaxis de la instrucción Property Set consta de las siguientes partes:

Parte	Descripción
Optional	Opcional. Indica que el argumento lo puede proporcionar el llamador o no.
Public	Opcional. Indica que el procedimiento Property Set es accesible a todos los otros procedimientos en todos los módulos. Si se usa en un módulo privado (uno que contiene la instrucción Option Private), el procedimiento no está disponible fuera del proyecto.
Private	Opcional. Indica que el procedimiento Property Set es accesible sólo para otros procedimientos en el módulo donde se declara.
Static	Opcional. Indica que las variables locales del procedimiento Property Set se conservan entre llamadas. El atributo Static no afecta a las variables que se declaran del procedimiento Property Set, aún si se usan en el procedimiento.
nombre	Requerido. Nombre del procedimiento Property Set; sigue las convenciones de nombres estándar de variables, excepto que el nombre puede ser el mismo que el de los procedimientos Property Get o Property Let en el mismo módulo.
listaargumentos	Requerido. Lista de variables que representan argumentos que se pasan al procedimiento Property Set cuando éste es llamado. Las variables múltiples se separan con comas.
referencia	Requerido. Variable que contiene la referencia de objeto utilizada en la parte derecha de la asignación de referencia de objeto.
instrucciones	Opcional. Cualquier grupo de instrucciones que se ejecutan dentro del cuerpo del procedimiento Property.
El argumento listaargumentos posee las siguientes partes y sintaxis:

[Optional] [ByVal | ByRef] nombrevariable[( )] [As tipo] [= valorpredeterminado]

Parte	Descripción
Optional	Opcional. Indica que no se necesita un argumento. . Si se utiliza, todos los argumentos subsiguientes de listaargumentos también deben ser opcionales y se deben declarar utilizando la palabra clave Optional. Observe que la parte derecha de una expresión Property Set no puede ser Optional.
ByVal	Opcional. Indica que el argumento es pasado por valor.
ByRef	Opcional. Indica que el argumento es pasado por referencia. ByRef es el modo predeterminado en Visual Basic.
ParamArray	Opcional. Sólo se utiliza como el último argumento en listaargumentos para indicar que el argumento final es una matriz Optional de elementos tipo Variant. La palabra clave ParamArray le eprmite proporcionar un número arbitrario de argumentos. No se puede utilizar con ByVal, ByRef o Optional.
nombrevariable	Requerido. Nombre de la variable que representa el argumento; sigue las convenciones de nombres estándar de variables.
tipo	Opcional. El tipo de datos del argumento pasado al procedimiento Property Set; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (sólo longitud variable), Object, Variant. Si el parámetro no es Optional, un tipo definido por el usuario o un tipo de objeto debe estar especificado.
valorpredeterminado	Opcional. Cualquier constante o expresión de constantes. Válido sólo para parámetros Optional. Si el tipo es Object un valor predeterminado explícito sólo puede ser Nothing.
Nota   Toda instrucción Property Set debe definir por lo menos un argumento para el procedimiento que define. Ese argumento (o el último argumento si hay más de uno) contendrá la referencia del objeto actual para la propiedad cuando se invoque el procedimiento definido por la instrucción Property Set. Se le hace referencia como referencia en la sintaxis anterior. No puede ser Optional.

Comentarios

Si no se especifica explícitamente utilizando los procedimientos Public o Private, Property será público como opción predeterminada. Si no se usa Static, el valor de las variables locales no se conserva entre llamadas.

Todo código ejecutable debe estar en procedimientos. No puede definir un procedimiento Property Set dentro de otro procedimiento Property, Sub o Function.

La instrucción Exit Property causa la inmediata salida de un procedimiento Property Set. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Property Set. Cualquier número de instrucciones Exit Property puede aparecer en cualquier lugar de un procedimiento Property Set.

Al igual que una Function y el procedimiento Property Get, un procedimiento Property Set es un procedimiento separado que puede tomar argumentos, llevar a cabo una serie de instrucciones y cambiar el valor de sus argumentos. Sin embargo, a diferencia de una Function y del procedimiento Property Get, los cuales devuelven un valor, un procedimiento Property Set sólo puede ser usado en el lado izquierdo de una asignación de referencia de objeto (instrucción Set).


Public (Instrucción)

Se usa en el nivel de módulo para declarar variables públicas y asignarles espacio para almacenamiento.

Sintaxis

Public [WithEvents] nombrevariable[([subíndices])] [As [New] tipo] [,[WithEvents] nombrevariable[([subíndices])] [As [New] tipo]] . . .

La sintaxis de la instrucción Public consta de las siguientes partes:

Parte	Descripción
WithEvents	Opcional. Palabra clave que especifica que nombrevariable es una variable de objeto utilizada para responder a eventos desencadenados por un objeto ActiveX. Sólo es válido en módulos de clase. Puede declarar tantas variables individuales como desee utilizando WithEvents, pero no puede crear matrices con WithEvents. No puede utilizar New con WithEvents.
nombrevariable	Requerido. Nombre de la variable; sigue las convenciones de nombres estándar de variable.
subíndices	Opcional. Dimensiones de una variable de matriz, se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices usa la sintaxis siguiente:
	[inferior To] superior [,[inferior To] superior] . . .
	Cuando no se declara explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no hay ninguna instrucción Option Base.
New	Opcional. Palabra clave que habilita la creación implícita de un objeto. Si utiliza New cuando declara la variable de objeto, se crea una nueva instancia del objeto como primera referencia, así que no tiene que utilizar la instrucción Set para asignar la referencia del objeto. La palabra clave New no se puede utilizar para declarar variables de cualquier tipo de datos intrínseco, no se puede utilizar para declarar instancias de objetos dependientes y no se puede utilizar con WithEvents.
tipo	Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String, (para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario o un tipo de objeto. Use una cláusula separada tipo As para cada variable que se defina.
Comentarios

Las variables declaradas utilizando la instrucción Public están disponibles para todos los procedimientos en todos los módulos de todas las aplicaciones, a menos que Option Private Module esté en efecto; en este caso, las variables son públicos sólo dentro del proyecto en el que residen.

Precaución No puede utilizar la instrucción Public en un módulo de clase para declarar una variable de cadena de longitud fija.

Use la instrucción Public para declarar el tipo de datos o el tipo de objeto de la variable. Por ejemplo, la instrucción siguiente declara una variable como un Integer:

Public NumeroDeEmpleados As Integer

Utilice también la instrucción Public para declarar el tipo de objeto de una variable. La siguiente línea declara una variable para una nueva instancia de una hoja de cálculo.

Public X As New Worksheet

Si no utiliza la palabra clave New al declarar una variable de objeto, no existe realmente ninguna instancia del objeto. Una variable que se refiere a un objeto debe ser asignada a un objeto existente utilizando la instrucción Set antes de que pueda ser usada. Hasta que se le asigne un objeto, la variable declarada del objeto tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia particular de un objeto.

También puede utilizar una instrucción Public con paréntesis vacíos para declarar matrices dinámicas. Después de declarar una matriz dinámica, use la instrucción ReDim dentro de un procedimiento para definir el número de dimensiones y elementos de la matriz. Si intenta volver a declarar un dimensión para una matriz cuya medida ha sido explícitamente especificada en una instrucción Private, Public o Dim, ocurrirá un error.

Si no se especifica un tipo de datos o un tipo de objeto y no existe una instrucción Deftipo en el módulo, la variable es Variant como opción predeterminada.

Cuando se inicializan las variables, una variable numérica se inicializa a 0, una cadena de longitud variable se inicializa a una cadena de longitud cero y una cadena de longitud fija se completa con ceros. Las variables Variant se inicializan a Empty. Cada elemento de un tipo de variable definida por el usuario se inicializa como si fuera una variable separada.


ReDim (Instrucción)

Se usa en el nivel de procedimiento para declarar variables de matrices dinámicas y para asignarles o reasignarles espacio de almacenamiento.

Sintaxis

ReDim [Preserve] nombrevariable(subíndices) [As tipo] [, nombrevariable(subíndices) [As tipo]] . . .

La sintaxis de la instrucción ReDim consta de las siguientes partes:

Parte	Descripción
Preserve	Opcional. Palabra clave utilizada para conservar datos en una matriz existente cuando se cambia el tamaño de la última dimensión.
nombrevariable	Requerido. Nombre de la variable; sigue las convenciones de nombre estándar de variable.
subíndices	Requerido. Dimensiones de una variable matricial; se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices utiliza la sintaxis siguiente:
	[inferior To] superior [,[inferior To] superior] . . .
	Cuando no se declare explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no hay ninguna instrucción Option Base.
tipo	Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String (para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario o un tipo de objeto. Utilice una cláusula separada tipo As para cada variable que defina. Para una Variant que contiene una matriz, tipo describe el tipo de cada elemento de la matriz pero no cambia la Variant a algún otro tipo.
Comentarios

La instrucción ReDim se utiliza generalmente para asignar o cambiar el tamaño de una matriz dinámica que ya ha sido formalmente declarada utilizando las instrucciones Private, Public o Dim con paréntesis vacíos (sin subíndices de dimensiones).

Se puede utilizar la instrucción ReDim repetidamente para cambiar el número de elementos y las dimensiones de una matriz. Sin embargo, no puede declarar una matriz de un tipo de datos y luego usar ReDim para cambiar la matriz a otro tipo de datos, a menos que la matriz esté contenida en una Variant. Si la matriz está contenida en una Variant, el tipo de los elementos puede ser cambiado utilizando una cláusula Astipo.

Si utiliza la palabra clave Preserve, sólo puede cambiar el tamaño de la última dimensión de la matriz y no es posible cambiar el número de dimensiones. Por ejemplo, si la matriz sólo tiene una dimensión, puede cambiar el tamaño de esa dimensión debido a que es la última y única dimensión. Sin embargo, si la matriz tiene dos o más dimensiones, sólo puede cambiar la dimensión de la última y todavía conservar el contenido de la matriz. El ejemplo siguiente muestra cómo puede aumentar el tamaño de la última dimensión de una matriz dinámica sin borrar ninguno de los datos existentes contenidos en la matriz.

ReDim X(10, 10, 10)

. . .

ReDim Preserve X(10, 10, 15)

De modo parecido, cuando utiliza el argumento Preserve, puede cambiar el tamaño de la matriz sólo cambiando el límite superior; cambiar el límite inferior produce un error.

Si hace que una matriz sea más pequeña de lo que ha sido, perderá los datos de los elementos eliminados. Si transfiere una matriz a un procedimiento por referencia, no puede cambiar el tamaño de la matriz dentro del procedimiento.

Cuando las variables son inicializadas, una variable numérica se inicializa con 0, una cadena de longitud variable se inicializa con una cadena de longitud 0 y una cadena de longitud fija se completa con ceros. Las variables Variant se inicializan como Empty. Cada elemento de una variable de un tipo definido por el usuario, se inicializa como si fuera una variable separada. A una variable que se refiere a un objeto se le debe asignar un objeto existente usando la instrucción Set antes de que pueda ser usada. Hasta que se asigna a un objeto, la variable declarada del objeto tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia particular de un objeto.

Precaución   La instrucción ReDim actúa como una instrucción declarativa si la variable declara que no existe en nivel de módulo o novel de procedimiento. Si más tarde crea otra variable con el mismo nombre, incluso en un mayor alcance, ReDim hará referencia a la creada más tarde y no causará necesariamente un error de compilación, incluso si Option Explicit no está activo. Para prevenir estos conflictos, ReDim no se debería utilizar como una instrucción declarativa, sino sólo para cambiar el tamaño de las matrices.

Nota   Para cambiar el tamaño de una matriz contenida en una Variant, debe declarar explícitamente la variable de la Variant antes de intentar cambiar el tamaño de su matriz.


Rem (Instrucción)

Se usa para incluir notas aclaratorias en un programa.

Sintaxis

Rem comentario

También puede utilizar la siguiente sintaxis:

' comentario

El argumento comentario es el texto de cualquier comentario que desea incluir. Después de la palabra clave Rem, se requiere un espacio antes de comentario.

Comentarios

Si usa números de línea o etiquetas de línea, es posible derivar de una instrucción es posible derivar de una instrucción GoTo o GoSub a una línea que contenga la instrucción Rem. La ejecución continúa con la primera instrucción ejecutable que sigue a la instrucción Rem. Si la palabra clave Rem sigue a otras instrucciones en una línea, se debe separar de las instrucciones con dos puntos (:).

Puede usar una comilla simple o apóstrofo (') en vez de la palabra clave Rem. Cuando utilice un apóstrofe, no se necesitan los dos puntos después de otras instrucciones.


Set (Instrucción)

Asigna una referencia de objeto a una variable o propiedad.

Sintaxis

Set variableobjeto = {[New] expresiónobjeto | Nothing}

La sintaxis de la instrucción Set consta de las siguientes partes:

Parte	Descripción
variableobjeto	Requerido. Nombre de la variable o de la propiedad; sigue las convenciones de nombres estándar de variables.
New	Opcional. New se utiliza normalmente durante una declaración para habilitar la creación implícita de un objeto. Cuando utiliza New con la instrucción Set se crea una nueva instancia de la clase. Si variableobjeto contuvo una referencia a un objeto, esta referencia se libera cuando se asigna el nuevo objeto. La palabra clave New no se puede utilizar para crear nuevas instancias de cualquier tipo de datos intrínseco ni para crear objetos dependientes.
expresiónobjeto	Requerido. Expresión que consiste en el nombre de un objeto, otra variable declarada del mismo tipo de objeto, o una función o método que devuelve un objeto del mismo tipo de objeto.
Nothing	Opcional. Interrumpe una asociación de variableobjeto con cualquier objeto específico. Al asignar variableobjeto a Nothing se liberan todos los recursos asociados con el objeto al que se hizo referencia previamente cuando ninguna otra variable se refiere a él.
Comentarios

Para ser válido, variableobjeto debe ser un tipo de objeto consistente con el objeto que se le ha asignado.

Las instrucciones Dim, Private, Public, ReDim y Static sólo declaran una variable que se refiere a un objeto. No se hará referencia a ningún objeto real hasta que use la instrucción Set para asignar un objeto específico.

El siguiente ejemplo ilustra el uso de Dim para declarar una matriz formalmente del tipo Formulario1. Actualmente no existe ninguna instancia de Formulario1. Set asigna referencias a nuevas instancias de Formulario1 a la variable misFormulariosSecundarios. Este código se podría utilizar para crear formularios secundarios en una aplicación MDI.

Dim misFormulariosSecundarios(1 to 4) As Formulario1

Set misFormulariosSecundarios(1) = Nuevo Formulario1

Set misFormulariosSecundarios(2) = Nuevo Formulario1

Set misFormulariosSecundarios(3) = Nuevo Formulario1

Set misFormulariosSecundarios(4) = Nuevo Formulario1

Generalmente, cuando usa Set para asignar una referencia de objeto a una variable, no se crea ninguna copia del objeto. En cambio, se crea una referencia al objeto. Más de una variable de objeto se puede referir al mismo objeto. Debido a que estas variables son referencias al objeto (más que copias de él), cualquier cambio se refleja en todas las variables que se refieren a él. No obstante, cuando utiliza la palabra clave New en la instrucción Set, en realidad está creando una instancia del objeto.


Static (Instrucción)

Se usa en el nivel de procedimiento para declarar variables y asignarles espacio de almacenamiento. Las variables declaradas con la instrucción Static conservan su valor mientras el código se esté ejecutando.

Sintaxis

Static nombrevariable[([subíndices])][As [New] tipo][, nombrevariable[([subíndices])][As [New] tipo]] . . .

La sintaxis de la instrucción Static consta de estas partes:

Parte	Descripción
nombrevariable	Requerido. Nombre de la variable; sigue las convenciones de nombres estándar de variable.
subíndices	Opcional. Dimensiones de una variable de matriz; se pueden declarar hasta 60 dimensiones múltiples. El argumento subíndices usa la sintaxis siguiente:
	[inferior To] superior [,[inferior To] superior] . . .
	Cuando no se declare explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. Este límite inferior es cero si no hay ninguna instrucción Option Base.
New	Opcional. Palabra clave que habilita la creación implícita de un objeto. Si utiliza New cuando declara la variable de objeto, se crea una nueva instancia del objeto como primera referencia, así que no tiene que utilizar la instrucción Set para asignar la referencia del objeto. La palabra clave New no se puede utilizar para declarar variables de cualquier tipo de datos intrínseco, no se puede utilizar para declarar instancias de objetos dependientes.
tipo	Opcional. Tipo de datos de la variable; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String, (para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, Variant, un tipo definido por el usuario o un tipo de objeto. Use una cláusula separada Astipo para cada variable que defina.
Comentarios

Una vez que el código del módulo se está ejecutando, las variables declaradas con la instrucción conservan su valor hasta que se reinicie la ejecución del módulo. Use la instrucción Static en procedimientos para declarar explícitamente variables que son visibles sólo dentro de un procedimiento, pero cuya vida es la misma que la del módulo en la que se definió el procedimiento.

Utilice una instrucción Static dentro de un procedimiento para declarar el tipo de datos de una variable que retiene su valor entre llamadas de procedimiento. Por ejemplo, la instrucción siguiente declara una matriz de enteros de tamaño fijo:

Static NumeroDeEmpleados(200) As Integer

La siguiente línea declara una variable para una nueva instancia de una hoja de cálculo:

Static X As New Worksheet

Si la palabra clave New

 no se utiliza al declarar una variable de objeto, no existe realmente ninguna instancia del objeto. Es necesario asignar un objeto existente a una variable que hace referencia a un objeto mediante la instrucción Set antes de poder utilizar dicha variable. Antes de que se le asigne un objeto, la variable de objeto declarada tiene el valor especial Nothing, que indica que no hace referencia a ninguna instancia determinada de un objeto. Cuando utiliza la palabra clave New en la declaración, se crea una instancia del objeto en la primera referencia del mismo.

Si no se especifica un tipo de datos o un tipo de objeto y no existe una instrucción Deftipo en el módulo, la variable es Variant como opción predeterminada.

Nota La instrucción Static y la palabra clave Static afectan el tiempo de vida de variables de modo diferente. Si se declara un procedimiento con la palabra clave Static (como en Static Sub ContarVentas ()),el espacio de almacenamiento correspondiente a todas las variables locales dentro del procedimiento se asigna sólo una vez y el valor de las variables se conserva durante todo el tiempo que se esté ejecutando el código. Para procedimientos no estáticos, el espacio de almacenamiento para las variables se asigna cada vez que el procedimiento es llamado y se libera cuando se sale del procedimiento. La instrucción Static se usa para declarar variables dentro de procedimientos no estáticos para conservar su valor mientras el programa se esté ejecutando.

Al inicializar las variables, una variable numérica se inicializa con 0, una cadena de longitud variable se inicializa con una cadena de longitud 0 y una cadena de longitud fija se completa con ceros. Las variables Variant se inicializan como Empty. Cada elemento de una variable de un tipo definido por el usuario, se inicializa como si fuera una variable separada.

Nota   Cuando usa la instrucción Static en un procedimiento, es una práctica de programación generalmente aceptada poner la instrucción Static al comienzo del procedimiento con cualquier instrucción Dim.


Sub (Instrucción)

Declara el nombre, argumentos y código que componen el cuerpo de un procedimiento Sub.

Sintaxis

[Private | Public] [Static] Sub nombre [(listaargumentos)]
[instrucciones]
[Exit Sub]
[instrucciones]

End Sub

La sintaxis de la instrucción Sub consta de las siguientes partes:

Parte	Descripción
Public	Opcional. Indica que el procedimiento Sub es accesible a todos los otros procedimientos en todos los módulos. Si se usa en un módulo privado (uno que contiene una instrucción Option Private) el procedimiento no está disponible fuera del proyecto.
Private	Opcional. Indica que el procedimiento Sub es accesible sólo a otros procedimientos en el módulo donde es declarado.
Static	Opcional. Indica que las variables locales del procedimiento Sub se conservan entre llamadas. El atributo Static no afecta variables que se declaran fuera de Sub, aún si ellas se usan en el procedimiento.
nombre	Requerido. Nombre del Sub; sigue las convenciones de nombres estándar de variables.
listaargumentos	Opcional. Lista de variables que representan los argumentos que son pasados al procedimiento Sub cuando es llamado. Las variables múltiples se separan con puntos y coma.
instrucciones	Opcional. Cualquier grupo de instrucciones que se ejecutan dentro del cuerpo del procedimiento Sub.
El argumento listaargumentos posee las siguientes partes y sintaxis:

[Optional] [ByVal | ByRef] [ParamArray] nombrevariable[( )] [As tipo] [= valorpredterminado]

Parte	Descripción
Optional	Opcional. Palabra clave indica no se requiere un argumento. Si se usa, todos los argumentos subsiguientes en listaargumentos también deben ser opcionales y declarados utilizando la palabra clave Optional. Optional no se puede utilizar para ningún argumento si se usa ParamArray.
ByVal	Opcional. Indica que el argumento es pasado por valor.
ByRef	Opcional. Indica que el argumento es pasado por referencia. ByRef es el modo predeterminado en Visual Basic.
ParamArray	Opcional. Se usa sólo como el último argumento en listaargumentos para indicar que el argumento final es una matriz Optional de elementos Variant. La palabra clave ParamArray le permite introducir un número arbitrario de argumentos. No se usa con ByVal, ByRef u Optional.
nombrevariable	Requerido. Nombre de la variable que representa al argumento; sigue las convenciones de nombres estándar de variables.
tipo	Opcional. El 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. Si el parámetro no es Optional, un tipo definido por el usuario o un tipo de objeto debe ser especificado.
valorprdeterminado	Opcional. Cualquier constante o expresión de constante. Válido sólo para parámetros Optional. Si el tipo es Object un valor predeterminado explícito sólo puede ser Nothing.
Comentarios

Si no se especifica explícitamente utilizando los procedimientos Public o Private, Sub será público como opción predeterminada. Si no se usa Static, el valor de las variables locales no se mantiene entre llamadas.

Precaución   Los procedimientos Sub pueden ser recursivos; esto es, se pueden llamar a sí mismos para realizar una tarea determinada. Sin embargo, esto puede llevar al desbordamiento de la pila. La palabra clave Static generalmente no se utiliza con procedimientos recursivos Sub.

Todo código ejecutable debe estar en procedimientos. No es posible definir un procedimiento Sub dentro de otro procedimiento Sub, Function o Property.

La palabra clave Exit Sub causa la inmediata salida de un procedimiento Sub. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó el procedimiento Sub. Cualquier número de instrucciones Exit Sub puede aparecer en cualquier lugar de un procedimiento Sub.

Como un procedimiento Function, un procedimiento Sub es un procedimiento separado que toma argumentos, lleva a cabo una serie de instrucciones y cambia el valor de sus argumentos. Sin embargo, a diferencia de un procedimiento Function, el cual devuelve un valor, un procedimiento Sub no se puede utilizar en una expresión.

Para llamar a un procedimiento Sub, use el nombre del procedimiento seguido de la lista de argumentos. Consulte la instrucción Call para obtener información específica sobre cómo llamar a los procedimientos Sub.

Las variables usadas en procedimientos Sub se dividen en dos categorías: Aquellas que están explícitamente declaradas dentro del procedimiento y aquellas que no lo están. Las variables que están explícitamente declaradas en un procedimiento (utilizando Dim o el equivalente) siempre son locales al procedimiento. Otras variables usadas pero no declaradas explícitamente en un procedimiento también son locales, a menos que sean declaradas explícitamente en algún nivel superior fuera del procedimiento.

Precaución   Un procedimiento puede usar una variable que no esté declarada explícitamente en el procedimiento, pero puede ocurrir un conflicto si cualquier cosa que ha definido en el nivel de módulo tiene el mismo nombre. Si el procedimiento se refiere a una variable no declarada que tiene el mismo nombre que otro procedimiento, constante o variable, se asume que el procedimiento se está refiriendo al nombre de ese nivel de módulo. Para evitar este tipo de conflictos, declare las variables explícitamente. Puede usar una instrucción Option Explicit para forzar la declaración explícita de variables.

Nota   No puede usar GoSub, GoTo o Return para obtener acceso o salir de un procedimiento Sub.


Type (Instrucción)

Se usa en el nivel de módulo para definir un tipo de datos definido por el usuario que contiene uno o más elementos.

Sintaxis

[Private | Public] Type nombrevariable
 nombreelemento [([subíndices])] As tipo
[nombreelemento [([subíndices])] As tipo]
. . .

End Type

La sintaxis de la instrucción Type consta de las siguientes partes:

Parte	Descripción
Public	Opcional. Se usa para declarar tipos definidos por el usuario que están disponibles para todos los procedimientos en todos los módulos en todos de todos los proyectos.
Private	Opcional. Se usa para declarar tipos definidos por el usuario que sólo están disponibles dentro del módulo donde se hace la declaración.
nombrevariable	Requerido. Nombre del tipo definido por el usuario; sigue las convenciones de nombres estándar de variables.
nombreelemento	Requerido. Nombre de un elemento del tipo definido por el usuario. Los nombres de elementos también siguen las convenciones de nombres estándar, excepto que se pueden utilizar palabras claves.
subíndices	Opcional. Dimensiones de un elemento matriz. Use sólo paréntesis cuando declare una matiz cuyo tamaño puede cambiar. El argumento subíndices utiliza la siguiente sintaxis:
	[inferior To] superior [,[inferior To] superior] . . .
	Cuando no se declare explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no hay ninguna instrucción Option Base.
tipo	Requerido. Tipo de datos del elemento; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no compatible actualmente), Date, String(para cadenas de longitud variable), String * longitud (para cadenas de longitud fija), Object, Variant, otro tipo definido por el usuario o un tipo objeto.
Comentarios

La instrucción Type sólo puede ser usado en el nivel de módulo. Una vez que ha declarado un tipo definido por el usuario con la instrucción Type, podrá declarar una variable de ese tipo en cualquier lugar dentro del alcance de la declaración. Use Dim, Private, Public, ReDim o Static para declarar una variable de un tipo definido por el usuario.

En los módulos estándar, los tipos definidos por el usuario son públicos de manera predeterminada. Esta visibilidad se puede cambiar utilizando la palabra clave Private. No obstante, en los módulos de clase, los tipos definidos por el usuario solamente pueden ser privados y la visibilidad no se puede cambiar utilizando la palabra clave Public.

Los números de línea y etiquetas de línea no están permitidos en bloques Type...End Type.

Los tipos definidos por el usuario son usados a menudo con registros de datos, los cuales consisten frecuentemente en un número de elementos relacionados de diferentes tipos de datos.

En este ejemplo se muestra el uso de matrices de tamaño fijo en un tipo definido por el usuario:

Type DatosRegión

CódigoCiudad (1 To 100) As Integer	' Declara una matriz estática.

Condado As String * 30

End Type

Dim Washington(1 To 100) As DatosRegión

En el ejemplo anterior, DatosRegión incluye la matriz estática CódigoCiudad y el registro Washington tiene la misma estructura que DatosRegión.

Cuando declara una matriz de tamaño fijo dentro de un tipo definido por el usuario, sus dimensiones deben ser declaradas con literales numéricos o constantes, en lugar de variables.

La configuración de la instrucción Option Base determina el límite inferior para matrices dentro de tipos definidos por el usuario.


UBound (Función)

Devuelve un tipo Long que contiene el subíndice disponible más grande para los tamaños indicados de una matriz.

Sintaxis

UBound(nombrematriz[, dimensión])

La sintaxis de la función UBound posee estas partes:

Parte	Descripción
nombrematriz	Requerido. Nombre de la variable matricial; sigue las convenciones de nombres estándar de variable.
dimensión	Opcional; Variant (Long). Número entero que indica la dimensión cuyo límite superior será devuelto. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si dimensión se omite, se asume que es 1.
Comentarios

La función UBound se usa con la función LBound para determinar el tamaño de una matriz. Use la función LBound para encontrar el límite inferior de la dimensión de una matriz.

UBound devuelve los valores enumerados en la tabla que se muestra a continuación para una matriz con las dimensiones siguientes:

Dim A(1 To 100, 0 To 3, -3 To 4)

Instrucción	Valor devuelto
UBound(A, 1)	100
UBound(A, 2)	3
UBound(A, 3)	4


As

La palabra clave As se utiliza en estos contextos:

Const (Instrucción)

Declare (Instrucción)

Dim (Instrucción)

(Función) (Instrucción)

Name (Instrucción)

Open (Instrucción)

Private (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Public (Instrucción)

ReDim (Instrucción)

Static (Instrucción)

Sub (Instrucción)

Type (Instrucción)


Binary

La palabra clave Binary se utiliza en estos contextos:

Open (Instrucción)

Option Compare (Instrucción)


ByRef

La palabra clave ByRef se utiliza en estos contextos:

Call (Instrucción)

Declare (Instrucción)

(Función) (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Sub (Instrucción)


ByVal

La palabra clave ByVal se utiliza en estos contextos:

Call (Instrucción)

Declare (Instrucción)

(Función) (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Sub (Instrucción)


Date

La palabra clave Date se utiliza en estos contextos:

Date (Tipo de datos)

Date (Función)

Date (Instrucción)


 Else

La palabra clave Else se utiliza en estos contextos:

If...Then...Else (Instrucción)

Select Case (Instrucción)


Error

La palabra clave Error se utiliza en estos contextos:

Error (Función)

Error (Instrucción)

On Error (Instrucción)


For

La palabra clave For se utiliza en estos contextos:

For...Next (Instrucción)

For Each...Next (Instrucción)

Open (Instrucción)


Get

La palabra clave Get se utiliza en estos contextos:

Get (Instrucción)

Property Get (Instrucción)


Input

La palabra clave Input se utiliza en estos contextos:

Input (Función)

Input # (Instrucción)

Line Input # (Instrucción)

Open (Instrucción)


Is

La palabra clave Is se utiliza en estos contextos:

If...Then...Else (Instrucción)

Is (Operador)

Select Case (Instrucción)


Len

La palabra clave Len se utiliza en estos contextos:

Len (Función)

Open (Instrucción)


Let

La palabra clave Let se utiliza en estos contextos:

Let (Instrucción)

Property Let (Instrucción)


Lock

La palabra clave Lock se utiliza en estos contextos:

Lock, Unlock (Instrucciones)

Open (Instrucción)


Mid

La palabra clave Mid se utiliza en estos contextos:

Mid (Función)

Mid (Instrucción)


New

La palabra clave New se utiliza en estos contextos:

Dim (Instrucción)

Private (Instrucción)

Public (Instrucción)

Set (Instrucción)

Static (Instrucción)


Next

La palabra clave Next se utiliza en estos contextos:

For...Next (Instrucción)

For Each...Next (Instrucción)

On Error (Instrucción)

Resume (Instrucción)


On

La palabra clave On se utiliza en estos contextos:

On Error (Instrucción)

On...GoSub (Instrucción)

On...GoTo (Instrucción)


Option

La palabra clave Option se utiliza en estos contextos:

Option Base (Instrucción)

Option Compare (Instrucción)

Option Explicit (Instrucción)

Option Private (Instrucción)


Optional

La palabra clave Optional se utiliza en estos contextos:

Declare (Instrucción)

(Función) (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Sub (Instrucción)


ParamArray

La palabra clave ParamArray se utiliza en estos contextos:

Declare (Instrucción)

(Función) (Instrucción)

Sub (Instrucción)


Print

La palabra clave Print se utiliza en estos contextos:

Print Method

Print # (Instrucción)


Private

La palabra clave Private se utiliza en estos contextos:

Const (Instrucción)

Declare (Instrucción)

(Función) (Instrucción)

Option Private (Instrucción)

Private (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Sub (Instrucción)

Type (Instrucción)


Property

La palabra clave Property se utiliza en estos contextos:

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)


Public

La palabra clave Public se utiliza en estos contextos:

Const (Instrucción)

Declare (Instrucción)

(Función) (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Public (Instrucción)

Sub (Instrucción)

Type (Instrucción)


Resume

La palabra clave Resume se utiliza en estos contextos:

On Error (Instrucción)

Resume (Instrucción)


Seek

La palabra clave Seek se utiliza en estos contextos:

Seek (Función)

Seek (Instrucción)


Set

La palabra clave Set se utiliza en estos contextos:

Set (Instrucción)

Property Set (Instrucción)


Static

La palabra clave Static se utiliza en estos contextos:

(Función) (Instrucción)

Property Get (Instrucción)

Property Let (Instrucción)

Property Set (Instrucción)

Static (Instrucción)

Sub (Instrucción)


Step

La palabra clave Step se utiliza en estos contextos:

For...Next (Instrucción)

For Each...Next (Instrucción)


String

La palabra clave String se utiliza en estos contextos:

String (Tipo de datos)

String (Función)


Then

La palabra clave Then se utiliza en estos contextos:

#If...Then...#Else (Directiva)

If...Then...Else (Instrucción)


Time

La palabra clave Time se utiliza en estos contextos:

Time (Función)

Time (Instrucción)


To

La palabra clave To se utiliza en estos contextos:

Dim (Instrucción)

For...Next (Instrucción)

Lock, Unlock (Instrucciones)

Private (Instrucción)

Public (Instrucción)

ReDim (Instrucción)

Select Case (Instrucción)

Static (Instrucción)

Type (Instrucción)


WithEvents

La palabra clave WithEvents se utiliza en estos contextos:

Dim (Instrucción)

Private (Instrucción)

Public (Instrucción)


Convenciones de documentos

La documentación de Visual Basic utiliza las siguientes convenciones tipográficas.

Convención	Descripción
Sub, If, ChDir, Print, True, Debug	Las palabras en negrita y con mayúscula indican palabras clave específicas del lenguaje.
setup	Las palabras que se pide que escriba el usuario deben aparecer en negrita.
objeto, nomvariable, listaarg	Las letras minúsculas en cursiva indican los marcadores de lugar para que el usuario proporcione la información.
pathname, filenumber	Las letras minúsculas en negrita y cursiva indican los marcadores de lugar para argumentos donde se puede utilizar sintaxis de posición o de argumentos con nombres.
[listaexpresiones]	Los elementos de la sintaxis que aparecen entre corchetes son opcionales.
{While | Until}	En la sintaxis, las llaves y la barra vertical indican una elección obligatoria entre dos o más elementos. Se debe elegir uno de los elementos, a menos que todos estén entre corchetes. Por ejemplo:
	[{This | OrThat}]
ESC, ENTRAR	Las palabras en mayúscula indican nombres de archivo, teclas y secuencias de teclas.
ALT+F1, CTRL+R	Un signo más (+) entre nombres de teclas indica una combinación de teclas. Por ejemplo, ALT+F1 significa mantener presionada la tecla ALT mientras se presiona la tecla F1.
Convenciones de código

Se utilizan las siguientes convenciones de código:

Código de ejemplo	Descripción
MiCadena = "¡Hola!"	Esta fuente se usa para el código, variables y texto de mensajes de error.
' Esto es un comentario.	Los comentarios al código se inician con un apóstrofo (').
MiVar = "Esto es un " _	Un espacio con un subrayado (_) continúa una línea de código
& "ejemplo" _
& " de cómo continuar código."


Caption (Propiedad)


Enabled (Propiedad)


Height (Propiedad)


HelpContextID (Propiedad)


Hide (Método)


Left (Propiedad)


Move (Método)
Move (Propiedad)


Name (Propiedad)


PrintForm (Método)


Show (Método)


StartUpPosition (Propiedad)
StartUpPosition (Método)


Tag (Propiedad)


Top (Propiedad)


Visible (Propiedad)


WhatsThisButton (Propiedad)


WhatsThisHelp (Propiedad)


WhatsThisMode (Método)


Width (Propiedad)


Selección ambigua

O si no seleccionó una palabra clave o si solicitó Ayuda en un componente del entorno de desarrollo integrado (IDE). Si estaba intentando seleccionar una palabra clave, intente volver a seleccionar una única palabra clave.  Si estaba intentando obtener información en el IDE, haga clic en lo siguiente:

Ventana o Módulo Código

Ventana o Panel Inmediato

Ventana o Panel Locales

Examinador de objetos

Ventana o Panel Inspección


Error (Ejemplo de la función)
Ejemplo de la función Error

Este ejemplo utiliza la función Error para imprimir mensajes de error correspondientes a los números de error especificados.

Dim NúmeroError

For NúmeroError = 61 To 64	' Bucle por los valores 61 - 64.

Debug.Print Error(NúmeroError)' Imprime error en la ventana de Depuración.

Next NúmeroError


Error (Ejemplo de la instrucción)
Ejemplo de la instrucción Error

Este ejemplo utiliza la instrucción Error para simular el número de error 11.

On Error Resume Next	' Retarda el manejo de errores.

Error 11	' Simula el error "División entre cero".


On Error (Ejemplo de la instrucción)
Ejemplo de la instrucción On Error

Este ejemplo utiliza primero la instrucción On Error GoTo para especificar la ubicación de una rutina de control de errores dentro de un procedimiento. En el ejemplo, un intento de eliminar un archivo abierto genera el error número 55. El error se controla en la rutina de manejo de errores y a continuación se devuelve el control a la instrucción que provocó el error. La instrucción On Error GoTo 0 desactiva la detección de errores. A continuación se utiliza la instrucción On Error Resume Next para retardar la detección de errores de forma que se pueda conocer con total seguridad el contexto para el error generado por la instrucción posterior. Observe que Err.Clear se utiliza para borrar las propiedades del objeto Err después de tratar el error.

Sub DemoInstrucOnError()

On Error GoTo ControlError	' Activa la rutina de control de errores.

Open "PRUEBA" For Output As #1	' Abre archivo para salida.

Kill "PRUEBA"	' Intenta eliminar el archivo

' abierto.

On Error Goto 0	' Desactiva la detección de errores.

On Error Resume Next	' Retarda detección de errores.

RefObjeto = GetObject("MiWord.Basic")	' Intenta

' iniciar un objeto que no existe, después

' comprueba errores de Automatización.

If Err.Number = 440 Or Err.Number = 432 Then

' Indica al usuario lo que ha ocurrido. Luego borra el objeto Err.

Msg = "¡Se produjo un error al intentar abrir el objeto Automatización!"

MsgBox Msg, , "Prueba de error retardada"

Err.Clear	' Borra campos del objeto Err

End If

Exit Sub	' Salir para evitar el controlador.

ControlError:	' Rutina de control de errores.

Select Case Err.Number	' Evalúa el número de error.

Case 55	' Error "Archivo ya está abierto".

Close #1	' Cierra el archivo abierto.

Case Else

' Puede incluir aquí otras situaciones...

End Select

Resume	' Continuar ejecución en la línea que

' causó el error.

End Sub


Resume (Ejemplo de la instrucción)
Ejemplo de la instrucción Resume

Este ejemplo utiliza la instrucción Resume para terminar el manejo de errores en un procedimiento y entonces continuar la ejecución desde la instrucción que provocó el error. Se genera el número de error 55 para ilustrar el uso de la instrucción Resume.

Sub DemoInstrucciónResume()

On Error GoTo ControlError	' Activa rutina de control de errores.

Open "PRUEBA" For Output As #1	' Abre el archivo de salida.

Kill "PRUEBA"	' Intenta eliminar el archivo abierto.

Exit Sub	' Salir de Sub para evitar controlador de errores.

ControlError:	' Rutina de control de errores.

Select Case Err.Number	' Evalúa el número de error.

Case 55	' Error "Archivo ya está abierto".

Close #1	' Cierra el archivo abierto.

Case Else

' Puede incluir aquí otras situaciones....

End Select

Resume	' Continua la ejecución en la misma

' línea que causó el error.

End Sub


Error (Función)

Devuelve el mensaje de error correspondiente a un número de error determinado.

Sintaxis

Error[(númeroerror)]

El argumento opcional númeroerror puede ser cualquier número de error válido. Si númeroerror es un número de error válido, pero no está definido, Error devolverá la cadena “Error definido por la aplicación o por el objeto". Si númeroerror no es válido, se producirá un error. Si se omite númeroerror, se devolverá el mensaje correspondiente al último error en tiempo de ejecución. Si no se ha producido ningún error en tiempo de ejecución o si númeroerror es 0, Error devolverá una cadena de longitud cero ("").

Comentarios

Examine los valores de las propiedades del objeto Err para identificar el último error en tiempo de ejecución. El valor devuelto por la función Error corresponde a la propiedad Description del objeto Err.


Error (Instrucción)

Simula la generación de un error.

Sintaxis

Error númeroerror

El argumento obligatorio númeroerror puede ser cualquier número de error válido.

Comentarios

La instrucción Error se mantiene por compatibilidad con versiones anteriores. En el código nuevo, especialmente al crear objetos, utilice el método Raise del objeto Err para generar errores en tiempo de ejecución.

Si númeroerror está definido, la instrucción Error llama al controlador de errores después de que las propiedades del objeto Err se establezcan con los siguiente valores predeterminados:

Propiedad	Valor
Number	Valor especificado como argumento en instrucción Error. Puede ser cualquier número de error válido.
Source	Nombre del proyecto actual de Visual Basic.
Description	Expresión de cadena correspondiente al valor devuelto por la función Error para el número especificado en Number, si tal cadena existe. Si no existe, Description contendrá una cadena de longitud cero ("").
HelpFile	Unidad, ruta de acceso y nombre completo del archivo de Ayuda de Visual Basic.
HelpContext	Identificador de contexto del archivo de Ayuda de Visual Basic para el error correspondiente a la propiedad Number.
LastDLLError	Cero.
Si no existe código de control de errores, o si no se encuentra activado, se creará y mostrará un mensaje de error a partir de las propiedades del objeto Err.

Nota   No todas las aplicaciones host de Visual Basic pueden crear objetos. Consulte la documentación de su aplicación host para comprobar si puede crear clases y objetos.


On Error (Instrucción)

Activa una rutina de control de erroresy especifica la ubicación de la misma en un procedimiento; también puede utilizarse para desactivar una rutina de control de errores.

Sintaxis

On Error GoTo línea

On Error Resume Next

On Error GoTo 0

La sintaxis de la instrucción On Error puede tener cualquiera de los formatos siguientes:

Instrucción	Descripción
On Error GoTo línea	Activa la rutina de control de errores que comienza en la línea especificada en el argumento necesario línea. El argumento línea es cualquier etiqueta de línea o número de línea. Si se produce un error en tiempo de ejecución, el control pasa a línea, activando el controlador de errores. La línea especificada en el argumento línea debe encontrarse en el mismo procedimiento que la instrucción On Error; o de lo contrario, se producirá un error en tiempo de compilación.
On Error Resume Next	Especifica que, en caso de que se produzca un error en tiempo de ejecución, el control pase a la instrucción que sigue inmediatamente a aquélla en la que se ha producido el error, donde continúa la ejecución. Se recomienda utilizar este formato en lugar de On Error GoTo cuando acceda a objetos.
On Error GoTo 0	Desactiva cualquier controlador de errores del procedimiento actual.
Comentarios

Si no utiliza una instrucción On Error, cualquier error en tiempo de ejecución que se produzca será fatal; es decir, aparecerá un mensaje de error y la ejecución se detendrá.

Un controlador de errores “activado" es aquél que se ha habilitado mediante una instrucción On Error y un controlador de errores “activo" es un controlador activado que se encuentra en el proceso de tratar un error. Si se produce un error mientras un controlador está activo (entre la aparición del error y una instrucción Resume, Exit Sub, Exit Function o Exit Property), el controlador de errores del procedimiento actual no puede tratarlo. El control vuelve al procedimiento que hace la llamada, y si éste cuenta con un controlador de errores activado, se utiliza ese controlador para tratar el error. Si también está activo el controlador de error del procedimiento que hace la llamada, el control vuelve hacia los procedimientos llamadores anteriores hasta llegar a un controlador de error activado, pero no activo. Si no se encuentra un controlador de errores activado e inactivo, el error es fatal en el punto en el que se produjo. Cada vez que el controlador de errores devuelve el control al procedimiento que hace la llamada, éste se convierte en el procedimiento actual. Una vez tratado un error con un controlador en cualquier procedimiento, la ejecución continúa en el procedimiento actual en el punto designado por la instrucción Resume.

Nota   Una rutina de control de errores no es un procedimiento Sub ni Function,. Es una sección de código marcada con una etiqueta o un número de línea.

Las rutinas de control de errores se basan en el valor de la propiedad Number del objeto Err para determinar la causa del error. Una rutina de control de errores debe comprobar y guardar los valores de las propiedades del objeto Err  antes de que pueda producirse otro error o antes de que se llame a un procedimiento que pueda causarlo. Los valores de las propiedades del objeto Err reflejan solamente el error más reciente. El mensaje de error asociado a Err.Number se encuentra en Err.Description.

On Error Resume Next hace que la ejecución continúe en la instrucción que sigue inmediatamente a la que causó el error en tiempo de ejecución, o en la que sigue inmediatamente a la última llamada desde el procedimiento que contiene la instrucción On Error Resume Next. Esta instrucción permite continuar la ejecución a pesar de que se haya producido un error en tiempo de ejecución.. Puede colocar la rutina de control de errores donde se produciría el error, en vez de transferir el control a otra posición dentro del procedimiento. La instrucción On Error Resume Next pasa a estar inactiva cuando se llama a otro procedimiento, por tanto usted debe ejecutar una instrucción On Error Resume Next en cada rutina que llamada si desea un control de errores integrado dentro de la propia rutina.

Nota   La construcción On Error Resume Next puede ser preferible a On Error GoTo cuando se traten errores generados durante el acceso a otros objetos. Comprobar Err después de cada interacción con un objeto elimina la ambigüedad en cuanto a qué objeto estaba accediendo el código cuando se produjo el error. De este modo puede saber qué objeto ha colocado el código de error en Err.Number, así como qué objeto generó originalmente el error (el objeto especificado en Err.Source).

On Error GoTo 0 desactiva el control de errores en el procedimiento actual. No especifica la línea 0 como el inicio del código de control de errores, ni siquiera cuando el procedimiento contiene una línea con el número 0. Sin una instrucción On Error GoTo 0, el control de errores se desactiva automáticamente al salir del procedimiento.

Para evitar que el código de control de errores se ejecute cuando no se ha producido ningún error, coloque una instrucción Exit Sub, Exit Function o Exit Property inmediatamente antes de la rutina de control de errores, como en el ejemplo siguiente:

Sub InicializarMatriz(Var1, Var2, Var3, Var4)

On Error GoTo ControlErrores

. . .

Exit Sub

ControlErrores:

. . .

Resume Next

End Sub

Aquí, el código de control de errores viene a continuación de la instrucción Exit Sub y precede a End Sub para separarlo del flujo normal del procedimiento. El código de control de errores puede situarse en cualquier lugar del procedimiento.

Los errores no interceptados en los objetos se devuelven a la aplicación que los controla cuando el objeto está trabajando como un archivo ejecutable. En el entorno de desarrollo, estos errores sólo se devuelven a la aplicación si se establecen las opciones adecuadas. Consulte la documentación de su aplicación host para una descripción de las opciones que deben establecerse durante la depuración, cómo establecerlas y si el host puede crear clases.

Si crea un objeto que accede a otros objetos, deberá intentar tratar los errores que tales objetos devuelvan sin procesar. Si no puede tratarlos,copie el código de error en Err.Number en uno de sus propios errores y luego páselos al elemento que llamó a su objeto. Debe especificar el error agregando su propio código de error a la constante vbObjectError. Por ejemplo, si su código de error es 1052, asígnelo de esta forma:

Err.Number = vbObjectError + 1052

Nota   Los errores del sistema al realizar llamadas a bibliotecas de vínculos dinámicos (DLL) no generan excepciones y no se pueden tratar con el control de errores de Visual Basic. Al llamar a funciones DLL, debe comprobar en los valores devueltos si la función ha tenido éxito o ha fracasado (según las especificaciones de la API) y, en el caso de un fallo, comprobar el valor de la propiedad LastDLLError del objeto Err.


Resume (Instrucción)

Continúa la ejecución cuando termina una rutina de gestión de errores.control de errores

Sintaxis

Resume [0]

Resume Next

Resume línea

La sintaxis de la instrucción Resume puede tener cualquiera de los formatos siguientes:

Instrucción	Descripción
Resume	Si el error se ha producido en el procedimiento que contiene el controlador de errores, la ejecución continúa en la instrucción que lo causó. Si el error se ha producido en un procedimiento llamado, la ejecución continúa en la instrucción control de errores desde la cual se llamó al procedimiento que contiene la rutina de gestión de errores.
Resume Next	Si el error se ha producido en el mismo procedimiento que contiene el controlador de errores, la ejecución continúa con la instrucción que sigue inmediatamente a la que causó el error. Si el error se ha producido en un procedimiento llamado, la ejecución continúa en la instrucción inmediatamente posterior a la instrucción desde la cual se llamó al procedimiento que contiene la rutina de gestión de errores.control de errores (o la instrucción On Error Resume Next)
Resume línea	La ejecución continúa en la línea especificada en el argumento obligatorio línea. El argumento línea es una etiqueta de línea o un número de línea y debe estar en el mismo procedimiento que el controlador de errores.
Comentarios

Si utiliza una instrucción Resume en otro sitio que no sea una rutina de control de errores, ocurre un error.


La cláusula #Else debe ir precedida de la correspondiente #If

#Else es una directiva de compilación condicional. Este error tiene la causa y la solución siguientes:

•	Se ha detectado una cláusula #Else no precedida de la directiva #If o #ElseIf.

Compruebe si se ha separado una directiva # anterior de esta #Else con una #End If. Observe también que sólo se permite una cláusula #Else en cada bloque #If, de modo que dos cláusulas #Else sucesivas provocarán este error.

Si desea más información, seleccione el elemento de que se trate y presione F1.


#Else If, #Else, o #End If deben ir precedidas de la correspondiente #If

#Else If, #Else, y #End If son directivas de compilación condicional. Este error tiene la causa y la solución siguientes:

•	Se ha detectado una directiva #Else If, #Else, o #End If no precedida de la cláusula #If correspondiente.

Compruebe si la cláusula #If se ha separado de la cláusula en cuestión con un bloque intermedio, o si #If tiene el signo #. Si todo es correcto, coloque una cláusula #If en la posición adecuada.

Si desea más información, seleccione el elemento de que se trate y presione F1.


#ElseIf debe ir precedida de la correspondiente #If o #ElseIf, y seguida de #ElseIf, #Else o #End If

#ElseIf es una directiva de compilación condicional. Este error tiene las causas y soluciones siguientes:

•	Se ha detectado una directiva #ElseIf no precedida de #If o #ElseIf.

Coloque una instrucción #If antes de #ElseIf, o elimine una posible #End If precedente colocado de forma incorrecta.

•	Se ha detectado una directiva #ElseIf precedida de #Else o #End If.

Termine de forma adecuada el bloque # precedente, o cambie la #Else anterior por #ElseIf.

Si desea más información, seleccione el elemento de que se trate y presione F1.


Un componente ActiveX compatible debe ser un ejecutable Visual Basic
Un componente ActiveX compatible debe ser un ejecutable Visual Basic o una DLL

Un componente ActiveX compatible es el que especifica como componente ActiveX compatible. Este error tiene la siguiente causa y solución:

•	Visual Basic intentó tener acceso a un objeto que especificó como un componente ActiveX compatible, pero el archivo especificado no era un archivo ejecutable o una biblioteca de vínculo dinámico (DLL) creada por Visual Basic.

Sólo son entradas válidas los archivos .exe y las DLLs creadas por Visual Basic en el campo Componente ActiveX compatible de cuadro de diálogo Propiedades de proyecto al que se tiene acceso mediante el menú Proyecto. Si es posible, cargue el proyecto en Visual Basic y elija el comando Crear archivo .exe a partir de proyecto del menú Archivo para crear un archivo ejecutable Visual Basic. Si el archivo ya es un archivo ejecutable no creado por Visual Basic o si el archivo no se puede cargar en Visual Basic, consulte la documentación del archivo para ver si se puede convertir a un archivo ejecutable Visual Basic o si el proveedor puede proporcionarle un archivo ejecutable creado por Visual Basic.

Si desea más información, seleccione el tema en cuestión y presione F1.


El complemento no puede hacer referencia al proyecto

Los proyectos son dinámicos, sin embargo los complementos son estáticos. Este error tiene la siguiente causa y solución:

•	Intentó crear un complemento desde un proyecto que hace referencia a otro proyecto.

Las semánticas de los proyectos pueden cambiar de forma que afecten a los proyectos a los que hacen referencia y los complementos. Por lo tanto, no puede crear un complemento desde un proyecto que hace referencia a proyectos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Un módulo no es un tipo válido

Un módulo estándar no representa una clase y no se puede duplicar su instancia en forma de variable. Las causas y posibles soluciones de este error son las siguientes:

•	Utilizó el nombre de un módulo estándar en una declaración Dim o Set.

Compruebe la ortografía del nombre del módulo y asegúrese de que corresponde a un formulario, formulario MDI, o módulo de clase.

Si desea más información, seleccione el tema en cuestión y presione F1.


El argumento en ParamArray no debe tener un nombre

Los argumentos En una llamada de procedimiento ParamArray deben estar en la posición correcta. Las causas y posibles soluciones de este error son las siguientes:

•	En una llamada de procedimiento aparece sintaxis de argumento con nombre.

La sintaxis de argumento con nombre no se puede utilizar con argumentos de posición como los de una ParamArray. Para proporcionar sólo algunos de los elementos de ParamArray, puede usar puntos y coma como indicadores de posición de los elementos que desee omitir. Por ejemplo, si en la siguiente llamada, los argumentos ParamArray, comienzan después de Arg2, los valores que se pasan corresponden al primer, tercer y sexto elemento de ParamArray:

MiSub Arg1, Arg2, 7,, 44,,,3

Nota   ParamArray siempre representa los últimos elementos en la lista de argumentos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha detectado un nombre ambiguo

El identificador entra en conflicto con otro identificador o necesita un calificador. Las causas y posibles soluciones de este error son las siguientes:

•	Es posible que más de un objeto en el mismo alcance posean elementos con el mismo nombre.

Califica el nombre del elemento incluyendo el nombre del objeto y un punto. Por ejemplo:

objeto.propiedad

Los identificadores a nivel de módulo y los identificadores de nivel de proyecto (nombres de módulos y nombres de proyectos a los que se hace referencia) pueden volver a usarse en un procedimiento (aunque hace que los programas sean más difíciles de mantener y de depurar). Sin embargo, si desea referirse a ambos elementos en el mismo procedimiento, se debe calificar el elemento que posee el alcance más amplio. Por ejemplo, si MiId al nivel de módulo MiMódulo y luego una variable de nivel de procedimiento se declara con el mismo nombre, las referencias a la variables a nivel de módulo deben calificarse de manera apropiada:

Dim MiId As String

Sub MiSub

MiMódulo.MiId = " Esta es la variable a nivel de módulo "

Dim MiId As String

MiId = "Está es la variable de nivel procedimiento"

Debug.Print MiId

Debug.Print MiMódulo.MiId

End Sub

•	Un identificador declarado a nivel de módulo puede entrar en conflicto con el nombre del procedimiento. Por ejemplo, este error ocurre si la variable MiId se declara en el nivel de módulo y luego se define un procedimiento con el mismo nombre:

Public MiId

Sub MiId

. . .

End Sub

En este caso necesita cambiar uno de los nombres ya que la modificación con un nombre de módulo común no resolverá la ambigüedad. Note que los nombres de los procedimientos son Public de manera predeterminada, pero los nombres de las variables son Private, a menos que se especifiquen como Public.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error AppleScript

Ocurrió un error durante el procesamiento del manuscrito. Las causas y posibles soluciones de este error son las siguientes:

•	El error puede estar relacionado con la aplicación de destino.

Compruebe si los identificadores del manuscrito coinciden con los de la aplicación.

•	El error puede estar relacionado con AppleScript.

Asegúrese de que la sintaxis empleada en el manuscrito es válida para AppleScript.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error definido por la aplicación o definido por el objeto

Este mensaje se muestra cuando se genera, con el método Raise o con la instrucción Error, un error que no se corresponde con ninguno de los definidos por Visual Basic para aplicaciones. También es el que devuelve la función Error para los argumentos que no se corresponden con errores definidos por Visual Basic para aplicaciones. Por consiguiente, puede ser un error definido por usted, o definido por un objeto (incluyendo aplicaciones Host como Excel, Visual Basic, etc.). Por ejemplo, los formularios de Visual Basic generan muchos errores relacionados con formularios que no se pueden generar desde código simplemente especificando un número como argumento para el método Raise o para la instrucción Error Este mensaje tiene las siguientes causas y soluciones:

•	La aplicación ejecutó una instrucción Err.Raise n o Error Error n, pero el número n no está definido por Visual Basic para aplicaciones.

Si esta era la acción deseada, tiene que utilizar Err.Raise y especificar argumentos adicionales si desea que un usuario final comprenda la naturaleza del error. Por ejemplo, puede incluir una cadena de descripción, así como información de origen y de ayuda. Si intenta volver a generar un error detectado, este enfoque funcionará si no ejecuta Err.Clear antes de volver a generar el error. Si ejecuta Err.Clear primero, deberá rellenar los argumentos adicionales para el método Raise. Examine el contexto en el que ocurrió el error y asegúrese de que está regenerando este mismo error.

•	Puede ser que, al acceder a los objetos de otras aplicaciones, se propagó a su programa un error que no se pudo asignar a un error de Visual Basic.

Compruebe la documentación de los objetos a los que haya accedido. La propiedad Source del objeto Err debe contener la ID programática de la aplicación u objeto que generó el error. Para comprender con mayor precisión el contexto de un error devuelto por un objeto, quizás desee utilizar la construcción On Error Resume Next en el código que accede a los objetos, en lugar de la sintaxis On Error GoTo línea.

Nota Anteriormente, los programadores han utilizado con frecuencia un bucle para imprimir una lista de todas las cadenas de mensajes de error detectables. Normalmente, esto se hacía con un código parecido al siguiente:

For índice = 1 to 500

Debug.Print Error$(índice)

Next índice

Este tipo de código todavía enumera todos los mensajes de error de Visual Basic para aplicaciones, pero muestra "Error definido por la aplicación o definido por el objeto" para los errores definidos por el host, como por ejemplo los de Visual Basic relativos a formularios, controles, etc. Muchos de ellos son errores en tiempo de ejecución detectables. Puede utilizar el cuadro de diálogo Buscar de la Ayuda para localizar la lista de errores detectables específicos para la aplicación host. Presione el botón Buscar, escriba Detectable en el primer cuadro de texto, y presione Mostar temas. Seleccione Detectables, errores en el cuadro de lista inferior y presione el botón Ir A.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se requiere un argumento para Property Let o Property Set
Se requiere un argumento para la Property Let o para la Property Set

El propósito de los procedimientos Property Let y Property Set es dar a la propiedad un nuevo valor. Las causas y posibles soluciones de este error son las siguientes:

•	Al establecer la propiedad, el valor no aparece en el lugar adecuado.

Incluya el valor para el cual hay que establecer la propiedad en la parte derecha de la expresión que establece el valor de dicha propiedad.

•	En la definición de procedimiento, el parámetro definido para recibir el valor transferido en la parte derecha de la expresión no está o está mal colocado.

Especifique un parámetro para la lista de argumento de valor de la definición del procedimiento. Si el procedimiento abarca dos o más argumentos, el parámetro de valor de propiedad debe aparecer el último de la lista.

Si desea más información, seleccione el tema en cuestión y presione F1.


La matriz ya tiene dimensiones
La dimensión de la matriz ya ha sido establecida

Una matriz estática solamente se puede dimensionar una vez. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó cambiar las dimensiones de una matriz estática con una instrucción ReDim sólo las matrices dinámicas pueden ser redimensionadas.

Elimine el redimensionamiento o utilice una matriz dinámica. Para definir una matriz dinámica, use una instrucción Dim, Public, Private, o Static con paréntesis. Por ejemplo:

DimMiMatriz()

En un procedimiento, puede definir una matriz dinámica con la instrucción ReDim o Static utilizando una variable para el número de elementos:

ReDimMiMatriz(n)

•	Una instrucción Option Base ocurre después de establecer las dimensiones de la matriz.

Asegúrese de que la instrucción Option está delante de todas las declaraciones de matriz.

Si desea más información, seleccione el tema en cuestión y presione F1.


Una matriz como argumento debe ser ByRef
Se debe usar ByRef para el parámetro matricial

Las matrices declaradas con Dim, ReDim o Static no se pueden transferir por ByVal. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó transferir un matriz completa por ByVal.

Un elemento individual de una matriz puede ser pasado por ByVal (por valor), ), pero una matriz entera debe ser pasada por ByRef (por referencia). Note que ByRef es la opción predeterminada. Si dispone de una matriz que desea pasar por ByVal, y desea hacerlo para impedir que los cambios en los elementos de la matriz se vuelvan a propagar al usuario que llama, puede pasar el argumento argumento de la matriz en su propio conjunto de paréntesis, o bien puede incluirlo en una Variant y a continuación pasar la Variant al parámetro ByVal, de la siguiente forma:

Dim MiVar As Variant

MiVar = MatrizAnterior()

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha alcanzado el principio del ámbito de búsqueda; ¿desea continuar desde el final?
Se ha llegado al inicio del alcance de búsqueda. ¿Desea continuar empezando por el final?

La búsqueda no ha tenido éxito. Las causas y posibles soluciones de este mensaje son las siguientes:

•	La búsqueda hacia arriba ha llegado al inicio del alcance especificado.

Puede elegir continuar la búsqueda desde el final del alcance de búsqueda o cancelar y cambiar el alcance de la misma.


Bloque If sin End If
Se ha encontrado un bloque If sin End If

Ocurrió un error debido a una instrucción incompleta. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado una instrucción If sin la correspondiente instrucción End If.

Se ha utilizado una instrucción sin la correspondiente instrucción End If. Para las instrucciones If...End If anidadas, asegúrese de que existe una estructura If...End If que coincida correctamente dentro de la estructura externa If...End If.

Si desea más información, seleccione el tema en cuestión y presione F1.


No está permitido un punto de ruptura en esta línea
No se permite un punto de interrupción en esta línea

Solamente se permite colocar puntos de interrupción en determinadas partes de la instrucción. Las causas de este error son las siguientes:

•	Intentó colocar un punto de interrupción en una línea que no lo acepta, por ejemplo, en una de las siguientes:

•	Una línea que consta únicamente de comentarios.

•	Una línea que consta únicamente de etiquetas de línea.

•	Una línea que sólo contiene declaraciones (Const, Dim, Static, Type, etc.).

•	Cualquier línea de un módulo oculto.

•	Cualquier línea del panel Inmediato.

Si desea más información, seleccione el tema en cuestión y presione F1.


El tipo de argumento de ByRef no coincide
El tipo de parámetro ByRef no coincide

Cuando un procedimiento espera que un argumento sea pasado por referencia) (ByRef, la opción predeterminada), el argumento pasado debe tener el tipo de dato esperado en el procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	Transfirió un argumento de un tipo que no se puede forzar al tipo esperado.

Por ejemplo, si intenta pasar una variable de tipo Integer cuando se espera una de tipo Long, ocurrirá este error. Si se desea forzar la aceptación del argumento, aún si causa la pérdida de información, el argumento se puede pasar dentro de sus propios paréntesis. Por ejemplo, para pasar el argumento tipo Variant MiVar a un procedimiento que espera un argumento entero, la llamada al procedimiento puede escribirse como sigue:

Dim MiVar

MiVar = 3.1415

Call AlgunaSub((MiVar))

Sub AlgunaSub (MiNúm As Integer)

MiNúm = MíNúm + MiNúm

End Sub

Al colocar el argumento dentro de sus propios paréntesis, se fuerza su evaluación como una expresión. Durante esta evaluación, se redondea la porción fraccionaria del número (no se trunca) para hacerlo coincidir con el tipo de argumento esperado. El resultado de la evaluación se ubica en un lugar temporal y el procedimiento recibe una referencia a este lugar temporal. Así, el original MiVar retiene su valor.

Nota No se puede asignar una matriz de longitud fija o un tipo definido por el usuario a una variable, tipo Variant. Esto no siempre es obvio. Por ejemplo, el siguiente código declara dos variables, la primera, MiVar, es una Variant; la segunda, OtraVar, es un Integer.

Dim MiVar, OtraVar As Integer

Si desea más información, seleccione el tema en cuestión y presione F1.


La convención de llamada no está admitida en Visual Basic
Convención de llamada no admitida por Visual Basic

Visual Basic no admite todas las convenciones de llamada de procedimiento, que especifican el orden en que se deben pasar los argumentos y la forma en que se deben especificar los tipos de argumentos. Las causas y posibles soluciones de este error son las siguientes:

•	Llamó al procedimiento empleando una convención de llamada no admitida por Visual Basic. Por ejemplo, Visual Basic no admite la convención de llamada Pascal en una versión de 16 bits del entorno Microsoft Windows.

Si la convención de llamada no es compatible con Visual Basic, no podrá llamar al procedimiento desde Visual Basic. Consulte en la documentación del objeto si se proporciona alguna alternativa.

Si desea más información, seleccione el tema en cuestión y presione F1.


No puede agregar una referencia al archivo especificado

Visual Basic no puede acceder a todas las bibliotecas de objecto o bibliotecas de tipo. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar el cuadro de diálogo Add References para agregar a una biblioteca de tipos o de objetos una referencia que Visual Basic no puede utilizar.

Compruebe en la documentación del objeto representado por la biblioteca si está disponible en algún otro formato que Visual Basic pueda utilizar.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible asignar o forzar una matriz de longitud fija o un tipo definido por el usuario a Variant
No se puede asignar una matriz de cadena de longitud fija o un tipo definido por el usuario a Variant

Una Variant solamente acepta asignaciones de datos que disponen de un VarType. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó asignar una matriz de cadenas de longitud fija a una variable Variant Cuando se asigna una sola cadena de longitud fija a una Variant, se fuerza a una cadena de longitud variable, pero esto no se puede realizar en una matriz de cadenas de longitud fija.

Si debe tener la matriz en una Variant, utilice un bucle para asignar los elementos individuales de la matriz a los elementos de una matriz temporal de cadenas de longitud variable. A continuación podrá asignar la matriz a la Variant, y utilizar Erase para desasignar la matriz temporal. No obstante, observe que no puede desasignar una matriz de tamaño fijo con Erase.

•	Intentó pasar una cadena de longitud fija o un tipo definido por el usuario a la función VarType o TypeName.

Un argumento para la función VarType o TypeName debe ser un tipo Variant válido.

•	Intentó asignar un tipo definido por el usuario a una variable Variant.

Aunque no puede asignar directamente toda una variable de tipo definido por el usuario a una Variant, sí puede utilizar la función Array para asignar cada uno de los elementos de una variable de tipo definido por el usuario a una Variant. Esto produciría una Variant que contiene una matriz de variantes. El VarType de cada elemento de esta matriz de variantes se correspondería con el tipo original de cada elemento del tipo definido por el usuario.

•	Intentó pasar una matriz de cadenas de longitud fija o de tipos definidos por el usuario como argumento de una llamada de procedimiento que requiere un argumento Variant. Observe que siempre que un procedimiento se vincula tardíamente (es decir, cuando la llamada se debe generar en tiempo de ejecución), todos los argumentos deben transferirse como tipos Variant. Por ejemplo, el siguiente código produce este error:

Dim MiForm As Object	' Porque MiFormulario es Object, la vinculación es tardía.

Set MiForm = New Form1

Dim MatrizCadena(10) As String * 12

' La siguiente línea genera el error.

MiForm.MiProc MatrizCadena

Para la matriz de cadena, utilice un bucle para asignar cada uno de los miembros de la matriz a una matriz temporal de cadenas de longitud variable. A continuación podrá asignar esta matriz a una Variant para pasarla al procedimiento. Para una matriz de tipos definidos por el usuario, puede utilizar la función Array para asignar cada elemento de una variable de tipo definido por el usuario a una . Esto produce una Variant que contiene una matriz de variantes. El VarType de cada elemento de esta matriz de variantes se corresponde con el tipo original de cada elemento del tipo definido por el usuario.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible asignar a una matriz
No se puede asignar a una matriz

Debe asignar individualmente el valor de cada elemento de una matriz. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó inadvertidamente asignar un solo valor a una variable de matriz sin especificar a qué elemento se debe asignar dicho valor.

Para asignarlo a un elemento de matriz, debe especificar el elemento en un subíndice. Por ejemplo, si MiMatriz es la totalidad de una matriz, la expresión expresión MiMatriz = 5 no es válida, pero la siguiente expresión sí lo es:

MiMatriz(UBound(MiMatriz)) = 5

•	Intentó asignar una matriz completa a otra matriz. Por ejemplo, si Matriz1 es una matriz y Matriz2 es otra matriz, las dos asignaciones siguientes son no válidas:

Matriz1 = Matriz2	' Asignación no válida.

Matriz1() = Matriz2()	' Asignación no válida.

Para asignar una matriz a otra, debe asignar individualmente cada uno de los elementos. Por ejemplo:

For contador = LBound(Matriz2) to UBound(Matriz2)

Matriz1(contador) = Matriz2(contador)

Next contador

Observe que puede incluir toda una matriz en una Variant, lo que da como resultado una sola variable de tipo variant que contiene toda la matriz:

Dim MiMatriz As Variant

MiVar = Matriz2()

A continuación hará referencia a los elementos de la matriz en la de tipo variant con la misma notación de subíndice que para una matriz normal, por ejemplo:

MiVar(3) = MiVar(1) + MiVar(5)

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible cambiar los tipos de datos de los elementos de una matriz
No se puede cambiar el tipo de datos de los elementos matriciales

ReDim solamente se puede usar para cambiar el número de elementos de una matriz. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó volver a declarar el tipo de datos de una matriz utilizando ReDim.

Declare una nueva matriz del tipo deseado, a continuación utilice las funciones de conversión para asignar cada elemento de la matriz anterior al elemento correspondiente de la nueva matriz.

También puede incluir la matriz en una variable Variant. Esto se puede conseguir con una sencilla asignación:

Dim MiVar As Variant

MiVar = MiMatrizEntera()

De esta forma se crea una Variant que contiene una matriz etiquetada como el tipo de la matriz original. A continuación puede asignar variables de cualquier VarType válido a los elementos de la matriz dentro de un tipo variant.

Si desea más información, seleccione el tema en cuestión y presione F1.


No puede definir un tipo definido por el usuario Public dentro de una clase

Un tipo definido por el usuario que aparece dentro de un módulo de objeto no puede ser Public. Las causas y posibles soluciones de este error son las siguientes:

•	En un formulario, un formulario MDI o un módulo de clase, intentó definir un tipo definido por el usuario Public.

Mueva la definición de tipo definido por el usuario a un módulo standard, y a continuación declare variables de ese tipo en el módulo de clase o en otros módulos, según lo necesite. Si solamente desea que el tipo esté disponible en el módulo donde aparece, puede incluir su definición Type...End Type dentro del formulario, formulario MDI o módulo de clase deseado colocando delante de su definición la palabra clave. Private

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible mostrar procedimientos ocultos
No se puede mostrar el procedimiento oculto

Todo lo que hay dentro de un módulo oculto está oculto. Las causas y posibles soluciones de este error son las siguientes:

•	Intento ver un procedimiento en un módulo oculto.

Para ver el procedimiento necesita mostrar el módulo. Para ver una línea que generó un error en un procedimiento oculto, ejecute el código nuevamente (después de mostrar el módulo) para ver el error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible editar el módulo
Este módulo no se puede editar

Los módulos marcados como protegidos se pueden ver, pero no editar. Las causas y posibles soluciones de este error son las siguientes:

•	Intente editar el módulo protegido.

Elimine le protección del módulo antes de intentar editarlo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible entrar en tiempo de interrupción en este momento

El modo de interrupción es el estado en el que un programa todavía se está ejecutando, pero su actividad está suspendida. Este error tiene las causas y soluciones siguientes:

•	Intentó entrar en modo de interrupción, por ejemplo, presionando CTRL+INTER, presionando el botón Interrumpir en la barra de herramientas Estándar o en la barra de herramientas Depuración o ejecutando un punto de interrupción en el código que está en ejecución.

Se realizó un cambio al proyecto utilizando el modelo de objeto de extensibilidad (complemento). Esto evita que se suspenda la ejecución de un programa. Puede continuar la ejecución o finalizarla, pero no puede suspenderla.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible ejecutar código en tiempo de diseño
No puede ejecutar instrucciones inmediatas en modo de diseño

El tiempo de diseño es cualquier periodo en el cual el código no se está ejecutando, o está suspendido y esperando su reanudación. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó ejecutar una instrucción en el panel Inmediato, pero el código no está en ningún modo de ejecución.

Inicie la ejecución del código y a continuación interrumpa la ejecución del programa. Ahora podrá ejecutar el código en el panel Inmediato.

Para obtener información adicional, sitúe el cursor en el panel Inmediato y presione F1.


Imposible encontrar el proyecto o la biblioteca
No se puede encontrar el proyecto o la biblioteca

No puede ejecutar el código hasta que se resuelvan todas las referencias que faltan. Las causas y posibles soluciones de este error son las siguientes:

•	No se encontró un proyecto referido , o no se encontró una biblioteca de objetos referida correspondiente al idioma del proyecto.

A las referencias no resueltas se les agrega el prefijo "AUSENTE:" en el cuadro de diálogo Referencias. Seleccione la referencia ausente para mostrar el nombre de la ruta de acceso y el lenguaje del proyecto o biblioteca faltante. Siga los siguientes pasos para resolver la referencia o referencias:

Para resolver referencias

1	Muestre el cuadro de diálogo Referencias.

2	Seleccione la referencia que falta.

3	Inicie el Examinador de objetos.

4	Use el cuadro de diálogo Examinar para encontrar la referencia que falta.

5	Haga clic en el botón Aceptar.

6	Repita todos los pasos anteriores hasta resolver todas las referencias faltantes.

Una vez examinado un elemento faltante, el prefijo "AUSENTE:" se elimina, para indicar que el vínculo ha sido restablecido. Si el nombre de archivo de un proyecto al cual se hace referencia ha cambiado, se agrega una nueva referencia y la referencia antigua se elimina.

Para eliminar las referencias innecesarias, simplemente desactive la casilla de verificación que está al lado de la referencia que no necesita. Note que las referencias a la biblioteca de objetos de Visual Basic (VBAXX.OLB) y a la biblioteca de objetos de la aplicación-principal no pueden ser eliminadas.

Las aplicaciones pueden aceptar versiones de las bibliotecas de objetos en diferentes lenguajes. Para averiguar la versión de lenguaje requerida, haga clic en la referencia y verifique el lenguaje indicado al fondo del cuadro de diálogo.

Las bibliotecas de objetos pueden ser archivos independientes con la extensión .OLB o se pueden integrar en una biblioteca de vínculo dinámico (DLL) Existen diferentes versiones de las bibliotecas de objetos para cada plataforma. Por lo tanto, cuando se trasladan proyectos de una plataforma a otra (por ejemplo de Macintosh a Windows), la versión en el lenguaje correcto de la biblioteca a la que se hace referencia (para esa plataforma) debe estar disponible en la configuración regional especificada en la documentación de la aplicación host.

Los nombres de archivo de las bibliotecas de objetos se construyen generalmente como sigue:

•	Windows (versión 3.1 y posterior):   Código Aplicación + Código Lenguaje + [Versión].OLB. Por ejemplo:

VAES2.OLB sería la biblioteca de objetos de Visual Basic en Español, Versión 2.

XLES50.OLB sería la biblioteca de objetos de Excel 5.0 en Español.

•	Macintosh:   Nombre Aplicación Código Lenguaje[Versión] OLB. Por ejemplo:

VA ES 2 OLB sería la biblioteca de objetos de Visual Basic en Español, Versión 2.

MS Excel ES 50 OLB sería la biblioteca de objetos de Excel 5.0 en Español..

Si no puede encontrar una biblioteca de objetos o un proyecto faltante en su sistema, contacte al autor del proyecto de referencia. Si la biblioteca faltante es la biblioteca de objetos de una aplicación  de Microsoft, puede obtenerla de la siguiente manera:

•	Si tiene acceso al servicio de apoyo técnico de Microsoft, por vía electrónica, consulte la sección de apoyo técnico de la Ayuda. Bajo servicios electrónicos, encontrará instrucciones para usar el servicio más apropiado.

•	Si no tiene acceso al servicio de apoyo técnico de Microsoft por vía electrónica, las bibliotecas de objetos de Microsoft están disponibles previa petición en forma de nota de aplicación de Microsoft. La información sobre la forma de ponerse en contacto con la organización de soporte a productos Microsoft de su país también está disponible en la sección de soporte técnico de este archivo de Ayuda

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible usar Get o Put para una variable de referencia a un objeto o una variable de tipo definido por el usuario que contien
No se puede ejecutar Get o Put en una variable de referencia de objeto o una variable de tipo definido por el usuario que contiene una referencia de objeto

Una referencia de objeto es temporal y puede transformarse fácilmente en no válida entre el cierre y la apertura de un archivo. Las causas y posibles soluciones de este error son las siguientes:

•	La variable de la instrucción Get o Put contiene, o está declarada para contener, una referencia a un objeto.

Si la variable es una referencia de objeto, no puede utilizarla con las instrucciones Get y Put. Si deseaba incluir el valor de todas (o algunas) las propiedades del objeto en el archivo, debe especificar individualmente cada una de las propiedades.

•	La variable de tipo definido por el usuario de la instrucción Get o Put contiene un elemento que es una referencia a objeto.

Si la instrucción Type de la variable contiene un elemento que representa un objeto (por ejemplo, está definido en un módulo de clase, tiene el tipo de datos Object, es un formulario o un control, etc.) elimínelo de la definición, o bien defina un nuevo tipo para utilizarlo con instrucciones Get y Put que no tengan elementos de tipo Object en su definición.

Si, en el tipo definido por el usuario, tiene elementos con el tipo Variant, asegúrese de que no está asignando a dicho elemento ninguna referencia a objeto. Una puede aceptar este tipo de asignación, pero producirá este error si su tipo definido por el usuario se utiliza en Get o Put.

Observe que puede utilizar Input #, Line Input #, Print #, o Write # para escribir la propiedad predeterminada de un objeto en el disco.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible cargar el módulo; el formato no es válido
No se puede cargar el módulo; formato no válido

Un módulo debe estar en formato de texto. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó cargar un archivo de formato binario como un módulo.

Algunas versiones de Visual Basic le permiten guardar los códigos en formatos binarios y de texto. Si es posible, vuelva a cargar el archivo en la aplicación en la que ha sido guardado y guárdelo como texto.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible realizar una asignación a una propiedad de sólo lectura
Imposible hacer una asignación a una propiedad de sólo lectura

Algunas propiedades no puede aceptar asignaciones. Este error tiene las causas y soluciones siguientes:

•	Intentó asignar un valor a una propiedad que no puede aceptar asignaciones.

En algunos casos, una propiedad puede aceptar una asignación sólo en momentos específicos. Por ejemplo, una propiedad podría aceptar asignaciones en tiempo de diseño, pero no en tiempo de ejecución. Consulte la Ayuda de la propiedad específica para ver cuando puede aceptar asignaciones, si puede.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible ejecutar la operación solicitada porque el módulo está oculto

Este error está relacionado con el modelo de objeto de extensibilidad de Visual Basic (complemento). Este error tiene las causas y soluciones siguientes:

•	El módulo está oculto. No puede modificar un módulo oculto ni obtener información de un módulo oculto.

Muestre el módulo e intente de nuevo la operación.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible colocar un punto de ruptura condicional en una matriz
Imposible colocar un punto de interrupción condicional en una matriz

Una matriz no tiene valores sencillos asociados. Este error tiene las causas y soluciones siguientes:

•	Intentó establecer un punto de interrupción condicional (a veces llamado un punto de inspección) que podría suspender la ejecución del programa cuando cambie el valor de una matriz completa.

Establezca el punto de interrupción condicional en un elemento específico de la matriz.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible grabar dentro de un módulo en ejecución
No se puede grabar en un módulo en ejecución

Debe terminar la ejecución para empezar a grabar. Las causas y posibles soluciones de este error son las siguientes:

•	No se puede grabar una macro mientras se ejecuta el código de un módulo.

Detenga la ejecución o presione CTRL+INTER, y active la grabación.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible quitar la referencia predeterminada

Siempre existe una referencia predeterminada. Este error tiene las causas y soluciones siguientes:

•	Intentó quitar una referencia que debe estar siempre disponible, por ejemplo, una referencia a una biblioteca de tipos o a una biblioteca de objetos.

No intente quitar la referencia.

Si desea más información, seleccione el tema en cuestión y presione F1.


Case Else fuera de Select Case

Un Case Else sólo puede ocurrir entre instrucciones Select Case y End Select. Las causas y posibles soluciones de este error son las siguientes:

•	Colocó una instrucción Case Else fuera del bloque Select Case...End Select.

Mueva Case Else al interior del bloque Select Case...End Select.

Si desea más información, seleccione el tema en cuestión y presione F1.


Case sin Select Case

Una instrucción Case ha sido utilizado sin el correspondiente la instrucción Select Case...End Select Block. Las causas y posibles soluciones de este error son los siguientes:

•	Puede que una instrucción Case no tenga una instrucción previa Select Case coincidente.

Verifique otras estructuras de control dentro de la estructura Select Case...Case y verifique que coincidan correctamente. Por ejemplo, un If sin el correspondiente End If dentro de la estructura Select Case...End Select generará este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Existen dependencias circulares entre módulos
Dependencias circulares entre módulos

No se permiten referencias circulares entre módulos, constantes y tipos definidos por el usuarios. Las causas y posibles soluciones de este error son las siguientes:

•	Una constante o un tipo de datos definido por el usuario hace referencia a una constante o a un tipo de datos definido por el usuario en un segundo módulo, el cual a su vez, hace referencia a otra constante u a otro tipo de datos definido por el usuario en el primer módulo.

Elimine las referencias dependientes.

Si desea más información, seleccione el tema en cuestión y presione F1.


La clase debe implementar todos los procedimientos en la interfaz

Una interfaz es una colección de prototipos de procedimientos no implementados. Este error tiene las causas y soluciones siguientes:

•	Especificó una interfaz en una instrucción Implements, pero no agregó código para todos los procedimientos de la interfaz.

Debe escribir código para cada procedimiento especificado en la interfaz. No es adecuado un procedimiento vacío. Puede evitar este error colocando un comentario en un procedimiento; el procedimiento debe implementar el comportamiento solicitado.

Si desea más información, seleccione el tema en cuestión y presione F1.


La ejecución del código se ha interrumpido
La ejecución del código ha sido interrumpida

La ejecución del código se puede suspender cuando sea necesario. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha encontrado una combinación de teclas CTRL+INTER (Microsoft Windows), ESC (Microsoft Excel) o COMANDO+PUNTO (Macintosh).

En el cuadro de diálogo, elija Depurar o bien entre en el modo interrumpir, elija Continuar para reanudar, o Fin para detener la ejecución.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de compilación en el módulo oculto: <nombre módulo>
Error de compilación en un módulo oculto: <nombre módulo>

Los módulos protegidos no se pueden presentar. Las causas y posibles soluciones de este error son las siguientes:

•	Existe un error de compilación en el código del módulo especificado pero no se puede mostrar porque el proyecto está protegido.

Elimine la protección y ejecute nuevamente el código para ver el error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Es necesaria una expresión de constante
Se requiere una expresión constante

Una constante debe ser inicializada. Las causas y posibles soluciones de este error son las siguientes:

•	No se puede inicializar una constante con una variable, una instancia de un tipo de datos definido por el usuario, un objeto o el valor devuelto por una llamada a una función.

Puede inicializar una constante con literales, constantes previamente declaradas o literales y constantes unidas por operadores (excepto el operador lógico Is).

•	Intentó declarar una matriz utilizando una variable para especificar el número de elementos.

Para declarar una matriz dinámica dentro de un procedimiento, declare la matriz con ReDim y especifique el número de elementos con una variable.

Si desea más información, seleccione el tema en cuestión y presione F1.


Constantes, cadenas de longitud fija, matrices e instrucciones Declare no admitidas como miembros Public de módulo de clase

No todas las variables de un módulo objeto se pueden declarar Public. ; sin embargo, los procedimientos son Public de manera predeterminada, y los procedimientos Property se pueden utilizar para simular variables de manera sintáctica. Las causas y posibles soluciones de este error son las siguientes:

•	Declaró una constante Public en un módulo de clase.

Aunque no puede declarar una constante de módulo de clase como Public, sí puede crear un procedimiento Property Get con el mismo nombre. Si no crea un procedimiento Property Let o Property Set con este nombre, en realidad está creando una propiedad de sólo lectura que se puede utilizar de la misma forma que una constante.

•	Declaró una cadena de longitud fina Public en un módulo de clase

Puede simular cadenas de longitud fija con una colección de procedimientos Property que truncan los datos de cadena cuando superan la longitud permitida o que notifican al usuario que se ha superado esta longitud.

•	Declaró una matriz Public en un módulo de clase.

Aunque un procedimiento no puede devolver una matriz, sí puede devolver una Variant que contiene una matriz. Para simular una matriz Public en un módulo de clase, utilice una colección de procedimientos que acepten y devuelvan una Variant que contenga una matriz.

•	Incluyó una instrucción Declare en un módulo de clase.

Las instrucciones Declare son Public de forma implícita. Agregue la palabra clave Private delante de Declare.

Si desea más información, seleccione el tema en cuestión y presione F1.


El módulo actual no admite el método Print
El módulo actual no soporta el método Print

No todos los métodos y propiedades son adecuados en todos los módulos. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar el método Print en un objeto que no puede presentar nada. Por ejemplo, no puede emplear el método sin ninguna calificación en un módulo standard.

Elimine la referencia al método Print, o califíquelo con un objeto adecuado. Por ejemplo, modifíquelo con el objeto Debug para presentar sus argumentos en el panel Inmediato durante la depuración.

•	Intentó utilizar los métodos Line, Circle, PSet, o Scale en un objeto que no puede aceptarlos. Por ejemplo, no pueden aparecer sin calificar en un módulo estándar o en un módulo de clase de Automatización OLE.

Si desea más información, seleccione el tema en cuestión y presione F1.


Referencia circular en proyectos no permitida
No se permiten referencias circulares a proyectos

Las referencias circulares a proyectos no están permitidas. Por ejemplo, si MiProy hace referencia a SuProy, luego SuProy  (o un proyecto que hace referencia a SuProy) no puede hacer referencia MiProy. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó agregar una referencia a un proyecto que ya forma parte del proyecto.

Elimine las referencias circulares.

Si desea más información, seleccione el tema en cuestión y presione F1.


Las definiciones de procedimientos de propiedad para la misma propiedad no son consistentes o contienen parámetros opcionales o una ParamArray

Los parámetros de los procedimientos Property Get, Property Let y Property Set para la misma propiedad deben coincidir exactamente, excepto que la Property Let tiene un parámetro adicional, cuyo tipo debe coincidir con el tipo devuelto del correspondiente Property Get y el Property Set tiene un parámetro más que el correspondiente Property Get, cuyo tipo es Variant, Object, un nombre de clase  o un tipo de biblioteca de objetos especificada en una biblioteca de objetos. Las causas y posibles soluciones de este error son las siguientes:

•	El número de parámetros del procedimiento Property Get no es uno menos que el número de parámetros del procedimiento Property Let o Property Set coincidente.

Agregue un parámetro a Property Let o Property Set o quite un parámetro de Property Get.

•	Los tipos de parámetros de Property Get deben coincidir exactamente con los parámetros correspondientes de Property Let o Property Set, excepto para el parámetro Property Set adicional.

Modifique las declaraciones de parámetros en las definiciones de procedimiento correspondientes para que coincidan adecuadamente.

•	El tipo de parámetro del procedimiento Property Let debe coincidir con el tipo devuelto del procedimiento Property Get correspondiente.

Modifique o la declaración de parámetro adicional en Property Let o el valor devuelto del Property Get correspondiente para que coincidan adecuadamente.

•	El tipo de parámetro del parámetro adicional del Property Set puede ser diferente del tipo devuelto del Property Get correspondiente, pero debe ser un tipo Variant, Object, nombre de clase  o un tipo de biblioteca de objetos válida.

Asegúrese de que el parámetro adicional del procedimiento Property Set es un tipo Variant, Object, nombre de clase o un tipo de biblioteca de objetos.

•	Definió un procedimiento Property con un parámetro Optional o ParamArray.

Los parámetros ParamArray y Optional no se permiten en los procedimientos Property. Vuelva a definir los procedimientos sin utilizar estas palabras clave.

Si desea más información, seleccione el tema en cuestión y presione F1.


La instrucción Deftype debe preceder a las declaraciones
Las declaraciones deben estar precedidas por instrucciones Deftipo

Instrucciones como Deftipo incluyen DefInt, DefDbl, DefCur y otros. Las causas y posibles soluciones de este error son las siguientes:

•	Una declaración de variable va delante de una instrucción Deftipo a nivel de módulo.

Mueva la instrucción Deftipo para que preceda a todas las declaraciones de variable.

•	Una instrucción Deftipo aparece en un procedimiento.

Mueva la instrucción Deftipo al nivel de módulo, delante de todas las declaraciones de variable.

Si desea más información, seleccione el tema en cuestión y presione F1.


Etiqueta de destino demasiado lejana; bucle, Select Case o bloque If demasiado grande
La etiqueta de destino está demasiado lejos; el bucle Select Case o el bloque If es demasiado grande

Los procedimientos pueden tener un tamaño máximo de 64K desde el principio hasta el final, pero, puesto que puede haber derivaciones hacia delante o hacia atrás dentro de un procedimiento, tales derivaciones están limitadas a 32.767 bytes en cada dirección. Las causas y posibles soluciones de este error son las siguientes:

•	Existe una instrucción de derivación (GoTo, GoSub) cuya etiqueta de destino está a más de 32.767 bytes de distancia de la instrucción de derivación de origen.

Acerque la etiqueta, o reduzca el tamaño del procedimiento.

•	Existe una estructura de bucle muy grande que ocupa más de 32K de memoria desde el principio al fin.

Acerque la etiqueta, o reduzca el tamaño del procedimiento.

•	Existe una estructura de bloque If muy grande con una cláusula Then o Else que ocupa más de 32K de memoria desde el principio al fin.

Reduzca el tamaño de la parte de la estructura que no cumple los requisitos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Do sin Loop

Cada Do debe disponer de un Loop de terminación. Las causas y posibles soluciones de este error son las siguientes:

•	Utilizó una instrucción Do sin ninguna instrucción Loop de terminación

Verifique que otras estructuras de control dentro de la estructura Do...Loop coincidan correctamente. Por ejemplo, un bloque If sin un End If que coincida dentro de la estructura Do...Loop puede generar este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Declaración duplicada en el ámbito actual
Declaración duplicada en el alcance actual

El nombre especificado ya se ha usado en este nivel del alcance. Por ejemplo, dos variables pueden tener el mismo nombre si han sido definidas en distintos procedimientos, pero no, si han sido definidas dentro del mismo procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	Una variable o un procedimiento nuevo poseen el mismo nombre de una variable o de un procedimiento existente. Por ejemplo:

Sub MiSub()

Dim A As Integer

Dim A As Variant

. . .	' Otras declaraciones o código de procedimiento.

End Sub

Verifique el procedimiento actual, el módulo, o el proyecto y elimine cualquier declaración duplicada.

•	Una instrucción Const que utiliza el mismo nombre de una variable o de un procedimiento existente.

Elimine o cambie el nombre de la constante en cuestión.

•	Ha declarado una matriz fija más de una vez.

Elimine o cambie el nombre de una de las matrices.

Busque el nombre duplicado. Cuando especifique el nombre que desee buscar omita el carácter de declaración tipo, si existe, ya que si los nombres son los mismos y los caracteres de declaración de tipo son distintos, ocurrirá un conflicto.

Note que una variable a nivel de módulo puede tener el mismo nombre que una variable declarada en un procedimiento, pero cuando desea referirse a la variable a nivel de módulo dentro del procedimiento debe calificarla con el nombre del módulo. Los nombres de módulo y los nombres de proyectos al que se hace referencia también pueden volverse a usar como nombres de variables dentro de procedimientos y pueden también ser calificados.

Si desea más información, seleccione el tema en cuestión y presione F1.


Definición duplicada

Solamente puede definir una constante de compilador condicional para que tenga un valor. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó dos valores diferentes para la misma constante de compilador condicional, por ejemplo:

#Const Mac = 0

#Const Mac = 1

Elimine una de las definiciones.

Si desea más información, seleccione el tema en cuestión y presione F1.


Instrucción Deftype duplicada
Deftipo (Instrucción) duplicada

Las instrucciones Deftipo del mismo alcance deben especificar intervalos de letras únicos. Las causas y posibles soluciones de este error son las siguientes:

•	Parte o todo el intervalo de letras para esta instrucción Deftipo ya se ha incluido en otra instrucción Deftipo.

Vuelva a escribir la instrucción para que no se superpongan los intervalos de letras.

Si desea más información, seleccione el tema en cuestión y presione F1.


Instrucción Option duplicada
Option (Instrucción) duplicada

Solamente puede ocurrir una instrucción Option de cada tipo en cada módulo. Las causas y posibles soluciones de este error son las siguientes:

•	Ha definido más de una instrucción Option Base, Option Compare, Option Explicit, u Option Private en este módulo.

Elimine cualquier duplicado en el módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


La edición no se podrá deshacer. ¿Continuar de todos modos?
La edición no se puede deshacer. ¿Desea continuar de cualquier modo?

No será posible elegir Deshacer para restablecer el estado actual después de realizar esta edición. Las causas y posibles soluciones de este error son las siguientes:

•	La edición puede ser demasiado larga para ser guardada.

Trate de realizar la edición en incrementos más pequeños.

Si desea más información, seleccione el tema en cuestión y presione F1.


Else sin If

Una Else debe ir precedido de una If. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción Else ha sido utilizado sin la correspondiente instrucción If.

Verifique otras estructuras de control dentro de la estructura If...End If y verifique que coincidan correctamente. También verifique que el bloque If tenga el formato correcto.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se permite un tipo Enum vacío

Un tipo Enum especifica el nombre y los miembros para una enumeración. Este error tiene las causas y soluciones siguientes:

•	Nombro una enumeración en un bloque Enum…End Enum, pero falló al especificar un miembro.

Agregue al menos un miembro al bloque Enum…End Enum.

Si desea más información, seleccione el tema en cuestión y presione F1.


Expresión de inspección vacía
La expresión de Watch está vacía

El cuadro de diálogo Agregar expresión de inspección requiere la introducción de una expresión. Las causas y posibles soluciones de este error son las siguientes:

•	No ha proporcionado una expresión de inspección en el cuadro de diálogo Agregar expresión de inspección.

Agregue una expresión al cuadro de diálogo Agregar expresión de inspección o pulse la tecla ESC.

Si desea más información, seleccione el tema en cuestión y presione F1.


End If sin bloque If
End If sin el bloque If

Se ha utilizado una instrucción End sin la correspondiente instrucción If. Las causas y posibles soluciones de este error son las siguientes:

•	La cláusula If se omite o se separa de End If.

Verifique otras estructuras de control dentro de la estructura If...End If y verifique que coincidan correctamente. También verifique que el bloque If tenga un formato correcto.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha alcanzado el final del ámbito de búsqueda; ¿desea continuar desde el principio?
Se ha llegado al final del alcance de búsqueda. ¿Desea continuar desde el principio?

La búsqueda no ha tenido éxito. Las causas y posibles soluciones de este error son las siguientes:

•	La búsqueda hacia abajo ha alcanzado el fin del alcance especificado.

Puede elegir entre continuar buscando desde el principio del alcance de la búsqueda o cancelar y cambiar el alcance de la búsqueda.


End Select sin Select Case

End Select debe ir precedido de una Select Case coincidente. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utiliza una instrucción End Select sin la correspondiente instrucción Select Case.

Esto se debe generalmente a una instrucción End Select de más, debajo de un bloque Select Case o a que ha dejado atrás la instrucción End Select al copiar un bloque Select Case de un procedimiento a otro. Verifique cada instrucción End Select para asegurarse de que termine en una estructura Select Case.

Si desea más información, seleccione el tema en cuestión y presione F1.


End With sin With

End With debe ir precedido de una With coincidente. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado una instrucción End With sin la correspondiente instrucción With.

Verifique otras estructuras de control dentro de la estructura With...End With y verifique que coincidan correctamente. Por ejemplo, un If sin un End If dentro de la estructura With...End With puede causar este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha producido un error al intentar tener acceso al registro del sistema
Se ha producido un error al tratar de obtener acceso al registro del sistema

Algunas operaciones necesitan acceder a la base de datos de registro del sistema. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha corrompido la base de datos de registro del sistema.

Ejecute el programa de configuración de Configuración de la aplicación host nuevamente.

Si desea más información, seleccione el tema en cuestión y presione F1.


El controlador de eventos no es válido

La lista de parámetro de un procedimiento controlador de eventos debe coincidir exactamente con la declaración del evento. Este error tiene las causas y soluciones siguientes:

•	El procedimiento controlador de eventos tiene un número de parámetros erróneo.

Elimine los parámetros adicionales o agregue los que faltan.

•	Uno o algunos de los parámetros del procedimiento controlador de eventos tiene el tipo de datos erróneo.

Haga que coincidan los tipos de parámetro de la declaración de evento.

•	El procedimiento controlador de eventos es una Function en lugar de una Sub.

Haga su procedimiento una Sub. Un procedimiento controlador de eventos no puede devolver un valor.

•	Otra biblioteca de tipos utiliza el nombre de evento para un tipo como propio.

Modifique el nombre o el nombre de la biblioteca de tipos para evitar la ambigüedad.

Si desea más información, seleccione el tema en cuestión y presione F1.


La declaración de procedimiento de eventos no coincide con la descripción de evento del mismo nombre

El módulo de clase tiene un nombre de procedimiento que entra en conflicto con el nombre de un evento. Las causas y posibles soluciones de este error son las siguientes:

•	Un procedimiento tiene el mismo nombre que un evento, pero no tiene la misma signatura (es decir, número y tipos de parámetros). Esto puede suceder si realiza acciones tales como agregar un nuevo parámetro a un procedimiento de eventos. Por ejemplo, si modifica la definición del procedimiento de evento Form_Load de un formulario de la siguiente forma, se producirá este error:

Sub Form_Load (MiParám As Integer)

. . .

End Sub

Si éste no es el procedimiento de eventos correspondiente al evento, cambie su nombre. Si el procedimiento corresponde al evento, haga que la lista de parámetros concuerde con la necesaria para el evento (si la hay).

Si desea más información, seleccione el tema en cuestión y presione F1.


Exit Do no está dentro de Do...Loop
Se ha encontrado Exit Do fuera de un bucle Do...Loop

Exit Do solamente es válido dentro de una instrucción Do...Loop. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción Exit Do ha sido usada fuera de una instrucción Do...Loop.

Asegúrese de que una instrucción válida Do precede a un Exit Do.

Si desea más información, seleccione el tema en cuestión y presione F1.


Exit For no está dentro de For...Next
Se ha encontrado Exit For fuera de un bucle For...Next

Exit For solamente es válido dentro de un bucle For...Next. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción Exit For ha sido usada fuera de una instrucción For...Next.

Asegúrese de que una instrucción válida For precede a una instrucción Exit For.

Si desea más información, seleccione el tema en cuestión y presione F1.


Exit Function no permitido en un procedimiento o en una propiedad
No se puede usar la función Exit con Sub o Property

Una Exit debe coincidir con el procedimiento en el que ocurre. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado la instrucción Exit Function en un procedimiento Sub o Property.

Utilice Exit Sub o Exit Property para este tipo de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se permite Exit Property en Sub o en Function
No se puede usar la propiedad Exit con Function o Sub

Una Exit debe coincidir con el procedimiento en el que ocurre. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado la instrucción Exit Property en un procedimiento Sub o Function.

Utilice la instrucción Exit apropiada para este tipo de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Exit Sub no permitido en una función o en una propiedad
No se puede usar Exit Sub en Function o Property

Una Exit debe coincidir con el procedimiento en el que ocurre. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado la instrucción Exit Sub en un procedimiento Function o Property.

Utilice la instrucción Exit apropiada para este tipo de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera una matriz

Un nombre de variable con un subíndice indica que la variable es una matriz. Las causas y posibles soluciones de este error son las siguientes

•	La sintaxis que ha especificado es apropiada para una matriz, pero no existe una matriz con este nombre en el alcance.

Verifique para asegurarse de que el nombre de la variable está bien escrito. A menos que el módulo contenga Option Explicit, una variable se crea la primera vez que se utiliza. Si escribe mal el nombre de una variable de matriz, puede que se cree la variable, pero no como matriz.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera End Function

Una instrucción End procedimiento debe coincidir con el procedimiento en el que ocurre. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado End Property o End Sub para finalizar el procedimiento Function.

Utilice la instrucción End Function apropiada para este tipo de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera End Property

Una instrucción End procedimiento debe coincidir con el procedimiento en el que ocurre. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado End Function o End Sub para finalizar el procedimiento Property.

Utilice la instrucción End Property apropiada para este tipo de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera End Sub

Una instrucción End procedimiento debe coincidir con el procedimiento en el que ocurre. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha utilizado End Function o End Property para finalizar el procedimiento Sub.

Utilice la instrucción End Sub apropiada para este tipo de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera End With

Es necesario terminar un bloque With. Las causas y posibles soluciones de este error son las siguientes:

•	No terminó correctamente un bloque With.

Incluya una instrucción End With al final del bloque.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera Function o una variable

La sintaxis de la instrucción indica una variable o una llamada a una función. Las causas y posibles soluciones de este error son las siguientes

•	El nombre no es el de una variable o Function conocida.

Verifique la ortografía del nombre. También, asegúrese de que cualquier variable o función con ese nombre sea visible en la porción del programa a la que esté haciendo referencia. Por ejemplo, si la función se define como Private o la variable no se define como Public, , sólo será visible dentro de su propio módulo.

•	Está intentando asignar de manera inadecuada un valor a un nombre de procedimiento. Por ejemplo, si MiSub es un procedimiento Sub, el siguiente código genera este error:

MiSub = 237	' Origina un error: Se espera una función, o bien error de variable

Aunque puede utilizar la sintaxis de asignación con un procedimiento Property Let o con una Function que devuelva un objeto o una Variant que contenga un objeto, no puede utilizar la sintaxis de asignación con un procedimiento Sub, Property Get, o Property Set.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba un procedimiento, no un módulo
Se espera un procedimiento, no un módulo

No existe un procedimiento actual, pero existe un alcance actual, pero existe un módulo con este nombre. Puede llamar a un procedimiento, pero no a un módulo. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de un módulo se utiliza como llamada a procedimiento.

Verifique la ortografía del nombre del procedimiento y asegúrese de que el procedimiento que está tratando de llamar no sea privado de otro módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba un procedimiento, no un proyecto o una biblioteca
Se espera un procedimiento, no un proyecto o una biblioteca

No existe un procedimiento con este nombre en el alcance, actual, pero existe un proyecto con este nombre. Puede llamar a un procedimiento, pero no a un proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de un proyecto se utiliza como llamada a procedimiento

Verifique la ortografía del nombre del procedimiento y asegúrese de que el procedimiento que está tratando de llamar no sea privado a otro módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera un procedimiento, no un tipo definido por el usuario

No existe un procedimiento con este nombre en el alcance actual, pero existe una variable de tipo definido por el usuario con este nombre. Puede realizar una llamada a un procedimiento, pero no a un tipo definido por el usuario. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de un tipo definido por el usuario se utiliza como llamada a un procedimiento.

Verifique la ortografía del nombre del procedimiento y asegúrese de que el procedimiento que está tratando de llamar no sea privado de otro módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba un procedimiento, no una variable
Se espera un procedimiento, no una variable

No existe un procedimiento con este nombre en el alcance actual, pero hay una variable con este nombre. Puede realizar una llamada a un procedimiento, pero no a una variable. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de una variable se utiliza como llamada a procedimiento.

El error pudo también haber sido causado por haber escrito incorrectamente el nombre de un procedimiento válido, ya que ello puede haber sido mal construido como una variable implícitamente definida. Verifique la ortografía del nombre del procedimiento y asegúrese de que el procedimiento que está tratando de llamar no sea privado de otro módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba Sub, Function o Property
Se espera Sub, Function o Property

La sintaxis de la instrucción indica la invocación a un procedimiento Sub, Function, o Property. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre especificado no es el de un procedimiento Sub, Function, o Property en el alcance de esta parte del programa.

Verifique la ortografía del nombre. Observe que si el procedimiento se define como Private sólo puede ser llamado desde este módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba un tipo definido por el usuario, no un proyecto
Se espera un tipo definido por el usuario, no un proyecto

No existe un tipo definido por el usuario con este nombre en el alcance actual, pero existe un proyecto con este nombre. Puede definir una variable para que su tipo sea definido por el usuario, pero no puede ser de tipo proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de un proyecto se utiliza como llamada a un tipo definido por el usuario.

Verifique la ortografía del nombre del tipo definido por el usuario y asegúrese de que el tipo definido por el usuario no sea privado de otro módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba una variable o un procedimiento, no un tipo enum

El nombre de un tipo Enum sólo aparece en una instrucción que declara una enumeración de los tipos o como un calificador. Este error tiene las causas y soluciones siguientes:

•	Se utiliza un nombre de tipo Enum en lugar del nombre de una variable de enumeración del tipo.

Declare una variable del tipo Enum o encuentre una declaración anterior en al alcance actual y utilice esa variable.

•	Se utiliza un nombre de tipo Enum en lugar del nombre de una variable o de un procedimiento.

Compruebe la ortografía del identificador que originó el error. Utilice el nombre de una variable o procedimiento donde especificó un tipo Enum.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba una variable o un procedimiento, no un módulo
Se espera una variable o un procedimiento, no un módulo

No existe una variable o procedimiento con este nombre en el alcance actual, pero existe un módulo con este nombre. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de un módulo se utiliza como variable o procedimiento.

Verifique la ortografía del nombre de la variable o del procedimiento y asegúrese de que el nombre al que desea referirse no sea privado de otro módulo. El nombre de un módulo puede ser un calificador pero no puede estar sólo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se esperaba una variable o un procedimiento, no un proyecto
Se espera una variable o un procedimiento, no un proyecto

No existe una variable o procedimiento con este nombre en el alcance actual, pero existe un proyecto con este nombre. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre de un proyecto se utiliza como variable o procedimiento.

Verifique la ortografía del nombre de la variable o del procedimiento y asegúrese de que el nombre al que desea referirse no sea privado de otro módulo. El nombre de un proyecto puede ser un calificador, pero no puede estar solo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se espera: <varios>

No se ha encontrado una parte esperada de la sintaxis. Este error está generalmente ubicado a la izquierda del elemento seleccionado pero no siempre es obvio. Por ejemplo, puede llamar a un procedimiento Sub con o sin la palabra clave Call. Sin embargo, si utiliza la palabra clave Call, debe incluir la lista del argumentos entre paréntesis. Los siguientes errores ocurren en las circunstancias descritas:

•	Se espera: Fin de la instrucción. Uso inadecuado de los paréntesis en una invocación a procedimiento:

X = Workbook.Add F:= 5	' El error se debe a la falta de paréntesis.

Call MiSub 5	' El error se debe a la falta de paréntesis.

Utilice paréntesis en una llamada a función que especifique argumentos, o con una invocación a procedimiento Sub que utilice la palabra clave Call.

•	Se espera: ). Sintaxis incorrecta para una llamada a procedimiento. Por ejemplo, la llamada a una función no tiene significado por si misma, y las llamadas a procedimiento Sub a veces requieren la palabra clave Call, dependiendo de la forma en que especifique sus argumentos.

Workbook.Add (X:=5, Y:=7)	' Llamada de función sin expresión.

SuSub(5, 7)	' Invocación de Sub sin Call.

Utilice siempre llamadas a función en expresiones. Si tiene múltiples argumentos incluidos entre paréntesis dentro de una llamada a procedimiento Sub a veces requieren la palabra clave Call, dependiendo de la forma en que especifique sus argumentos.

•	Se espera: Expresión. Por ejemplo, cuando se pega código desde el cuadro de diálogo Examinar objeto, y se ha olvidado asignar un valor a un argumento con nombre.

Workbook.Add (X:= )	' Error porque no se asigno un valor

' al argumento con nombre.

Agregue un valor al argumento, o elimínelo si es opcional.

•	Se espera: Variable. Por ejemplo, no se pueden usar palabras clave restringidas para nombres de variables. En el siguiente ejemplo, la instrucción Input # espera una variable como segundo argumento. Dado que Type es una palabra clave restringida, no puede ser usada como nombre de variable.

Input # 1, Type	' La palabra clave Tipo ha sido usada

' ilegalmente como un nombre de variable.

Cambie el nombre de la variable para que no entre en conflicto con palabras clave restringidas.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se ha definido el nombre externo
Nombre externo indefinido

Puede indicar nombres externos incluyéndolos entre corchetes ([ ]). Las causas y posibles soluciones de este error son las siguientes:

•	El identificador especificado dentro de los corchetes no tiene sentido para la aplicación host.

Verifique que el nombre está bien escrito para asegurarse de que es coherente con lo que espera el host

Si desea más información, seleccione el tema en cuestión y presione F1.


El formato de archivo ya no es compatible
Este formato de archivo ya no es admitido

No todos los formatos de archivo se pueden leer bajo todas las circunstancias. Las causas y posibles soluciones de este error son las siguientes:

•	Está intentando cargar un archivo binario creado con una versión anterior de Visual Basic.

Cargue el archivo en la versión de Visual Basic con la que se creó, guárdelo en formato de texto e intente cargarlo de nuevo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Los datos fijos o estáticos no pueden tener más de 64 Kb
Los datos fijos o estáticos no pueden ocupar más de 64k

Los datos fijos y estáticos incluyen variables, no automáticas, cadenas de longitud fija y matrices fijas. Las causas y posibles soluciones de este error son las siguientes:

•	Ha intentado asignar más de 64 K de datos a nivel de módulo.

Reduzca la cantidad de datos declarados. Note que a pesar de que el límite para el tamaño de los datos a nivel de módulo es de 64K, las cadenas de longitud variable del nivel de módulo y las matrices pueden exceder este límite.

•	Ha intentado asignar más de 64K de datos estáticos de nivel de procedimiento al módulo.

Reduzca la cantidad de datos de este tipo declarados. Los datos estáticos de todos los procedimientos que están en un módulo están limitados a un total de 64K (no 64K por procedimiento). Note que las cadenas estáticas de longitud variable y las matrices pueden exceder este límite.

•	El tamaño de un tipo de datos definido por el usuario no puede exceder 64 K.

Reduzca el tamaño del tipo definido por el usuario. Generalmente, el tamaño de un tipo definido por el usuario es igual a la suma de los tamaños especificados para sus elementos (en algunas plataformas, puede incluirse relleno entre los elementos para mantenerlos alineados en márgenes de texto). Además, sin anida un tipo definido por el usuario dentro de otro, el tamaño del tipo anidado debe incluirse en el tamaño del nuevo tipo.

•	En un procedimiento, intentó declarar una variable de tipo definido por el usuario que requiere más de 32 K.

Aunque el límite de tamaño de una variable de tipo definido por el usuario es de 64K a nivel de módulo, las variables de tipo definido por el usuario en procedimientos no puede superar los 32K. Reduzca el tamaño necesario para este tipo definido por el usuario, o utilice una variable a nivel de módulo.

•	El tamaño de una cadena de longitud fija declarada dentro de un procedimiento no puede exceder 65.464.

Reduzca la longitud de la cadena de longitud fija. Observe que las cadenas de longitud fija pueden exceder este límite.

Si desea más información, seleccione el tema en cuestión y presione F1.


La variable de control For ya está en uso

Cuando anida bucles For...Next debe utilizar variables de control diferentes en cada uno. Las causas y posibles soluciones de este error son las siguientes:

•	Un bucle For interno utiliza el mismo contador que el bucle For dentro del cual está incluido.

Compruebe si hay repeticiones en los bucles anidados. Por ejemplo, si el bucle externo utiliza For Contador = 1 To 25, los bucles internos no pueden utilizar Cuenta como sus variables de control.

Si desea más información, seleccione el tema en cuestión y presione F1.


La variable de control For Each debe ser de tipo Variant u Object
La variable de control For Each debe ser tipo Variant o tipo Object

Una variable de control es la parte de elemento de la sintaxis de la instrucción For Each...Next. Las causas y posibles soluciones de este error son las siguientes:

•	Una colección tiene una variable de control que no es de tipo Variant ni Object.

Asegúrese de que la parte elemento del For Each...Next es Variant u Object.

•	Una matriz tiene una variable de control que no es una Variant.

Asegúrese de que la parte elemento del For Each...Next es Variant.

Si desea más información, seleccione el tema en cuestión y presione F1.


La variable de control For Each en matrices debe ser de un tipo Variant
La variable de control para For Each en matrices debe ser Variant

Una variable de control es la parte elemento de la sintaxis de la instrucción For Each...Next. Las causas y posibles soluciones de este error son las siguientes

•	Una matriz tiene una variable de control que no es una Variant.

Asegúrese de que la parte grupo del For Each...Next es una variable de tipo Variant.

•	Si desea más información, seleccione el tema en cuestión y pulse F1.


Imposible utilizar For Each en una matriz de tipo definido por el usuario o en cadenas de longitud fija
For Each no puede usarse en una matriz de tipo definido por el usuario o en una cadena de longitud fija

Las construcciones For Each sólo son válidas para colección y matrices de tipos intrínsecos (incluyendo matrices de objetos). Además, las matrices de cadenas de longitud fija no pueden repetirse utilizando For Each. Las causas y posibles soluciones de este error son las siguientes:

•	Los elementos de la matriz de la construcción For tienen un tipo definido por el usuario.

Utilice un bucle For...Next normal para iterar los elementos de la matriz.

•	Los elementos de la matriz de la construcción For Each tienen un tipo de cadena de longitud fija.

Utilice un bucle For...Next normal para iterar los elementos de la matriz.

Si desea más información, seleccione el tema en cuestión y presione F1.


For Each puede efectuar iteraciones solamente con una colección de objetos o con una matriz

La construcción For Each sólo puede utilizarse con colección y matrices. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó un objeto que no es una colección ni una matriz como la parte grupo de la sintaxis For Each.

Verifique la ortografía del elemento sobre el que desea efectuar iteraciones para asegurarse de que es un conjunto o una matriz en alcance en esta parte del código.

Si desea más información, seleccione el tema en cuestión y presione F1.


For sin Next
Se ha encontrado For sin Next

Cada instrucción For debe tener una instrucción Next coincidente. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha usado una instrucción For sin la correspondiente instrucción Next.

Verifique si existe uno que no coincide correctamente con la estructura For...Next dentro de la estructura externa For...Next.

Si desea más información, seleccione el tema en cuestión y presione F1.


Referencia adelantada a un tipo definido por el usuario
Referencia adelantada al tipo definido por el usuario

Debe definir un tipo definido por el usuario antes de que se permite hacer referencia a él. Las causas y posibles soluciones de este error son las siguientes:

•	Podría haberse declarado una variable de tipo definido por el usuario antes de que aparezca la definición del tipo definido por el usuario. En el siguiente ejemplo, la variable OtraVar es declarada antes de que se conozca su tipo (OtroTipo):

Type MiTipo

OtraVar As OtherType

End Type

Type OtroTipo

VarTotal As Integer

VarReal As Double

End Type

Cambie el orden de las definiciones de tipo para que no se produzca la referencia adelantada.

•	Anidó un tipo definido por el usuario dentro de él mismo.

Type MiTipo

MiVar As Integer

OtraVar As MiTipo

End Type

Elimine el tipo anidado que hace referencia a sí mismo. Esto podría ocurrir indirectamente si se anida un tipo dentro de otro en el cual ha sido declarado el primero. Verifique la definición de cada tipo anidado para eliminar duplicaciones.

Si desea más información, seleccione el tema en cuestión y presione F1.


La llamada a la función en la parte izquierda de la asignación debe devolver un tipo Variant u Object
La llamada a una función en el extremo izquierdo de la asignación debe devolver Variant u Object

Una llamada a una función puede aparecer en el extremo izquierdo de una asignación pero sólo si el valor devuelto por la función es un Object o Variant. Las causas y posibles soluciones de este error son las siguientes:

•	El tipo de retorno de la función situada a la izquierda de la asignación no es Variant ni Object.

Cambie el tipo de retorno. Observe que si el valor devuelto es un objeto o una Variant que contiene un objeto, la asignación se hace a la propiedad predeterminada del objeto. Si la Variant devuelta no es un objeto, la asignación no tendrá efecto.

•	Todo en la llamada es correcto, sin embargo, no se puede completar. Por ejemplo, puede intentar establecer una propiedad que sólo se puede establecer en tiempo de diseño.

Entre en modo de diseño y establezca la propiedad en la ventana Property. Quite el código que intentó establecer la propiedad por programa.

Si desea más información, seleccione el tema en cuestión y presione F1.


Función marcada como restringida o utiliza un tipo OLE no admitido en Visual Basic

No todos los lenguajes de programación pueden acceder a todos los procedimientos que aparecen en una biblioteca de tipos o en una biblioteca de objetos. El creador de una biblioteca de tipos o de objetos puede designar determinadas funciones como restringidas para impedir su uso en los lenguajes de macro. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar una función con una especificación restringida.

No puede utilizar la función en el programa. Si dispone de documentación para el objeto representado por la biblioteca, compruebe en ella si existe algún método que proporcione una funcionalidad equivalente.

•	Intentó utilizar una función que necesita un tipo de parámetro o que tiene un tipo devuelto no disponible en Visual Basic

A veces puede simular los tipos devueltos con equivalente de Visual Basic. Compruebe los subtipos del tipo de datos Variant. Esto también puede funcionar para tipos de parámetros que no sean de Basic y que se esperen como referencias. No obstante, no puede pasar un tipo de datos Variant por valor como método para simular un tipo que no sea de Basic.

Si desea más información, seleccione el tema en cuestión y presione F1.


El identificador es demasiado largo

Los identificadores no pueden tener más de 255 caracteres de largo. Las causas y posibles soluciones de este error son las siguientes:

•	El identificador excede de 255 caracteres.

Reduce la longitud del identificador.

Si desea más información, seleccione el tema en cuestión y presione F1.


El identificador indicado con el cursor no es el nombre de un procedimiento

Se intentó ver un procedimiento, pero el identificador en el punto de intersección no es un nombre de procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	El identificador no es un nombre de procedimiento.

Verifique la ortografía del identificador.

Si desea más información, seleccione el tema en cuestión y presione F1.


La versión de la DLL es incorrecta
La versión de DLL es incorrecta

Cada versión de Visual Basic sólo trabaja con la correspondiente biblioteca de vínculos dinámicos (DLL). Las causas y posibles soluciones de este error son las siguientes:

•	La versión de la biblioteca de vínculos dinámicos (DLL) de Visual Basic no coincide con la versión esperada por esta aplicación host. El programa está intentando llamar a rutinas en una DLL pero la versión de la biblioteca es inconsistente con Visual Basic o con la aplicación host.

Obtenga la versión correcta de la biblioteca, y asegúrese de que las versiones anteriores no estén delante de la correcta en la ruta de acceso.

Si desea más información, seleccione el tema en cuestión y presione F1.


La versión de ActiveX es incorrecta
La versión de OLE es incorrecta

Las versiones de la biblioteca de vínculos dinámicos (DLL) OLE no coinciden con las esperadas por la aplicación host. En Microsoft Windows, la aplicación busca las DLLs, primero en el directorio actual, luego a lo largo de las rutas de acceso configuradas y finalmente en el directorio WINDOWS\SYSTEM. Las causas y posibles soluciones de este error son las siguientes:

•	Este error ocurre si se encuentran OLE DLLs antiguas antes que las DLLs esperadas por la aplicación host.

No debe intentar utilizar ambas versiones de las DLLs.

En Macintosh los archivos OLE se encuentran normalmente sólo en la carpeta de extensiones por lo que es más difícil que ocurra este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Memoria insuficiente en el Panel inmediato para crear la variable

La memoria del Panel Inmediato es limitada. Este error tiene la causa y la solución siguientes:

•	Ha especificado en el Panel Inmediato una variable que se debe copiar, ya que no se ha creado en el contexto del código del programa.

Elimine la referencia a la variable en el Panel Inmediato o bien declare la variable en el contexto del código del programa para que no tenga que crearse en el Panel Inmediato.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay memoria suficiente para guardar la información de Deshacer
No hay suficiente memoria para guardar la información necesaria para Deshacer

No será posible elegir Deshacer para restablecer el estado actual después de realizar esta edición. Las causas y posibles soluciones de este error son las siguientes

•	La edición puede ser demasiado larga para ser guardada.

Trate de realizar la edición en incrementos más pequeños.

Si desea más información, seleccione el tema en cuestión y presione F1.


Información de proyecto insuficiente para cargar el proyecto en la plataforma o con la versión que se está utilizando.
Información de proyecto insuficiente para cargar el proyecto en la plataforma o con la versión que se está utilizando

Cuando guarda un proyecto, la información adicional se guarda para permitir cargar el proyecto con la última versión o en una plataforma diferente. Este error tiene las causas y soluciones siguientes:

•	Cuando guardó este proyecto, recibió un error que indica que no había suficiente memoria disponible para guardar toda la información que podría ser necesaria para cargar el proyecto con una versión diferente o cargarlo en una plataforma diferente.

Cargue el archivo utilizando la versión de Visual Basic o en la plataforma en que se guardó anteriormente y después guárdelo de nuevo. Si no recibe ningún mensaje de error mientras lo guarda, debería ser capaz de cargarlo en la versión o en la plataforma actuales.

Si desea más información, seleccione el tema en cuestión y presione F1.


La interfaz no es válida para Implements
No es una interfaz válida para Implements

No se pueden implementar todas las interfaces en Visual Basic. Este error tiene las causas y soluciones siguientes:

•	La interfaz contiene algunos elementos que no se admiten en Visual Basic. Por ejemplo, Visual Basic no tiene equivalente para el tipo entero largo sin signo, Visual Basic no puede designar un parámetro de procedimiento como "sólo salida." Aunque Visual Basic admite el uso del carácter subrayado (_) en identificadores Visual Basic, no puede implementar una interfaz que utilice caracteres de subrayado en los nombres de sus miembros.

No puede implementar la interfaz en Visual Basic.

Si desea más información, seleccione el tema en cuestión y presione F1.


El modo de acceso no es válido

En la instrucción Open, especificó un modo de acceso ilegal para el tipo de archivo especificado. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó abrir un archivo para Input, pero especificó un modo de acceso ilegal

Puede omitir la especificación del modo de acceso cuando abra un archivo para entrada pero, si lo especifica, el modo de acceso debe ser Read. Tanto Write como Read Write son modos de acceso ilegal en un archivo abierto para Input.

•	Intentó abrir un archivo para Append, pero especificó un modo de acceso ilegal.

Puede omitir la especificación del modo de acceso cuando abra un archivo para a agregar pero, si lo especifica, el modo de acceso debe ser Write. Tanto Read como Read Write son modos de acceso ilegal en un archivo abierto para Append.

•	Intentó abrir un archivo para Output, pero especificó un modo de acceso ilegal

Puede omitir la especificación del modo de acceso cuando abra un archivo para salida pero, si lo especifica, el modo de acceso debe ser Write. Tanto Read como Read Write son modos de acceso ilegal en un archivo abierto para Output.

Si desea más información, seleccione el tema en cuestión y presione F1.


Atributo no válido en Sub o en Function
Hay un atributo no válido en Sub, Function o Property

Algunos atributos no son válidos dentro de los procedimientos. Las causas y posibles soluciones de este error son las siguientes:

•	Los atributos Public o Private no se permiten dentro del cuerpo de una definición de procedimiento.

Elimine el atributo del procedimiento. Para asignar a la variable un alcance más amplio, mueva la declaración al nivel de módulo. Las variables declaradas dentro de procedimientos siempre son Private.

Si desea más información, seleccione el tema en cuestión y presione F1.


El carácter no es válido
Carácter no válido

El carácter no se puede usar en el contexto actual. Las causas y posibles soluciones de este error son las siguientes:

•	Probablemente utilizó un carácter no válido, como un corchete o un guión, en un nombre de variable.

Compare la ortografía del nombre con su declaración.

Si desea más información, seleccione el tema en cuestión y presione F1.


El formato de los datos no es válido
Formato de datos no válido

Los datos leídos desde un archivo no tienen el formato esperado. Las causas y posibles soluciones de este error son las siguientes:

•	Un archivo de proyecto o un archivo de biblioteca de objetos está corrupto o en un formato no comprensible.

Obtenga una nueva versión del archivo de proyecto o de biblioteca de objetos.

•	Es posible que haya intentado cargar un archivo .EXE en un módulo.

Cargue en su lugar el código de origen.

•	Puede haber usado los cuadros de diálogo Referencias y Examinar objeto para agregar una referencia a un archivo que no es una biblioteca de objetos válida o que contiene un proyecto Basic en un formato no aceptado por la aplicación host. Por ejemplo, Microsoft Excel no entiende los archivos .BAS, .FRM o los archivos de Microsoft Project que contienen código Basic.

Cargue el archivo cuestionable en la aplicación donde se creó y a continuación, guárdelo en un formato compatible. Por ejemplo, el código de origen de una biblioteca de objetos se puede procesar a través de MKTYPLIB; y el código de QuickBasic y de Visual Basic se pueden guardar en formato de texto, etc.

Si desea más información, seleccione el tema en cuestión y presione F1.


El tipo de dato no es válido para la constante
El tipo de la constante no es válido

No todos los tipos de datos se pueden asignar a constantes. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó declarar que el tipo de una constante sea un tipo definido por el usuario, un objeto o una matriz.

Elimine la declaración o vuelva a declararlo como una variable.

Si desea más información, seleccione el tema en cuestión y presione F1.


No es válido en el panel Inmediato
No es válido en panel Inmediato

No todas las instrucciones están permitidos en el panel Inmediato. Las causas y posibles soluciones de este error son las siguientes:

•	Se utilizó una instrucción declarativa. Por ejemplo, Const, Declare, Deftipo, Dim, Function, Option Base, Option Explicit, Option Compare, Option Private, Private, Public, instrucciones declarativas de procedimientos de propiedad (Property Let, Property Set, y Property Get), ReDim, Static, Sub, y Type no están permitidas en el panel Inmediato.

Elimine las instrucciones declarativas del panel Inmediato.

•	Se utilizó una instrucción de flujo de control, como por ejemplo, Sub, Function, Property, GoSub, GoTo, Return, y Resume.

Elimine estas instrucciones del panel Inmediato.

•	No se ha realizado ninguna conexión lógica entre líneas físicas separadas del panel Inmediato, por lo que las instrucciones formateadas como múltiples líneas físicas, como instrucciones de bloque If, no se pueden ejecutar adecuadamente.

Estos bloques se pueden escribir en una sola línea física, separando cada instrucción de la siguiente mediante dos puntos (:). A la inversa, también puede extender una sola instrucción en varias líneas físicas en el panel Inmediato empleando el carácter de continuación de línea, que es un espacio seguido de un subrayado ( _).

•	Ha tratado de ejecutar algún código en el panel Inmediato que invalida el estado actual del programa y requiere que lo vuelva a inicializar.

Elimine el código en cuestión del panel Inmediato.

Si desea más información, seleccione el tema en cuestión y presione F1.


El procedimiento interno no es válido
Procedimiento interno no válido

La instrucción no puede ocurrir en un procedimiento Sub o Function. Las causas y posibles soluciones de este error son las siguientes:

•	Una de las siguientes instrucciones aparece en un procedimiento: procedimiento: Declare, Deftipo, Private, Public, Option Base, Option Compare, Option Explicit, Option Private, y Type.

Elimine la instrucción del procedimiento. Las instrucciones se pueden colocar a nivel de módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


La longitud no es válida para una cadena de longitud fija
La longitud de la cadena de longitud fija no es válida

Las causas y posibles soluciones de este error son las siguientes:

•	Una cadena de longitud fija se declaró con longitud cero.

Una cadena de longitud fija debe tener como mínimo un carácter.

•	Las cadenas de longitud fija se limitan a un máximo de 65,526.

Reduzca la longitud especificada para la cadena de longitud fija

Nota   Las cadenas de longitud variable pueden superar el límite máximo y también pueden tener la longitud cero.

Si desea más información, seleccione el tema en cuestión y presione F1.


Referencia de variable de control Next no válida
Referencia no válida a una variable de control Next

La variable numérica de la parte Next de un bucle For...Next debe coincidir con la variable de la parte For. Las causas y posibles soluciones de este error son las siguientes:

•	La variable de la parte Next de un bucle For...Next difiere de la variable de la parte For. Por ejemplo:

For Contador = 1 To 10

MiVar = Contador

Next Contador

Compruebe la ortografía de la variable de la parte Next para asegurarse de que coincide con la de la parte For. Además, asegúrese de que no ha eliminado sin darse cuenta partes del bucle externo que puedan haber utilizado la variable.

Si desea más información, seleccione el tema en cuestión y presione F1.


Referencia no válida o sin calificar
Referencia no válida o no calificada

Un identificador que comienza con un punto es válido sólo dentro de un bloque With. Las causas y posibles soluciones de este error son las siguientes:

•	El identificador comienza con un punto.

Complete la calificación del identificador o elimine el punto.

Si desea más información, seleccione el tema en cuestión y presione F1.


El procedimiento externo no es válido
Procedimiento externo no válido

La instrucción debe ocurrir dentro de un procedimiento Sub o Function, , o de un procedimiento Property (Property Get, Property Let, Property Set). Las causas y posibles soluciones de este error son las siguientes:

•	Las instrucciones ejecutables, Static o ReDim, aparecen en el nivel de módulo.

Static no es necesario a nivel de módulo, puesto que todas las variables variables de nivel de módulo son estáticas. Use Dim en lugar de ReDim a nivel de módulo. Para crear una matriz dinámica a nivel de módulo, declárela con Dim y utilizando paréntesis vacíos

Nota En el nivel de módulo puede utilizar sólo instrucciones de declaración y comentarios tales como Const, Declare, Deftipo, Dim, Option Base, Option Compare, Option Explicit, Option Private, Private, Public, y Type. Las instrucciones Sub, Function, y Property ocurren fuera del cuerpo de los procedimientos pero dentro de la declaración de procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


El uso de ParamArray no es válido
Uso no válido de ParamArray

El parámetro definido como ParamArray se está utilizando incorrectamente en el procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó pasar ParamArray como argumento para otro procedimiento que espera una matriz o una ByRef Variant.

Asigne el parámetro ParamArray a una Variant, y a continuación pase la variant.

•	Intentó utilizar una instrucción Erase o ReDim con un parámetro ParamArray dentro de su procedimiento.

Elimine la instrucción Erase o ReDim. Estas operaciones no se pueden ejecutar en el parámetro ParamArray.

Si desea más información, seleccione el tema en cuestión y presione F1.


El nombre del procedimiento no es válido
Nombre de procedimiento no válido

Existen limitaciones a la asignación de nombres de procedimiento además de las reglas para la asignación de nombres a los identificadores. Las causas y posibles soluciones de este error son las siguientes:

•	Ha intentado definir un procedimiento pero el nombre utilizado por el procedimiento es ilegal debido a que la aplicación host utiliza ese identificador para otro propósito. Por ejemplo, si la aplicación host es Microsoft Excel, no puede definir un procedimiento con el nombre L1C1 ya que el identificador está siendo usado por Microsoft Excel.

Elija otro nombre para el procedimiento.

•	El nombre del procedimiento es el de una palabra clave restringida, excede de 255 caracteres o no comienza con una letra.

Elija otro nombre para el procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


El calificador no es válido
Calificador no válido

Los calificadores se utilizan para eliminar ambigüedades. Las causas y posibles soluciones de este error son las siguientes:

•	El calificador debe identificar un proyecto, módulo, objeto, o una variable de tipo definido por el usuario sin el alcance actual.

Compruebe la ortografía del calificador. Verifique que el identificador de calificación está dentro del alcance actual. Por ejemplo, una variable de tipo definido por el usuario en un módulo Private solamente es visible dentro de ese módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


ReDim no es válido
ReDim no válido

No todas las matrices admiten un cambio de dimensiones. Las causas y posibles soluciones de este error son las siguientes:

•	Una variable se declaró implícitamente como Variant, y el usuario intentó utilizar ReDim para cambiarla a una matriz

Una Variant puede contener una matriz, pero si no se declara explícitamente, no puede utilizar ReDim para transformarla en una matriz. Declare la Variant antes de utilizar ReDim para especificar el número de elementos que puede contener. Por ejemplo, en el siguiente código, ReDim AVar(10) origina un error de ReDim no válida, pero ReDim BVar(10) no lo origina:

AVar = 1	' Declaración ímplicita de AVar.

ReDim AVar(10)	' Origina un error ReDim no válido.

.

.

.

Dim BVar	' Declaración explicita de BVar.

ReDim BVar(10)	' No origina error.

•	Intentó utilizar ReDim para cambiar más de una dimensión de una matriz incluida en una Variant.

Solamente puede utilizar ReDim para cambiar el tamaño de la última dimensión de una matriz en una Variant. Si desea crear una matriz que tenga múltiples dimensiones a las que se pueda cambiar el tamaño, no puede incluirla dentro de una Variant, y tiene que declararla siguiendo el método normal

•	Solamente puede utilizar ReDim para cambiar el número de elementos de una matriz normal, no el tipo de tales elementos.

Si desea una matriz donde pueda cambiar los tipos de elementos, utilice una matriz incluida en una Variant. Si declara la matriz en primer lugar, el cambio de los tipos (así como de los números) de sus elementos se puede realizar de la siguiente forma:

Dim MiVar As Variant	' Declara la variable.

ReDim MiVar(10) As String	' ReDim como matriz de subtipos String.

ReDim MiVar(20) As Integer	' ReDim como matriz de subtipos Integer.

ReDim MiVar(5) As Variant	' ReDim como matriz de subtipos Variant.

•	Intentó utilizar ReDim con una matriz que es miembro de un objeto OLE.

Elimine ReDim.

Nota   Si no especifica un tipo para la variable, ésta recibe el tipo predeterminado, Variant. Esto no siempre resulta obvio. Por ejemplo, el siguiente código declara dos variables, la primera de las cuales, MiVar, es Variant, y la segunda, OtraVar, es Integer.

Dim MiVar, OtraVar As Integer

Si desea más información, seleccione el tema en cuestión y presione F1.


Sintaxis no válida para declaraciones de constante de compilación condicional

Introducir constantes de compilador condicional en un cuadro de diálogo Opciones es distinto que declarar constantes. Las causas y posibles soluciones de este error son las siguientes:

•	Utilizó una sintaxis inadecuada al introducir una declaración de constante en un cuadro de diálogo Opciones.

La única sintaxis válida es una asignación sencilla de un valor entero al identificador. Asegúrese de que la sintaxis para la entrada sigue este formato, separando cada constante mediante dos puntos(:):

nombreconstante = [{+ | – }]valorentero : [{+ | – }]nombreconstante = valorentero [...]

Si desea más información, seleccione el tema en cuestión y presione F1.


El carácter de declaración de tipo no es válido
Carácter de declaración de tipo no válido

Los caracteres de declaración de tipo son válidos pero no existen para todos los tipos de datos; no se permiten en algunas situaciones. Las causas y posibles soluciones de este error son las siguientes:

•	Existe un carácter de declaración de tipo agregado a una variable declarada en una instrucción Private, Public, o Static con una cláusula As.

Elimine el carácter de declaración de tipo.

•	Un carácter de declaración de tipo se ha adherido a un literal incoherente. Por ejemplo, como (&) es el carácter de declaración de tipo para un entero Long, adherirlo a un literal de tipo diferente causa tal error:

10.253&

Elimine el carácter de declaración de tipo o sustitúyalo por el correcto.

Si desea más información, seleccione el tema en cuestión y presione F1.


El uso del operador AddressOf no es válido

El operador AddressOf modifica un argumento para transferir la dirección de una función en vez de transferir el resultado de la llamada de la función. Este error tiene las causas y soluciones siguientes:

•	Intentó utilizar AddressOf con el nombre de un método de clase.

Sólo se pueden modificar los nombres de procedimientos de Visual Basic en un módulo .bas con AddressOf. No puede especificar un menú de clase.

•	El nombre del procedimiento modificado por AddressOf se definió en un módulo de otro proyecto.

•	Intentó modificar el nombre de una función de DLL o una función definida en una biblioteca de tipos con AddressOf.

•	Las funciones de DLL y biblioteca de tipos no se pueden modificar con AddressOf.

La definición de procedimiento debe estar en un módulo del proyecto actual. Mueva la definición a un módulo de este proyecto o incluya el módulo actual en el proyecto.

Si desea más información, seleccione el tema en cuestión y presione F1.


El uso de la palabra clave Me no es válido
Uso no válido de la palabra clave Me

La palabra clave Me puede aparecer en módulos de clase. Las causas y posibles soluciones de este error son las siguientes:

•	La palabra clave Me apareció en un módulo standard.

La palabra clave Me no puede aparecer en un módulo estándar puesto que estos módulos no representan ningún objeto. Si copió el código en cuestión desde un módulo de clase, tiene que reemplazar la palabra clave Me por el nombre del objeto o formulario específico para conservar la referencia original.

•	La palabra clave Me aparece en la parte izquierda de una asignación Set, por ejemplo:

Set Me = MiObjeto	' Causa "Uso no válido de la palabra clave Me"

Elimine la asignación Set.

Nota   La palabra clave Me puede aparecer en la parte izquierda de una asignación Let, en cuyo caso se establece la propiedad predeterminada del objeto representado por Me. Por ejemplo:

Let Me = MiObjeto	' Asignación válida con Let explícito.

Me = MiObjeto	' Asignación válida con Let implícito.

Si desea más información, seleccione el tema en cuestión y presione F1.


El uso de la palabra clave New no es válido
Uso no válido de la palabra clave New

La palabra clave New solamente se puede aplicar a un objeto que se pueda crear con OLE (y a una instancia de una clase o de un objeto de Automatización). Las causas y posibles soluciones de este error son las siguientes:

•	Intentó crear una segunda instancia de algo que solamente puede tener una. Por ejemplo, intentó crear una nueva instancia de un módulo especificando Módulo1 en una instrucción como la siguiente:

Dim MiMod As New Module1

No puede crear la nueva instancia, porque un módulo solamente puede tener una.

•	Intentó crear una segunda instancia de un objeto OLE, pero no se trata de un objeto que se pueda crear con OLE. Por ejemplo, intentó crear una nueva instancia de un cuadro de lista especificando ListBox en una instrucción como la siguiente:

' Sintaxis válida para crear la variable.

Dim MiCuadrodeLista As ListBox

Dim MiFormInst As Form

' Sintaxis no válida para crear una segunda instancia del objeto.

Set MiFormInst = New Form

Set MiCuadrodeLista = New ListBox

ListBox y Form son nombres de clases, no nombres de objetos específicos. Puede utilizarlos para especificar que una variable será referida para un tipo de objeto, determinado, como sucede con las instrucciones Dim válidas del ejemplo anterior. Pero no puede utilizarlos para crear una nueva instancia de los propios objetos en una instrucción Set. Es necesario especificar un objeto determinado, en lugar del nombre de clase genérico, en la instrucción Set:

' Sintaxis válida para crear nueva instancia de un formulario o cuadro de lista.

Set MiFormInst = New Form1

Set MiCuadrodeLista = New List1

Si desea más información, seleccione el tema en cuestión y presione F1.


El uso del objeto no es válido
Uso no válido del objeto

Ha tratado de utilizar un objeto de una manera en que no puede hacerlo. Las causas y posibles soluciones de este error son las siguientes:

•	Debe haber tratado de interrumpir la referencia de un objeto utilizando Nothing, pero ha omitido la palabra clave Set:

MiObjeto = Nothing

Utilice la instrucción Set para establecer un objeto como Nothing. Si se asume que MiObjeto es un objeto, para asignarle Nothing se debe utilizar la instrucción Set:

Set MiObjeto = Nothing

Si se omite la palabra clave Set se usa implícitamente Let, la cual causa un intento de asignación de valor y no uno de asignación de referencia. Nothing no se puede usar en una asignación de valor.

•	Intentó utilizar Nothing en una expresión.

Vuelva a escribir la expresión sin el Nothing.

Si desea más información, seleccione el tema en cuestión y presione F1.


No coincide el tipo de procedimiento
Uso no válido de Property

Está utilizando un tipo de procedimiento Property donde se espera otra clase distinta de procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	Está intentando escribir en una propiedad que es de sólo lectura.

Si el único procedimiento Property definido para la propiedad es Property Get, no puede asignar ningún valor a la propiedad. Escriba un procedimiento Property adecuado o no intente escribir en la propiedad.

•	Está intentando leer una propiedad que es de sólo escritura.

Si el único procedimiento Property definido para la propiedad es Property Let, no puede leer el valor de la propiedad. Escriba un procedimiento Property Get apropiado o no intente escribir en la propiedad.

•	Está intentando establecer una referencia, pero la propiedad solamente tiene procedimientos Property Get o Property Let.

Escriba un procedimiento Property Set para la propiedad, o no intente establecer ninguna referencia para ella.

Si desea más información, seleccione el tema en cuestión y presione F1.


Expresión de inspección no válida
La expresión de inspección de variables no es válida

La expresión de inspección especificada no es una expresión válida. Las causas y posibles soluciones de este error son las siguientes:

•	La expresión de inspección de variables puede ser incorrecta sintácticamente.

Verifique que la sintaxis para la expresión de inspección de variables corresponde a la configuración regional del proyecto en el cual se define la expresión bajo inspección.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se ha definido la etiqueta
Rótulo no definido

Las causas y posibles soluciones de este error son las siguientes:

•	Se hace referencia a un etiqueta de línea o número de línea (en una instrucción GoTo, por ejemplo), pero éste no existe dentro del alcance de la referencia.

La etiqueta debe estar dentro del procedimiento que contiene la referencia. Las etiquetas de línea solamente son visibles dentro de sus propios procedimientos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Ha cambiado la configuración de idioma/país
La configuración de Idioma/País ha cambiado

Las causas y posibles soluciones de este error son las siguientes:

•	La configuración de Idioma/País ha cambiado para el entorno Visual Basic.

Sea consciente de que esto puede ocasionar problemas, aunque en sí mismo es legal.

Si desea más información, seleccione el tema en cuestión y presione F1.


La línea no es una instrucción ejecutable

Las declaraciones y comentarios no son instrucciones ejecutables. Las causas y posibles soluciones de este error son las siguientes:

•	Eligió el comando Paso a paso hasta cursor, pero la línea donde está el cursor no contiene ninguna instrucción ejecutable.

Incluya el cursor en una instrucción ejecutable cerca de la línea actual.

Para obtener información adicional, seleccione el comando Paso a paso hasta cursor en el menú Ejecutar y presione F1.


Línea demasiado larga
La línea es demasiado larga

Una línea física de código de Visual Basic puede tener hasta 1023 caracteres. Las causas y posibles soluciones de este error son las siguientes:

•	Una línea contiene muchos caracteres.

Puede crear una línea lógica más larga uniendo líneas físicas con un carácter de continuación de línea (un espacio en blanco seguido de un guión ( _)). Se pueden unir hasta diez líneas físicas con caracteres de continuación de línea para formar una sola línea lógica. Por lo tanto, una línea lógica puede tener un total de 10230 caracteres. Para exceder este límite, debe dividir la línea en instrucciones individuales o asignar algunas expresiones a variables intermedias.

Si desea más información, seleccione el tema en cuestión y presione F1.


Loop sin Do
Se ha encontrado Loop sin Do

Un bucle Do debe comenzar con una instrucción Do. Las causas y posibles soluciones de este error son las siguientes:

•	Puede tener un bloque de bucle no determinado anidado dentro de otro bucle.

Verifique si ha usado la sintaxis correcta Do...Loop.

Si desea más información, seleccione el tema en cuestión y presione F1.


LSet se permite solamente en cadenas y tipos definidos por el usuario
Se permite LSet solamente en cadenas o en tipos definidos por el usuario

LSet se utiliza para alinear a la izquierda dentro de cadenas y variables de tipo definido por el usuario. Las causas y posibles soluciones de este error son las siguientes:

•	La variable especificada no es una cadena ni un tipo definido por el usuario.

Si está intentando asignar mediante bloqueo una matriz a otra, LSet no funciona. Debe utilizar un bucle para asignar cada elemento individualmente.

•	Intentó utilizar LSet con un objeto.

LSet también se puede utilizar para asignar los elementos de una variable de tipo definido por el usuario a los elementos de un tipo definido por el usuario diferente, aunque compatible. Aunque los objetos son parecidos a tipos definidos por el usuario, no puede utilizar LSet en ellos. Igualmente, no puede usar LSet en variables de tipos definidos por el usuario que contengan cadenas, objetos o variantes.

Si desea más información, seleccione el tema en cuestión y presione F1.


LSet no está permitido
No se permite LSet

LSet sirve para alinear a la izquierda los datos dentro de cadenas y variables de tipo definidos por el usuario. Las causas y posibles soluciones de este error son las siguientes:

•	No puede utilizar LSet en variables de tipos definidos por el usuario que contienen cadenas, objetos o variantes.

Debe asignar los elementos individualmente desde esta variable de tipo definido por el usuario a otra.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se agrego el número máximo de expresiones de inspección
Número máximo de expresiones de inspección agregadas

Existe un límite en cuanto al número de expresiones de inspección que puede contener el panel de Inspección. Las causas y posibles soluciones de este error son las siguientes:

•	Ha agregado el número máximo de expresiones de inspección al panel de Inspección.

Elimine una expresión de inspección para cada una de las nuevas que desea agregar, o muestre el valor sobre el que desea conocer datos en el panel Inmediato.


Método o miembro no definido

La colección, objeto o tipo definido por el usuario no contiene el miembro referido. Las causas y posibles soluciones de este error son las siguientes:

•	Es posible que se haya deletreado mal el nombre del miembro o del objeto.

Compruebe la ortografía de los nombres y verifique la instrucción Type o la documentación del objeto para determinar los miembros y la forma correcta de escribir el nombre del miembro o del objeto.

•	Es posible que se haya especificado un índice de colección que está fuera de intervalo.

Verifique la propiedad Cuenta para determinar si existe un miembro de la colección. Observe que los índices de la colección comienzan en 1 en lugar de en cero, de forma que la propiedad Count Cuenta devuelve el mayor número de índice posible.

Si desea más información, seleccione el tema en cuestión y pulse F1.


El miembro ya existe en un módulo de objeto del que proviene

Los identificadores utilizados para los miembros del módulo de objetos no pueden entrar en conflicto con los nombres ya utilizados en un módulo de objeto del que proviene. Las causas y posibles soluciones de este error son las siguientes:

•	Un procedimiento o un identificador de miembro de datos en el módulo de objeto utiliza un identificador ya utilizado en el módulo de objeto del que proviene. Por ejemplo, un formulario tiene una propiedad BackColor, por lo que el código siguiente produciría este error:

' El formulario ya tiene la propiedad BackColor.

Dim BackColor As Integer	' Genera el error.

Function BackColor()	' Genera el error.

End Function

Cambie el identificador que entra en conflicto con el identificador de miembro en el módulo de objeto.

Si desea más información, seleccione el tema en cuestión y presione F1.


Método no válido sin un objeto adecuado

No todos los objetos pueden ejecutar todos los métodos. Las causas y posibles soluciones de este error son las siguientes:

•	Llamó a un método sin especificar un objeto y el método no es válido para el objeto implícito. Por ejemplo, no puede utilizar el método Line en un módulo estándar sin un calificador de objeto válido porque un módulo estándar no puede mostrar la salida del método Line.

Califique explícitamente la llamada del método con un objeto que pueda aceptar el método. Por ejemplo, puede especificar un formulario o un cuadro de imagen con el método Line.

Nota   Otros métodos necesitan un calificador de objeto específico cuando se utilizan en un módulo estándar incluyendo Circle, Print y PSet.

Si desea más información, seleccione el tema en cuestión y presione F1.


Falta el paréntesis de cierre
Falta el corchete final

Los corchetes deben aparecer en las instrucciones en pares. Las causas y posibles soluciones de este error son las siguientes:

•	El corchete de inicio debe tener el corchete de cierre correspondiente.

Incluya un corchete de cierre al final del material que desea incluir entre los corchetes.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el módulo

Los módulos no se cargan desde una referencia — sino que deben formar parte del proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	No existe el módulo que se ha pedido en el proyecto especificado. Por ejemplo, la instrucción MiModulo.AlgunaVariable = 5 produce este error cuando MiModulo no es visible en el proyecto MiProyecto.

Consulte la documentación de la aplicación host para obtener información sobre la manera de incluir el módulo en el proyecto.


Módulo demasiado grande

Los módulos contienen código que forma parte del proyecto. Este error tiene la causa y la solución siguientes:

•	Hay demasiado código en el módulo.

Cree un nuevo módulo y traslade algunos de los procedimientos del módulo actual al nuevo. Si el módulo actual contiene declaraciones de datos a nivel de módulo que deban ser visibles para los procedimientos del módulo nuevo, declare tales datos con Public.

Nota   Los comentarios no se cuentan como líneas de código, por lo que eliminarlos no evita este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


Debe ser la primera instrucción de la línea
Debe ser la primera instrucción en la línea

No todas las palabras clave pueden aparecer al principio de una línea de código. Las causas y posibles soluciones de este error son las siguientes:

•	Las instrucciones Sub, Function, y Property deben ser siempre la primera instrucción de cualquier línea en que aparezcan

Una instrucción Sub, Function, o Property siempre debe ser la primera instrucción de la línea en la que aparece (a menos que vaya precedida por la palabra clave Public, Private, o Static).

•	Ha precedido la instrucción End If, Else, o ElseIf con otra instrucción en la misma línea.

Además End If, Else, o ElseIf (sólo cuando se usa en una estructura de bloque If) sólo se pueden usar cuando son las primeras instrucciones de una línea.

Si desea más información, seleccione el tema en cuestión y presione F1.


El nombre entra en conflicto con un módulo, proyecto o biblioteca de objetos existente
El nombre está en conflicto con el módulo, la biblioteca de objetos o proyecto existentes

Los módulos, las bibliotecas de objetos, y los proyectos referidos deben tener asignado un nombre único dentro de un proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	Ya existe una biblioteca de objetos, proyecto o módulo con el nombre referido en este proyecto. Además, la extensión del archivo no se considera parte del nombre, por lo que no se admite el uso de extensiones distintas para distinguir un archivo de otro.

Utilice un nombre distinto para una de las referencias duplicadas a módulo, proyecto o biblioteca de objetos.

•	Este error puede ocurrir también cuando se intenta agregar una referencia a un proyecto o biblioteca cuyo nombre de archivo (sin la extensión) es el mismo que el de uno de los módulos de proyecto activos.

Para agregar el archivo, cambie el nombre del archivo que no pudo ser agregado.

Si desea más información, seleccione el tema en cuestión y presione F1.


El argumento con nombre ya está especificado
Ya se ha especificado el argumento con nombre

Los argumentos con nombre sólo se pueden usar una vez en una lista de argumentos de cada invocación de procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó el mismo argumento con nombre dos o más veces en una sola llamada. Por ejemplo, si el procedimiento MiSub espera los argumentos con nombre Arg1 and Arg2, las siguientes llamadas producen este error:

Call MiSub(Arg1 := 3, Arg1 := 5)

Elimine una de las especificaciones duplicadas.

•	Especificó un mismo argumento tanto por su posición como mediante un argumento por nombre, por ejemplo:

Call MiSub(1, Arg1 := 3)

Elimine una de las especificaciones duplicadas.

Si desea más información, seleccione el tema en cuestión y presione F1.


Los argumentos con nombre no están permitidos
No se permiten argumentos con nombre

Los argumentos con nombre no se admiten en todas las situaciones. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó especificar un argumento con nombre como índice de matriz , por ejemplo:

MyVar = MiMatriz(MyNamedArg := 1)

Utilice una variable normal o una expresión constante como índice de matriz.

•	Intentó especificar un argumento con nombre con un objeto, por ejemplo:

MyVar = MyObject(MyNamedArg := 1)

Utilice una variable o una expresión constante si el objeto necesita un argumento. Por ejemplo, si el valor predeterminado de un objeto es un método, el nombre del objeto representa el método predeterminado. Si necesita argumentos, especifíquelos mediante posición

•	Intentó especificar un argumento con nombre con un nombre externo:

MyVar = [MyName](MyNamedArg := 1)

Utilice una variable normal o una expresión constante si el nombre externo necesita un argumento.

•	Intentó especificar un argumento con nombre con un miembro de datos de un objeto, por ejemplo:

MyVar = [MyObject].MyProperty(MyNamedArg := 1)

Utilice una variable normal o una expresión constante si el miembro de datos necesita un argumento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Next sin For

Una instrucción Next debe corresponderse con una instrucción For precedente. Las causas y posibles soluciones de este error son las siguientes:

•	Se usó una instrucción Next sin su correspondiente instrucción For.

Compruebe otras estructuras de control en la estructura For...Next y verifique que se corresponden apropiadamente. Por ejemplo, un If sin su End If correspondiente dentro de la estructura For...Next producirá este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay texto seleccionado

Debe seleccionar texto para realizar esta operación. Las causas y posibles soluciones de este error son las siguientes:

•	No seleccionó texto antes de iniciar una operación Buscar o Reemplazar.

Algunas aplicaciones host le permiten especificar el alcance de Selección al buscar y reemplazar texto, aunque no haya texto seleccionado. Para seleccionar texto, sitúe el cursor al principio de la selección deseada, mantenga presionada la tecla MAYÚS y utilice las teclas de dirección, o bien haga clic al final del texto que desea seleccionar para efectuar la selección. Si no desea buscar en el texto seleccionado, deshaga la opción Selección.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay memoria suficiente para guardar completamente el proyecto

Cuando se guarda un proyecto, la información adicional normalmente se guarda para permitir cargar del proyecto en una versión posterior o en una plataforma diferente. Las causas y posibles soluciones de este error son las siguientes:

•	La memoria disponible no es suficiente para guardar información que será necesaria si intenta cargar el proyecto en una versión posterior de Visual Basic o en una plataforma diferente.

Si pretende abrir el proyecto en una versión posterior de Visual Basic o en una plataforma diferente, cierre algunas aplicaciones e intente guardar de nuevo.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay una expresión de inspección seleccionada
Inspección de variable no seleccionada

Debe tener una expresión seleccionada cuando elija el comando Inspección instantánea. Las causas y posibles soluciones de este error son las siguientes:

•	No seleccionó la expresión a inspeccionar antes de elegir Inspección instantánea.

Resalte la expresión de inspección deseada en la ventana Código antes de elegir Inspección instantánea.

Si desea más información, seleccione el tema en cuestión y presione F1.


La característica de la biblioteca de objetos no es compatible
No se admite esta biblioteca de objetos

Es posible disponer en una biblioteca de objetos de prestaciones que no tengan equivalente en Visual Basic. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha intentado obtener acceso a un tipo de datos o función de una biblioteca de objetos que no tiene apoyo de Visual Basic.

Póngase en contacto con el autor de la biblioteca de objetos para obtener más información sobre cuándo es apropiado usar la biblioteca de objetos y sobre las herramientas que se debe usar

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encuentra la biblioteca de objetos para Visual Basic for Applications
No se ha encontrado la biblioteca de objetos de Visual Basic

La biblioteca de objetos Visual Basic for Applications ya no es un archivo independiente; está integrada en la biblioteca de vínculos dinámicos (DLL).

Bajo circunstancias no habituales se podría necesitar una versión anterior de la biblioteca de objetos (vaxxx.olb o vaxxxx.olb) que corresponde al idioma del proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	Puede que se haya perdido la biblioteca de objetos por completo, que no se encuentre en el directorio esperado o que sea una versión incorrecta.

Compruebe que el disco se encuentra en el directorio correcto, como se especifica en la documentación de la aplicación host.

Si la biblioteca que falta es una versión del idioma que está instalado por la aplicación host, puede que sea más sencillo ejecutar simplemente el programa de instalación. Si el proyecto requiere un idioma de biblioteca de objetos diferente del que viene con la aplicación host (por ejemplo, si alguien le mandó un proyecto escrito en una máquina con diferente configuración de idioma), asegúrese de que la versión correcta del idioma de la biblioteca de objetos Visual Basic está incluida con el proyecto y que esté instalada en el lugar esperado.

Las aplicaciones pueden apoyar varias versiones del idioma de las bibliotecas de objetos. Para averiguar qué versión del idioma se requiere, haga clic en Referencia y verifique el idioma que se indica en la parte de abajo del cuadro de diálogo..

Las bibliotecas de objetos existen en diferentes versiones en cada plataforma. Por lo tanto, cuando se mueven proyectos de una plataforma a otra (por ejemplo, de Macintosh a Windows), la versión actual del idioma de la biblioteca referida (en la plataforma) debe estar disponible en el lugar especificado en la documentación de la aplicación host. Observe que algunos códigos de idioma tienen dos caracteres mientras que otros tienen tres.

El nombre del archivo de la biblioteca de objetos de Visual Basic se construye de esta manera:

•	Windows: Código de la aplicación + Código de idioma + [Versión].OLB. Por ejemplo:

VAES2.OLB sería la biblioteca de objetos de Visual Basic en Español.

•	Macintosh: Nombre de la aplicación Código de idioma [Versión] OLB. Por ejemplo:

VA ES 2 OLB sería la biblioteca de objetos de Visual Basic en Español.

Si no puede encontrar la biblioteca o el proyecto que busca en el sistema, póngase en contacto con el autor del proyecto de referencia.Si la biblioteca que se busca es una biblioteca de objetos de aplicaciones de Microsoft, se la puede obtener de esta manera

•	Si tiene acceso a los servicios de apoyo técnico electrónico de Microsoft, vaya a la sección de soporte técnico de este archivo de Ayuda. En servicios electrónicos encontrará instrucciones sobre cómo usar la opción de servicio apropiada.

•	Si no tiene acceso a los servicios de apoyo técnico electrónico de Microsoft, la bibliotecas de objetos de Microsoft estarán disponibles a petición del usuario con las tarjeta de pedido de Microsoft. Hay información sobre cómo ponerse en contacto con la organización local de apoyo al producto de Microsoft también en la sección de apoyo técnico de este archivo de Ayuda.

Si desea más información, seleccione el tema en cuestión y presione F1.


La biblioteca de objetos no está registrada
Biblioteca de objetos no registrada

La biblioteca de objetos Visual Basic for Applications ya no es un archivo independiente; está integrada en la biblioteca de vínculos dinámicos (DLL).

En las primeras versiones, cuando iniciaba una aplicación que utilizaba Visual Basic for Applications, se cargaban algunas bibliotecas de objetos. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha intentado cargar la biblioteca de objetos de Visual Basic (VAXXX.OLB) o las bibliotecas de objetos de aplicación host.Sin embargo, no se pudo encontrar la versión correcta del idioma de estas bibliotecas en el registro del sistema.

Elimine el archivo VBA.INI del directorio de Microsoft Windows o de la carpeta Preferencias de Macintosh, y reinicie la aplicación.

Si desea más información, seleccione el tema en cuestión y presione F1.


La configuración del idioma en la biblioteca de objetos no es compatible con el proyecto actual
Configuración de idioma de la biblioteca de objetos incompatible con el proyecto actual

No se pudo agregar la referencia. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó agregar una referencia a una biblioteca de objetos cuya configuración regional no es compatible con la del proyecto. La referencia no se agregó. Para utilizar esta biblioteca de objetos, es necesario crear un proyecto cuya configuración regional sea compatible con ella.

Intente registrar tanto Visual Basic para aplicaciones como la aplicación host para el idioma dado. Después de hacerlo, la biblioteca de objetos pasa a estar disponible en el cuadro de diálogo Referencias.

Nota   Cuando Visual Basic es la aplicación host, no es posible cambiar la configuración de idioma de un proyecto. Las bibliotecas de objetos utilizadas deben ser compatibles con la configuración Inglés/US.


Tipo no admitido en Visual Basic
Tipo OLE no admitido en Visual Basic

Visual Basic no admite todos los tipos. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar un tipo en el programa que no tiene equivalente en Visual Basic for Applications. Por ejemplo, Visual Basic no tiene tipo puntero o entero sin signo, por lo que se produce este error si intenta crear una variable de uno de estos tipos desde una biblioteca de objetos. En el siguiente ejemplo, aunque Arcoiris pueda ser una estructura válida, Visual Basic no puede crear una variable de ese tipo si contiene  un tipo que Visual Basic no reconoce:

Dim MiVar As Arcoiris	' Produce un error.

Si el tipo es un tipo de parámetro válido para una función en una biblioteca de objetos, este error sólo quiere decir que no puede crear una variable de ese tipo en el código. Aunque nunca puede declarar variables con un tipo de datos especificado en la documentación de un objeto, hay frecuentemente un equivalente Visual Basic. Por ejemplo, aunque Visual Basic no tiene tipo puntero, puede transferir un puntero a una función de una función API utilizando el operador AddressOf. También, compruebe los subtipos del tipo de datos Variant. Frecuentemente puede utilizarlos como tipos que no se ofrecen directamente en Visual Basic. En algunos casos, sin embargo, Visual Basic simplemente no tiene equivalente. Por ejemplo, no se dispone de punteros de datos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Los comentarios solamente pueden aparecer después de End Sub, End Function o End Property
Sólo pueden aparecer comentarios después de End Sub, End Function, o End Property

Fuera de los procedimientos solo se permiten comentarios, directivas y declaraciones. Las causas y posibles soluciones de este error son las siguientes:

•	Incluyó código ejecutable fuera de un procedimiento.

Cualquier línea no declaratoria fuera de un procedimiento debe comenzar con un delimitador de comentario (un apóstrofo). Las instrucciones declaratorias deben aparecer antes de la primera declaración del procedimiento. Los comentarios se ignoran cuando se ejecuta el código.

Si desea más información, seleccione el tema en cuestión y presione F1.


El argumento Optional debe ser un tipo Variant
El argumento opcional debe ser de tipo Variant

Los argumentos opcionales pueden tener un tipo de datos intrínseco, pero debe ser un tipo con un único valor predeterminado. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó especificar Optional con un parámetro que no tiene un valor predeterminado, por ejemplo, una matriz.

Asegúrese de que el argumento especificado como Optional tiene un valor predeterminado.

Si desea más información, seleccione el tema en cuestión y presione F1.


Option Private Module no permitida en un módulo de objeto

Option Private Module hace que el contenido de un module no esté disponible para otros proyectos, mientras que conserva su disponibilidad en el actual. Las causas y posibles soluciones de este error son las siguientes:

•	La instrucción Option Private Module aparece en un módulo de objeto.

Quite la instrucción Option Private Module del módulo. Los módulos de objeto tiene las características de Option Private Module de forma predeterminada. No se puede cambiar el valor predeterminado mediante código. Vea la documentación de la aplicación host para obtener más información sobre cómo dar mayor visibilidad a los miembros del módulo de objeto.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay memoria; debe eliminar algunas inspecciones
No hay suficiente memoria; se pueden haber eliminado algunas inspecciones de variables

Cuando no hay memoria suficiente en el sistema, se elimina las expresiones de inspección de variable para liberar suficiente memoria para permitir la recuperación de esta condición. Las causas y posibles soluciones de este error son las siguientes:

•	Tiene cargadas demasiadas aplicaciones, proyectos, o módulos.

Para continuar trabajando, elimine de la memoria cualquier elemento que no sea indispensable, incluyendo aplicaciones, proyectos y módulos innecesarios.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay recursos
No hay recursos suficientes

Ciertos tipos de recursos llamados objetos de gestión (handles), son usados internamente en muchas operaciones. Las causas y posibles soluciones de este error son las siguientes:

•	El código puede haber alcanzado un límite de recursos.

Trate de guardar, cerrar y volver a cargar el código. Si aún se recibe este mensaje de error, reduzca el número de objetos a que el código hace referencia.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se debe declarar ParamArray como una matriz de tipo Variant
ParamArray debe declararse como una matriz del tipo Variant

Cada argumento de un parámetro ParamArray puede ser de un tipo de datos distinto. Por lo tanto, el parámetro en sí debe declararse como matriz de tipo Variant. También puede proporcionar cualquier número de argumentos para un ParamArray. Cuando se hace la llamada, cada argumento suministrado en la llamada se convierte en un elemento correspondiente de la matriz Variant. Por ejemplo:

Sub MySub(ParamArray VarArg())

. .

End Sub

Call MySub ("Primer arg", 2, 3.54)

Las causas y posibles soluciones de este error son las siguientes:

•	En la definición del procedimiento, el parámetro ParamArray se define como una matriz de un tipo distinto de Variant.

Vuelva a declarar el tipo de parámetro como una matriz de elementos Variant.

•	No se especificó ningún tipo de datos para el parámetro ParamArray, pero la definición del procedimiento está dentro del alcance de una instrucción Deftipo, por lo que el parámetro se declaró implícitamente como de un tipo distinto de Variant.

Utilice una cláusula As Variant explícita en la especificación del parámetro ParamArray.

Si desea más información, seleccione el tema en cuestión y presione F1.


Consulte el archivo Leame para obtener más información acerca de este tema
Consulte el archivo Léame para obtener más información de este error

Algunos temas se agregaron a este producto después de completar la Ayuda. Se pueden encontrar explicaciones de Ayuda para este tema en el archivo Léame de la aplicación host.

Si desea más información, seleccione el tema en cuestión y presione F1.


Los tipos Private Enum no se pueden utilizar como parámetros o para devolver tipos de procedimientos públicos o como miembros d
Sólo se pueden utilizar tipos Enum públicos en módulos de clase públicos como parámetros o tipos devueltos por procedimientos públicos, o como miembros de datos públicos

Un procedimiento Public es visible a todos los módulos de un proyecto, mientras que un tipo Private Enum no es visible fuera del propio módulo. Las causas y posibles soluciones de este error son las siguientes:

•	El procedimiento Public está en una clase Public, pero devuelve un valor o tiene un parámetro que se definió en un módulo estándar o en una clase Private.

Declare el Enum Public. Debe estar en un módulo de clase.

Si desea más información, seleccione el tema en cuestión y presione F1.


Procedimiento demasiado largo

Al compilarlo, el código de un procedimiento no puede exceder los 64 KB. Este error tiene la causa y la solución siguientes:

•	El código de este procedimiento tiene más de 64 KB al compilarlo.

Divida éste y otros procedimientos de gran tamaño en dos o más procedimientos más pequeños.

Si desea más información, seleccione el tema en cuestión y presione F1.


El proyecto contiene demasiados nombres de procedimientos, variables y constantes

Un procedimiento de un proyecto, una variable, una constante y los nombres de parámetro se almacenan en una tabla con nombre. Las causas y posibles soluciones de este error son las siguientes:

•	El número de nombres en la tabla de nombres del proyecto excede 32.768.

La tabla de nombres puede contener algunas repeticiones temporalmente. Puede compactar la tabla de nombres guardando el proyecto en un disco y después cerrándolo. Si el problema continua después de volver a abrir el proyecto, reduzca el número de nombres volviendo a utilizar nombres de variables locales en múltiples procedimientos y después vuelva a compactar la tabla guardando el proyecto, cerrándolo y volviéndolo a abrir.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el proyecto

No se ha encontrado el proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha especificado el nombre de un proyecto que no se ha podido encontrar.

Compruebe si cometió errores en la forma de especificar el proyecto.

Si desea más información, seleccione el tema en cuestión y presione F1.


El nombre calificado no está permitido en el ámbito del módulo
Nombre calificado no permitido en el alcance del módulo

Bajo determinadas circunstancias, algunas aplicaciones host no permiten llamadas de procedimiento que incluyan nombres calificados. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó un nombre de módulo en una llamada de procedimiento utilizando la notación con puntos(calificador.elemento).

Si recibe este error se debe, probablemente, a que la aplicación host ya conoce el calificador especificado y no necesita esta información en la llamada de procedimiento. En este caso, basta con omitir por completo el calificador y la aplicación host realizará correctamente la llamada de procedimiento. Consulte en la documentación de la aplicación host la razón de cualquier otra limitación en los nombres de calificadores.

Si desea más información, seleccione el tema en cuestión y presione F1.


El calificador debe ser una colección

El uso del signo de admiración entre dos identificadores es específico de las colecciones. Las causas y posibles soluciones de este error son las siguientes:

•	El nombre situado a la izquierda del signo de admiración (!) no es el nombre de una colección.

Si se supone que el nombre representa una colección, compruebe que lo ha escrito correctamente. Observe que el signo de admiración también es el carácter de declaración de tipo para el tipo de datos Single. Si se supone que el nombre en cuestión no es una colección, quizás el carácter de declaración de tipo! Añadido a un nombre de variable se ha concatenado con otro nombre.

Si desea más información, seleccione el tema en cuestión y presione F1.


El intervalo no tiene valores

Existen limitaciones en cuanto a la forma de especificar el número de elementos de una matriz. Las causas y posibles soluciones de este error son las siguientes:

•	Se especificaron las marcas de límite de la matriz incorrectamente. Por ejemplo, los siguientes intervalos no son válidos:

Dim MiMatriz(10 To -5)	' Orden descendente no permitido.

Dim MiMatriz(0 To 0)	' Ningún elemento en la matriz.

Compruebe que la sintaxis sea correcta. Por ejemplo, el siguiente intervalo es válido:

Dim MiMatriz(-5 To 10)

Si desea más información, seleccione el tema en cuestión y presione F1.


Solamente se permite RSet en cadenas
Sólo se permite RSet en cadenas

RSet se usa para alinear a la derecha cadenas de longitud fija o cadenas de longitud variable. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar la instrucción RSet en una variable que no es una cadena.

Si es adecuado, intente convertir la variable a una cadena. De lo contrario, no utilice RSet.

Nota   Aunque se puede utilizar la instrucción LSet para asignar los elementos de una variable de tipo definido por el usuario a los elementos de otra de un tipo definido por el usuario distinto, pero compatible, no se recomienda realizar estas asignaciones porque no se garantiza que sean transportables.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de ejecución <número>:

Este error es definido por el usuario, y tiene las siguientes causas y posibles soluciones:

•	Se generó un error que no se corresponde con un error de Visual Basic.

Controle el error tal y como se indica en la documentación para el objeto o la biblioteca de objetos que generó el error.

Si desea más información, seleccione el tema en cuestión y presione F1.


La cadena de búsqueda es muy larga o compleja
Cadena de búsqueda demasiado larga o compleja

Las capacidades de concordancia de patrones de Visual Basic no son ilimitadas. Las causas y posibles soluciones de este error son las siguientes:

•	La cadena de búsqueda especificada es demasiado larga o la combinación de las especificaciones comodín no es comprensible.

Reduzca la longitud o la complejidad de la cadena de búsqueda y vuelva a intentar la búsqueda.

Si desea más información, seleccione el tema en cuestión y presione F1.


Debe especificar una cadena de búsqueda
Se debe especificar la cadena de búsqueda

Tiene que especificar una cadena de búsqueda. Las causas y posibles soluciones de este error son las siguientes:

•	No se puede realizar una operación de búsqueda sin una cadena para comparar.

Es necesario especificar la cadena de búsqueda. Aunque puede especificar una cadena de longitud cero ("") como cadena de reemplazo, las cadenas de longitud cero no tienen ningún significado como cadenas de búsqueda.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el texto de búsqueda
No se encontró el texto buscado

No se encontró el texto buscado. Las causas y posibles soluciones de este error son las siguientes:

•	No hay ningún texto equivalente entre el punto de inicio y el punto de terminación del alcance de búsqueda especificado.

Puede ampliar el alcance de la búsqueda si desea continuar buscando.

•	No proporcionó el corchete izquierdo al utilizar una expresión de correspondencia de patrones.

Incluya el corchete izquierdo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Fallo en la búsqueda: imposible leer/escribir del/al disco
Falló Seek: no se puede leer/escribir del disco

Las instrucciones Seek son ejecutados directamente sobre el disco. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó leer desde un disco o archivo que está protegido contra escritura, es de sólo lectura o está bloqueado.

Elimine el atributo de protegido contra escritura o cambie el atributo de sólo lectura o el bloqueo. Observe que si otro proceso bloquea el archivo no le permitirá eliminar el bloqueo.

•	El archivo no está disponible (por ejemplo, se ha cambiado físicamente un disco extraíble).

Si el archivo se ha movido a otro disco, acceda a él en su nueva ubicación. De lo contrario, no podrá hacerlo.

•	Intentó leer en un archivo proyecto, una biblioteca de objetos, o una biblioteca de tipos, pero el archivo está dañado.

Obtenga una nueva copia de la biblioteca o del archivo de proyecto.

Si desea más información, seleccione el tema en cuestión y presione F1.


Select Case sin End Select
Se ha encontrado Select Case sin End Select

Cada construcción Select Case debe terminar con una instrucción End Select. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha usado una instrucción Select Case sin la instrucción End Select correspondiente.

Verifique si existe una estructura Select Case...End Select emparejada incorrectamente dentro de la estructura Select Case...End Select externa. Si se tienen instrucciones Select Case anidadas, cada una debe tener su End Select correspondiente.

Si desea más información, seleccione el tema en cuestión y presione F1.


La expresión de inspección seleccionada no es válida
La expresión de inspección de variables seleccionada no es válida

No siempre es posible seleccionar una expresión de inspección. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha elegido Inspección instantánea, pero la expresión no es una expresión válida. Por ejemplo, no se puede inspeccionar un comentario o una llamada de procedimientos Sub.

Seleccione la expresión de forma que sea válida, o elija Agregar Inspección y escriba una expresión válida.

•	La expresión de inspección de variable debe tener también la sintaxis de código correspondiente a la configuración regional del proyecto que define la expresión inspeccionada.

Vuelva a escribir la expresión de forma que sea válida para la configuración regional.

Si desea más información, seleccione el tema en cuestión y presione F1.


La instrucción Set Next sólo se puede aplicar a líneas ejecutables dentro del procedimiento actual.
Establecer siguiente instrucción sólo se aplica a líneas ejecutables dentro del procedimiento actual

Puede elegir el comando Establecer siguiente instrucción para indicar dónde debe comenzar un programa suspendido cuando se continúe la ejecución. Las causas y posibles soluciones de este error son las siguientes:

•	Cuando eligió el comando, el cursor estaba en una línea que no contenía ninguna instrucción ejecutable.

Sitúe el cursor en una línea que contenga una instrucción ejecutable e inténtelo de nuevo. Las declaraciones, etiquetas de línea, y comentarios no son ejecutables, por lo que las líneas que solamente contengan declaraciones, etiquetas y comentarios no pueden ser destinos del comando Establecer siguiente instrucción.

•	Cuando eligió el comando, el cursor estaba en una línea no perteneciente al procedimiento que se ejecuta actualmente.

Sitúe el cursor en una línea incluida en el procedimiento que se está ejecutando en este momento.


Es necesario SHARE.EXE
Se requiere SHARE.EXE

El programa SHARE.EXE debe estar en ejecución cuando se inicia Visual Basic. Las causas y posibles soluciones de este error son las siguientes:

•	No inició SHARE.EXE antes de iniciar Visual Basic

Cierre su aplicación, ejecute SHARE.EXE y después vuelva a iniciar su aplicación. Para evitar este problema en el futuro, invoque SHARE.EXE en el archivo AUTOEXEC.BAT para que se inicie automáticamente cuando se encienda la máquina.

Si desea más información, seleccione el tema en cuestión y presione F1.


Ya existe una referencia a la biblioteca o al proyecto especificados
Ya se ha referido la biblioteca o proyecto especificados

El cuadro de diálogo Agregar referencias muestra bibliotecas y proyectos referidos. Las causas y posibles soluciones de este error son las siguientes:

•	Ha elegido el botón Examinar en el cuadro de diálogo Agregar referencias, y después ha seleccionado una biblioteca de tipos o un proyecto que ya estaba en la sección Referencias disponibles del cuadro de diálogo Agregar referencias.

Si desea hacer que un proyecto o una biblioteca de tipos formen parte de su proyecto, muestre el cuadro de diálogo Referencias y asegúrese de que el nombre de este proyecto o esta biblioteca de tipos está señalado.

Si desea más información, seleccione el tema en cuestión y presione F1.


La instrucción no es válida dentro del bloque Type

Solamente se permiten nombres de elemento (como sus cláusulas As tipo), y comentarios comentarios dentro de un bloque de instrucciones Type...End Type. Las causas y posibles soluciones de este error son las siguientes:

•	Incluyó una instrucción no válida en una definición de tipo definido por el usuario.

Elimine todo lo que no sea un comentario, un nombre de elemento o una cláusula As tipo.

Si desea más información, seleccione el tema en cuestión y presione F1.


La instrucción no es válida fuera del bloque Type

La sintaxis para declarar variables fuera de un bloque de instrucciones Type...End Type es distinta de la sintaxis empleada para declarar los elementos del tipo definido por el usuario. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó declarar una variable fuera de un bloque Type...End Type o fuera de una instrucción.

Cuando declare una variable con una cláusula As fuera de un bloque Type...End Type, use una de las instrucciones de declaración, Dim, ReDim, Static, Public, o Private. Por ejemplo, la primera declaración de MiVar en el código siguiente, genera este error, pero la segunda y tercera declaración de MyVar son válidas:

MyVar As Double	' Sintaxis de declaración no válida.

Dim MyVar As Double

Type AType

MyVar As Double	' Esta sintaxis de declaración es válida

End Type	' porque está dentro de un bloque Type.

•	Utilizó una instrucción End Type sin una instrucción Type correspondiente.

Busque una End Type sin correspondencia, e incluya una instrucción Type antes de su bloque o bien elimínela si no es necesaria.

Si desea más información, seleccione el tema en cuestión y presione F1.


La instrucción es demasiado compleja

Visual Basic no puede analizar esta instrucción. Las causas y posibles soluciones de este error son las siguientes:

•	La instrucción no se puede analizar debido a su complejidad.

Intente distribuir la instrucción en componentes más pequeños o reemplace cláusulas condicionales complejas con una combinación de operadores lógicos e instrucciones If...Then...Else.

•	La instrucción o función utiliza demasiadas llamadas de función anidadas.

Haga las llamadas de función con más antelación y asigne los resultados variables; específicas; después use estas variables en la instrucción que está causando el error de complejidad.

Si desea más información, seleccione el tema en cuestión y presione F1.


Instrucciones y etiquetas no válidas entre Select Case y la primera instrucción Case
No son válidas instrucciones ni texto entre Select Case y la cláusula Case

Solamente puede introducir un comentario entre la instrucción Select Case y la primera cláusula Case. Las causas y posibles soluciones de este error son las siguientes

•	Incluyó una instrucción entre Select Case y su primera cláusula . Por ejemplo:

Select Case SomeVar

' Esto es un comentario y es válido.

Stop	' Incluso aquí una instrucción Stop no es válida.

Case SomeValue

. .

End Select

A una instrucción Select Case. Si la primera instrucción Case. Si la expresión introducida entre ambas es un comentario, incluya al principio un delimitador de comentarios ('). Si no lo es, sitúe la expresión donde le corresponde, o elimínela.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de sintaxis

Visual Basic no puede determinar qué acción tomar. Las causas y posibles soluciones de este error son las siguientes:

•	No se ha escrito correctamente una palabra clave o argumento.

Las palabras clave y los nombres de argumentos con nombre deben coincidir exactamente con los especificados en sus especificaciones de sintaxis. Consulte la Ayuda en pantalla y después corrija la ortografía.

•	La puntuación es incorrecta.

Por ejemplo, cuando omite argumentos opcionales en formato de posición, debe colocar una coma (,) como indicador de posición del argumento omitido.

•	No se ha definido un procedimiento.

Compruebe la ortografía del nombre del procedimiento.

•	Se ha intentado especificar Optional y ParamArray en la misma declaración de procedimiento.

Un argumento ParamArray no puede ser Optional. Elija uno y elimine el otro..

Si desea más información, seleccione el tema en cuestión y presione F1.


La modificación puede hacer incompatible el módulo de objeto con el componente compatible ActiveX especificado anteriormente
La modificación puede hacer no compatible el módulo de objeto con el servidor ActiveX compatible especificado anteriormente

Si ya existe un componente ActiveX compatible como un archivo ejecutable anteriormente distribuido o una biblioteca de vínculos dinámicos (DLL), debe tener cuidado de no cambiar la interfaz. Esta advertencia tiene la siguiente causa y efecto:

•	Está intentando modificar el código de un módulo de objeto que ya está representado por un archivo ejecutable.

Si hace cambios que afectan a la interfaz del objeto, la clase no será compatible con la versión anterior y por ello no podrá utilizar la nueva versión en lugar de la antigua para código compilado.

En Visual Basic, el nombre del componente ActiveX compatible aparece en el cuadro de diálogo que se muestra cuando elige Opciones de proyecto del menú Herramientas.

Importante   Para aceptar la modificación, haga clic en Aceptar en el cuadro de diálogo del mensaje de error. Si desea deshacer el cambio, haga clic en el botón Cancelar.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha buscado en la región especificada

Cuando elija los botones buscar siguiente y Reemplazar del cuadro de diálogo Reemplazar, no se especifica el número total de elementos reemplazados. Esta condición tiene la siguiente causa y efecto:

•	Al realizar una operación de búsqueda y reemplazo, puede especificar la región que desea abarcar — selección, procedimiento, módulo, o proyecto.

Si selecciona una región, ésta será la región de búsqueda predeterminada. Si no selecciona ninguna región, se toma como región de búsqueda predeterminada el módulo actual. Para cambiar el alcance de búsqueda, seleccione una opción distinta en el cuadro de diálogo Reemplazar.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha buscado en la región especificada y se ha realizado 1 reemplazo

Cuando elige el botón Reemplazar todo en el cuadro de diálogo Reemplazar, este mensaje especifica el número total de elementos reemplazados. Esta condición tiene la siguiente causa y efecto:

•	Durante la operación de búsqueda y reemplazo, solamente se encontró una instancia del texto especificado, y se reemplazó. Puede especificar la región que desea abarcar — selección, procedimiento, módulo, o proyecto.

Si selecciona una región, ésta será la región de búsqueda predeterminada. Si no selecciona ninguna región, se toma como región de búsqueda predeterminada el módulo actual. Para cambiar el alcance de búsqueda, seleccione una opción distinta en el cuadro de diálogo Reemplazar.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha buscado en la región especificada y se realizaron "|" reemplazos
Se ha buscado en la región especificada y se realizaron los reemplazos

Cuando elige el botón Reemplazar todo del cuadro de diálogo Reemplazar, este mensaje especifica el número total de elementos reemplazados. Esta condición tiene la siguiente causa y efecto:

•	Al realizar una operación de reemplazo, puede especificar la región que abarca — selección, procedimiento, módulo, o proyecto.

Si selecciona una región, ésta será la región de búsqueda predeterminada. Si no selecciona ninguna región, se toma como región de búsqueda predeterminada el módulo actual. Para cambiar el alcance de búsqueda, seleccione una opción distinta en el cuadro de diálogo Reemplazar.

Si desea más información, seleccione el tema en cuestión y presione F1.


El archivo .VBP para este proyecto contiene un Id de biblioteca de referencia que no es válido o está dañado

Cuando guarda un proyecto para el que se ha seleccionado una referencia del cuadro de diálogo Referencias, se genera una entrada en el archivo .vbp del proyecto (llamado el archivo .mak en versiones anteriores de Visual Basic). Por ejemplo, la entrada para un objeto de acceso a datos es:

Reference=*\G{00025E01-0000-0000-C000-000000000046}#0.0#0#C:\WINDOWS\SYSTEM\DAO2516.DLL#Microsoft

DAO 2.5 Object Library

Este error se produce cuando una referencia se ha modificado o dañado. Las causas y posibles soluciones de este error son las siguientes:

•	Una referencia del archivo .vbp ha pasado a ser no válida.

Elimine la línea incorrecta del archivo .vbp y compruebe la biblioteca de objetos adecuada en el cuadro de diálogo Referencias del menú Herramientas. Después guarde el proyecto y se introducirá la información correcta en el archivo .vbp.

Si desea más información, seleccione el tema en cuestión y presione F1.


Este comando detendrá el depurador.
Este componente no desencadena ningún evento

Un procedimiento de evento debe corresponder a un evento que se pueda desencadenar por un objeto. Las causas y posibles soluciones de este error son las siguientes:

•	Escribió un procedimiento de evento para un objeto que no desencadena eventos.

No puede escribir un procedimiento de evento que no corresponda a un evento.

•	Intentó utilizar WithEvents en una clase que no desencadena eventos.

No puede utilizar WithEvents en una clase que no desencadena eventos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Demasiados argumentos
Hay demasiados argumentos

Un procedimiento tiene sólo 60 argumentos. Las causas y posibles soluciones de este error son las siguientes:

•	Se especificaron más de 60 argumentos en un procedimiento.

Si necesita especificar más argumentos, defina un tipo definido por el usuario para incluir múltiples argumentos de distintos tipos, o bien utilice un ParamArray como argumento final y transfiérale múltiples valores. También puede transferir múltiples argumentos incluyéndolos en una matriz.

Si desea más información, seleccione el tema en cuestión y presione F1.


Demasiadas dimensiones
Hay demasiadas dimensiones

Las matrices no pueden tener más de 60 dimensiones. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó declarar una matriz con más de 60 dimensiones.

Reduzca el número de dimensiones.

•	La declaración de matriz está dentro de los límites especificados, pero no hay suficiente memoria para crear la matriz.

Libere más memoria para hacerla disponible o bien reduzca el número de dimensiones. Además, si su matriz es de tipo Variant o es una matriz incluida dentro de una Variant, quizás pueda crear la matriz con el mismo número de dimensiones volviéndola a declarar con el tipo de datos de sus elementos. Por ejemplo, si solamente contiene enteros, declararla como una matriz de tipo Integer utiliza menos memoria que si cada elemento es una Variant.

Si desea más información, seleccione el tema en cuestión y presione F1.


Demasiadas continuaciones de líneas
Hay demasiadas continuaciones de líneas

Existe un límite para el número de líneas que puede unir con caracteres de continuación de líneas. Las causas y posibles soluciones de este error son las siguientes:

•	Se han unido más de 10 líneas consecutivas mediante caracteres de continuación de línea.

Alargue algunas de las líneas constituyentes (para reducir el número de caracteres de continuación de línea necesarios) o divida la construcción en más de una instrucción.

Si desea más información, seleccione el tema en cuestión y presione F1.


Demasiadas variables locales no estáticas

Las variables locales no estáticas son las variables definidas en un procedimiento y que se vuelven a inicializar cada vez que se llama al mismo. Este error tiene la causa y la solución siguientes:

•	La suma de la memoria necesaria para las variables locales no estáticas (y las variables temporales que genera el compilador) es superior a 32 KB.

Declare algunas variables con la instrucción Static donde resulte adecuado. Las variables Static mantiene su valor entre las llamadas a procedimientos, debido a que se asignan a recursos de memoria distintos de los de las variables no estáticas.

Si desea más información, seleccione el tema en cuestión y presione F1.


Demasiadas variables a nivel de módulo

Las variables a nivel de módulo son aquéllas que se declaran en la sección de declaraciones de un módulo, antes de los procedimientos. Este error tiene la causa y la solución siguientes:

•	La suma de la memoria necesaria para todas las variables a nivel de módulo de este módulo es superior a 64 KB.

El valor indicado es el límite de almacenamiento para este módulo. Si resulta adecuado, puede declarar algunas variables con Public en otro módulo; o bien, si algunas variables a nivel de módulo sólo se utilizan en un procedimiento, puede declararlas dentro de él. Si ha declarado variables a nivel de módulo porque desea que mantengan su valor entre las llamadas a procedimientos, puede declararlas con Static dentro del procedimiento que las utiliza.

Nota   El espacio disponible puede variar de unos sistemas operativos a otros.

Si desea más información, seleccione el tema en cuestión y presione F1.


El carácter de declaración de tipo no coincide con el tipo de dato declarado
El carácter de declaración de tipo no coincide con el tipo de datos declarados

El tipo de datos de una variable no se puede modificar anexando el carácter de declaración de tipos para otro tipo. Las causas y posibles soluciones de este error son las siguientes:

•	Declaró una variable de un tipo especificado, y a continuación hizo referencia a una variable del mismo nombre en el mismo alcance, y anexó un carácter de declaración de tipo no coincidente.

Si desea cambiar el tipo de datos asignado a una variable, declare la variable como Variant. Si simplemente anexó un carácter de declaración de tipo incorrecto, elimínelo o cámbielo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Carácter de declaración de tipo no permitido
No se permite el carácter de declaración de tipo

Aunque utilizar caracteres de declaración de tipo es válido en Visual Basic, algunos tipos de datos agregados recientemente (entre los que se incluyen Byte, Boolean, Date, Object, y Variant) no tienen asociado ningún carácter de declaración de tipo. Las causas y posibles soluciones de este error son las siguientes:

•	No se puede usar un carácter de declaración de tipo en la declaración de una variable que usa la cláusula As , como por ejemplo con Dim, Static, Public, etc.

Elimine el carácter de declaración de tipo o borre la cláusula As.

•	Intentó utilizar un carácter de declaración de tipo en referencia a una variable declarada implícitamente sin ningún carácter de declaración de tipo:

MyVar = 20	' Declaración implícita.

MyVar% = 25	' Genera un error.

Elimine el carácter de declaración de tipo o vuelva a declarar la variable original.

Nota   Si una declaración explícita de variable contiene un carácter de declaración de tipo, la inclusión del carácter es opcional en referencias posteriores. Por ejemplo

Dim MyStr$

MyStr = " Ya que se declaró explícitamente, el $ es opcional."

Si desea más información, seleccione el tema en cuestión y presione F1.


Es necesario un carácter de declaración de tipo
Se requiere un carácter de declaración de tipo

La necesidad de utilizar caracteres de declaración de tipo depende de la forma de declarar el identificador. Las causas y posibles soluciones de este error son las siguientes:

•	Una variable que se declaró originalmente con un carácter de declaración de tipo se refirió sin un carácter de declaración de tipo. Por ejemplo:

MyStr$ = "Declaración implícita"

MyStr = "Intentando referir to MyStr$, pero surge un error" _

 & "por llamarlo Micadena."

Transforme la declaración en explícita o agregue el carácter de declaración de tipo a las referencias posteriores.

Nota   Observe que si la declaración de la variable contiene un carácter de declaración de tipo, la inclusión del carácter será opcional en referencias posteriores. Por ejemplo:

Dim MyStr$

MyStr = " Ya que fue declarada explícitamente, la $ es opcional."

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de tipo: se esperaba una matriz o un tipo definido por el usuario
No coinciden los tipos: se esperaba matriz o tipo definido por el usuario

El tipo de un argumento o parámetro incluye si se trata de una matriz o de un tipo definido por el usuario. Las causas y posibles soluciones de este error son las siguientes:

•	El argumento especificó un solo elemento de una matriz o tipo definido por el usuario, o bien una variable, un literal o una constante. No obstante, se está pasando a un parámetro que espera una matriz o un tipo definido por el usuario completos.

Cambie el argumento o cambie la definición del parámetro.

•	El argumento especificó una matriz o un tipo definido por el usuario, pero no era del mismo tipo que el parámetro.

Pase una matriz del tipo esperado o cambie la definición de la declaración del parámetro.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible leer del disco
No se puede leer del disco

Existe un problema general de lectura del disco. Las causas y posibles soluciones de este error son las siguientes:

•	La puerta de la unidad de disco está mal cerrada.

Si el disco es extraíble, verifique la puerta de la unidad. Ciérrela bien si es necesario.

•	Puede que haya insertado el disco boca abajo.

Vuelva a insertar el disco en la posición correcta.

•	Puede que el disco no esté bien formateado.

Vuelva a formatear el disco si no le importa perder los datos que contiene actualmente

•	Experimenta problemas de red.

Intente reiniciando la red.

•	Insertó un disco de una densidad determinada en una unidad que no puede leerlo.

Utilice otra unidad, o copie el material deseado a un disco que se pueda leer en su unidad.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible escribir en el disco
No se puede escribir en el disco

Hay un problema general de escritura en el disco. Las causas y posibles soluciones de este error son las siguientes:

•	La puerta de la unidad de disco está mal cerrada.

Si el disco es extraíble, verifique la puerta de la unidad. Ciérrela bien si es necesario..

•	Puede que haya insertado el disco boca abajo.

Vuelva a insertar el disco en la posición correcta.

•	Puede que el disco no esté bien formateado.

Vuelva a formatear el disco si no le importa perder los datos que contiene actualmente.

•	Experimenta problemas de red.

Intente reiniciando la red.

•	Insertó un disco de una densidad determinada en una unidad que no puede leerlo.

Utilice otra unidad, o copie el material deseado a un disco que se pueda leer en su unidad.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error no esperado; contacte con el Soporte técnico de Microsoft

Esta condición puede ser o no importante. Las causas y posibles soluciones de este error son las siguientes:

•	Se produjo un error no previsto en la aplicación host o en Visual Basic.

No tiene que calificar como importante este error. Sin embargo, debería anotar el número del error e informar al Soporte técnico de Microsoft.

Si desea más información, seleccione el tema en cuestión y presione F1.


Los paréntesis no coinciden en la cadena de búsqueda
No coinciden los corchetes en la cadena de búsqueda

Un corchete de apertura debe tener su corchete de cierre correspondiente. Las causas y posibles soluciones de este error son las siguientes:

•	Abrió un par de corchetes en una cadena de búsqueda, pero no lo cerró con el corchete correspondiente.

Incluya un corchete de cierre en el lugar adecuado.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se reconoce el idioma del proyecto
No se puede reconocer el idioma de proyecto

El código de configuración regional especificado en el proyecto que se va a cargar no está apoyado en la actualidad por esta aplicación. Las causas y posibles soluciones de este error son las siguientes:

•	Esto podría ocurrir si se crea un proyecto en un sistema que apoya el código de configuración regional y después se lo traslada a un sistema que no reconoce este código. Por ejemplo, el OLE2NLS.DLL en la máquina actual puede ser una versión antigua que no reconoce el código de configuración regional.

Instale la bibliotecas de vínculos dinámicos adecuada en el sistema actual.

•	No se encontró la biblioteca de objetos correcta para el proyecto.

Asegúrese de que están disponibles las bibliotecas de objetos correctas, por ejemplo, asegúrese de que la ruta de acceso incluye sus directorios.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible pasar un tipo definido por el usuario a ByVal
El tipo definido por el usuario no se puede pasar con ByVal

Los tipos definidos por el usuario sólo se pueden pasar por referencia (predeterminado), no por valor. No se puede informar del error hasta que no se realice la llamada. Las causas y posibles soluciones de este error son las siguientes:

•	Incluyó una palabra clave ByVal en la definición de un parámetro que representaba un tipo definido por el usuario.

Elimine la palabra clave ByVal. Si se desea evitar que los cambios se propaguen hacia el procedimiento o función que ha efectuado la llamada, Dim una variable temporal del tipo y pase la variable temporal al procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se permiten tipos definidos por el usuario ni cadenas de longitud fija como el tipo de un miembro Public de un módulo de obj
No se permiten tipos definidos por el usuario y cadenas de longitud fija como el tipo de un miembro público de un módulo de objeto; no se permiten módulos de objetos privados el tipo de un miembro público de un módulo de objeto

No puede crear miembros Public de tipos definidos por el usuario Private. Las causas y posibles soluciones de este error son las siguientes:

•	Declaró una variable Public (en un módulo de clase) con el nombre de un tipo definido por el usuario Private.

Declare la variable Private, mueva la instrucción Type...End Type que define el tipo definido por el usuario módulo estándar, o elimine por completo la declaración.

•	Intentó definir un procedimiento Public (en un módulo de clase) con un tipo devuelto o un parámetro que tenía un tipo definido por el usuario Private.

Declare el procedimiento Private, mueva la instrucción Type...End Type que define el tipo definido por el usuario a un módulo estándar o elimine por completo la declaración.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se ha definido el tipo definido por el usuario

Puede crear sus propios tipos de datos en Visual Basic, pero primero debe definirlos en una instrucción Type...End Type o en una biblioteca de objetos o biblioteca de tipos debidamente registrada. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó declarar una variable o un argumento con un tipo de datos no definido o especificó una clase o un nombre de objeto desconocido.

Utilice la instrucción Type en un módulo para definir un nuevo tipo de datos. Si intenta crear una referencia a una clase, esta clase debe estar visible para el proyecto. Si hace referencia a una clase en el programa, debe tener en el proyecto un módulo de clase con el nombre especificado. Compruebe la ortografía del nombre del tipo o del nombre del objeto.

•	El tipo que desea declarar está en otro módulo, pero declarado como Private.

Mueva la definición del tipo a un módulo estándar donde pueda ser Public.

•	El tipo es válido, pero la biblioteca de objetos o de tipos donde se definió no está registrada en Visual Basic.

Muestre el cuadro de diálogo Referencias y seleccione la biblioteca de objetos o la biblioteca de tipos adecuada. Por ejemplo, si no selecciona el Objeto de acceso a datos en el cuadro de diálogo Referencias, los tipos como Database, Recordset o TableDef no se reconocen y las referencias a ellos en el código provocan este error.

Si desea más información, seleccione el tema en cuestión y presione F1.


No está permitido un tipo definido por el usuario sin miembros
No se permiten tipos definidos por el usuario que no tengan miembros

Los tipos definidos por el usuario deben tener como mínimo un elemento. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó un tipo definido por el usuario vacío en una definición Type...End Type.

Verifique si en la instrucción Type hay delimitadores de comentario no deseados.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se ha definido la variable
Variable no definida

Se ha usado la instrucción Option Explicit para impedir que los módulos tengan variables no declaradas y para eliminar la posibilidad de crear de forma inadvertida nuevas variables por errores tipográficos. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha usado la instrucción Option Explicit para requerir la declaración explícita de variables y se ha usado una variable sin declararla.

Declare explícitamente la variable, o cambie la ortografía de la variable para que coincida con la deseada.

Si desea más información, seleccione el tema en cuestión y presione F1.


La variable no se ha creado todavía en este contexto
Variable no creada aún en este contexto

Es necesario crear una variable antes de que se pueda mostrar en el panel Inspección o en el panel Inmediato, y antes de que pueda recibir asignaciones de valores desde el panel Inmediato. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó mostrar el valor de una variable local que acaba de introducir en el código antes de ejecutar como mínimo un comando Un solo paso en el modo de interrupción.

Avance paso a paso por el código para obligar a la compilación de la nueva instrucción.

•	Intentó mostrar el valor de una variable local que acaba de agregar en un procedimiento posterior en la cadena de llamada moviéndose al procedimiento mediante el cuadro de diálogo Calls.

Tiene que volver realmente al procedimiento antes de que se permita mostrar la variable en su contexto.

Si desea más información, seleccione el tema en cuestión y presione F1.


Es necesaria una variable
Se requiere una variable — no se puede asignar a esta expresión

Este error suele suceder cuando intenta asignar un valor a algo que no puede aceptar la asignación. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar una expresión numérica como argumento para la función Len.

La función Len no acepta expresiones numéricas, literales numéricos ni expresiones numéricas binarias, pero sí acepta una variable de cadena o numérica, una expresión de cadena, o una variable de tipo definido por el usuario.

•	Se ha usado una llamada de función o una expresión como argumento para Input #, Let, Get, o Put. Por ejemplo, se ha usado un argumento que parece ser una referencia válida a una variable de matriz, pero en lugar de esto es una llamada a una función del mismo nombre.

Input #, Let, Get, y Put no aceptan llamadas a función como argumentos.

•	Intentó asignar un valor a un identificador previamente declarado como constante.

Elija otro nombre para el identificador.

•	Intentó utilizar una no variable como contador de bucle en una construcción For...Next.

Utilice una variable como contador.

•	Intentó asignar un valor a una propiedad de sólo lectura o a una expresión que consta de dos o más variables (como X + Y). La asignación incluye un valor en una ubicación de memoria. La expresión especificada debe representar una sola ubicación reescribible.

Vuelva a escribir la asignación a un nombre de variable única que pueda aceptar los datos.

•	Intentó utilizar una variable no declarada que se define como constante en una biblioteca de tipos.

Utilice un nombre distinto para la variable o declárela de manera explícita.

Si desea más información, seleccione el tema en cuestión y presione F1.


Advertencia: las configuraciones personalizadas de idioma no son transportables
Advertencia: las configuraciones de idioma personalizadas no son transportables

No todas las configuraciones de idioma son transportables. Esta advertencia tiene la siguiente causa y solución:

•	Utilizó una configuración de idioma personalizada en el código.

Cuando se elige en el código las configuraciones de idioma/país personalizadas, las convenciones de idioma usadas en su código coincidirán con las establecidas en el Panel de control de su sistema. Se pueden usar configuraciones regionales de código personalizado, pero es posible que su código no funcione en otras configuraciones regionales o en otros sistemas con configuraciones diferentes. La aplicación host analiza algunas cadenas en base a las configuraciones del Panel de control de la máquina en la cual se está ejecutando.

Las cadenas analizadas por la aplicación host no funcionarán si las configuraciones del Panel de control de la máquina de destino no son las mismas que las de la máquina en la que se escribió el código (por ejemplo, un código que depende de un separador decimal Detalles de configuración regional). Por tanto, no use las configuraciones de idioma personalizadas a menos que piense enviar su código a otros usuarios. Si planea enviar su código a otros usuarios, seleccione una configuración regional predefinida.

Si desea más información, seleccione el tema en cuestión y presione F1.


Wend sin While

Cada instrucción Wend debe ir precedido de su correspondiente instrucción While. Las causas y posibles soluciones de este error son las siguientes:

•	Utilizó una instrucción Wend sin la instrucción While anterior correspondiente.

Verifique un bucle no terminado anidado en el bucle While...Wend que está causando el error.

Si desea más información, seleccione el tema en cuestión y presione F1.


While sin Wend

Utilizó una instrucción While sin la instrucción Wend correspondiente. Las causas y posibles soluciones de este error son las siguientes:

•	Abrió una construcción While...Wend, pero no la cerró.

Compruebe si hay una estructura While...Wend no terminada dentro de la estructura While...Wend exterior.

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto With debe ser de un tipo definido por el usuario, Object o Variant
El objeto With debe ser de tipo definido por el usuario, Object o Variant

El bloque With...End With no se puede utilizar con todos los tipos de variable. Las causas y posibles soluciones de este error son las siguientes

•	Intentó utilizar una variable que no es del tipo Object de tipo definido por el usuario, o de tipo Variant para contener un objeto dentro de un bloque With.

Compruebe si escribió mal el nombre del objeto, del tipo definido por el usuario o de la variable Variant.

Si desea más información, seleccione el tema en cuestión y presione F1.


El número de dimensiones es incorrecto
Dimensiones incorrectas

Se ha referido una matriz cuyos índices corresponden al mismo número de dimensiones que aparecen en la declaración de matriz. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha referido una matriz con un número diferente de dimensiones al que tiene en realidad. Por ejemplo, se produce este error si se refiere una matriz como X(2,4) (una matriz bidimensional), cuando se la ha definido como Dim X(5) (una matriz unidimensional)..

Compruebe la declaración de la matriz e incluya en la referencia un índice para cada dimensión de la declaración.

Si desea más información, seleccione el tema en cuestión y presione F1.


Será necesario reiniciar después de esta edición. ¿Desea continuar?
Será necesario reiniciar después de esta edición — ¿Desea continuar?

Puede editar código en el modo de interrupción, pero algunas ediciones impiden la ejecución continuada. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó realizar una edición que impide la ejecución continuada, por ejemplo, declaró una variable estática.

Si elige Si, terminará la ejecución y podrá editar el código. Si elige No, podrá continuar con la ejecución del código desde el punto en que se suspendió.

Si desea más información, seleccione el tema en cuestión y presione F1.


Debe terminar el bloque # If con # EndIf
Debe terminar el bloque #If con una #End If

#If es una directiva de compilación condicional. Este error tiene la causa y la solución siguientes:

•	Se ha detectado un bloque #If que no termina con #End If.

Agregue una #End If en la posición apropiada.

Si desea más información, seleccione el tema en cuestión y presione F1.


El argumento no es opcional (Error 449)

El nombre y el tipo de datos de los argumentos deben coincidir con los esperados. Las causas y posibles soluciones de este error son las siguientes:

•	Número incorrecto de argumentos.

Suministra todos los argumentos necesarios. Por ejemplo, la función Left requiere dos argumentos, el primero representa la cadena de caracteres sobre la que se opera y el segundo representa el número de caracteres que se devuelve desde el lado izquierdo de la cadena. Debido a que ningún argumento es opcional, ambos deben ser suministrados.

•	Se ha omitido un argumento que no es opcional.

Un argumento solamente se puede omitir de una llamada a un procedimiento definido por el usuario si se declaró Optional en la declaración del procedimiento. Incluya el argumento en la llamada o declare el parámetro Optional en la definición.

Si desea más información, seleccione el tema en cuestión y presione F1.


La convención de llamada a la DLL no es correcta (Error 49)
Convención de llamada a DLL incorrecta (Error 49)

Los arguments pasados a una rutina de biblioteca de vínculo dinámico (DLL) deben coincidir exactamente con los esperados por dicha rutina. Las convenciones de llamada tratan el número, el tipo y el orden de los argumentos. Las causas y posibles soluciones de este error son las siguientes:

•	El programa está llamando a una rutina de una DLL a la que se está pasando el tipo incorrecto de argumentos.

Asegúrese de que todos los tipos de argumentos coinciden con los especificados en la declaración de la rutina a la que está llamando.

•	El programa está llamando a una rutina en una DLL a la que se está pasando el número incorrecto de argumentos.

Asegúrese de que está pasando el mismo número de argumentos que se indicó en la declaración de la rutina a la que está llamando.

•	El programa está llamando a una rutina en una DLL, pero no utiliza la convención de llamada StdCall.

Si la rutina de la DLL espera argumentos por valor, asegúrese de que se especifique ByVal para esos argumentos en la declaración de la rutina.

•	La instrucción Declare incluye CDecl.

La palabra clave CDecl se aplica sólo a Macintosh.

Si desea más información, seleccione el tema en cuestión y presione F1.


Modo de archivo incorrecto (Error 54)

Las instrucciones utilizadas en la manipulación de contenido de archivos deben ser apropiadas para el modo en el que se abrió el archivo. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción Put o Get está especificando un archivo secuencial.

Put y Get sólo pueden referirse a archivos abiertos para acceso Random o Binary.

•	Una instrucción Print # especifica un archivo abierto para tener un modo de acceso distinto a Output o a Append.

Utilice otra instrucción distinta para incluir los datos en el archivo, o vuelva a abrir el archivo en un modo apropiado.

•	Una instrucción Input # especifica un archivo abierto para tener un modo de acceso distinto a Input.

Utilice una instrucción distinta para incluir datos en el archivo, o vuelva a abrir el archivo en el modo Input.

•	Cualquier intento de escritura en un archivo de sólo lectura.

Cambie el estado de lectura/escritura del archivo, o no intente escribir en él.

Si desea más información, seleccione el tema en cuestión y presione F1.


Nombre o número de archivo incorrecto (Error 52)

Se produjo un error al intentar acceder al archivo especificado. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción se refiere a un número de archivo o con un nombre de archivo que:

•	No está especificado en la instrucción Open o que se especificó en una instrucción Open pero desde entonces ya se ha cerrado:

Especifique el nombre de archivo en una instrucción Open. Observe que si invocó la instrucción Close sin argumentos, puede haber cerrado sin darse cuenta todos los archivos abiertos en ese momento, invalidando todos los números de archivo.

•	Está fuera del intervalo de número de archivos (1 – 511).

Si el código genera números de archivo mediante algoritmos, asegúrese de que los números son válidos.

•	Un nombre o número no válido.

Los nombres de archivo deben adecuarse a las convenciones de los sistemas operativos así como a las convenciones de denominación de archivos de Basic. En Microsoft Windows, utilice las convenciones siguientes para nombrar archivos y directorios:

•	El nombre de un archivo o de un directorio puede tener dos partes: Un nombre y una extensión opcional. La dos partes están separadas por un punto, por ejemplo, MIARCHIVO.NEW.

•	El nombre puede tener hasta ocho caracteres y la extensión hasta 255 caracteres..

•	El nombre debe comenzar con una letra o con un número. Puede tener caracteres en mayúsculas o en minúsculas (los nombres de archivos no distinguen mayúsculas o minúsculas) excepto los siguientes: Comillas ("),apóstrofo ('), barra diagonal (/), barra inversa (\), dos puntos (:), y barra vertical (|).

•	El nombre puede contener espacios.

•	Los nombres siguientes se reservan y no se pueden usar para archivos o para directorios: CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN, y NUL. Por ejemplo, si trata de nombrar un archivo PRN en la instrucción Open la impresora predeterminada se transformará en el destino para las instrucciones Print # y Write # dirigidos al número de archivo especificado en la instrucción Open.

•	Los siguientes son ejemplos de nombres de archivos válidos en Microsoft Windows:

CARTA.DOC

Mi Memo.Txt

PRESUP.95

12345678.901

Segundo Intento.Rpt

•	En Macintosh un archivo puede tener cualquier carácter excepto dos puntos (:) y puede contener espacios. Los caracteres nulos (Chr(0)) no están permitidos en los nombres de archivo.

Si desea más información, seleccione el tema en cuestión y presione F1.


La longitud de registro es incorrecta (Error 59)
Longitud de registro incorrecta (Error 59)

La longitud de un registro variable de una instrucción Get o Put no coincide con la longitud especificada en la correspondiente instrucción Open. Las causas y posibles soluciones de este error son las siguientes:

•	La longitud de un registro variable no coincide con la longitud especificada en la correspondiente instrucción Open.

Asegúrese de que la suma de los tamaños de las variables de longitud fija incluidas en el tipo definido por el usuario que define el tipo de la variable del registro es igual a el valor indicado en la cláusula Open de la instrucción Len. En el siguiente ejemplo, suponga que VarRec es una variable del tipo adecuado; puede utilizar la función Len para especificar la longitud, de la siguiente forma:

Open MyFile As #1 Len = Len(RecVar)

•	La variable de una instrucción Put es (o incluye) una cadena de longitud variable.

Debido a que siempre se agrega un descriptor de dos bytes a la cadena de longitud variable que se coloca en un  archivo de acceso aleatorio (mediante el uso de la instrucción Put), la cadena de longitud variable debe ser por lo menos dos caracteres más corta que la longitud de registro especificada en la cláusula Len de la instrucción Open.

•	La variable de una instrucción Put es (o incluye) una Variant.

Al igual que las cadenas de longitud variable, los tipos de datos Variant también requieren un descriptor de dos bytes. Las variantes que contienen cadenas de longitud variable requieren un descriptor de cuatro bytes. En consecuencia, para cadenas de longitud variable en una Variant, la cadena debe ser por lo menos 4 bytes más corta que la longitud de registro especificada en la cláusula Len.

Si desea más información, seleccione el tema en cuestión y presione F1.


El número de registro es incorrecto (Error 63)
Número de registro incorrecto (Error 63)

Se produjo un error durante el intento de acceso a archivo. Las causas y posibles soluciones de este error son las siguientes:

•	El número de registro en una instrucción Put u Get es menor o igual a cero.

Compruebe los cálculos utilizados al generar el número del registro. Asegúrese de que las variables que contienen el número del registro o que se utilizaron al calcular los números de registro están bien escritas, puesto que los nombres de variable con errores ortográficos se declaran implícitamente y se inicializan como cero a menos que haya incluido adecuadamente Option Explicit en el módulo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible crear el archivo temporal necesario (Error 322)

La creación de un archivo ejecutable necesita la creación de archivos temporales. Este error tiene la siguiente causa y solución:

•	La unidad que contiene el directorio especificado por la variable de entorno TEMP está lleno.

Elimine archivos de la unidad llena o especifique una unidad diferente en la variable de entorno TEMP.

•	La variable de entorno TEMP especifica una unidad o directorio no válido o de sólo lectura.

Especifique una unidad válida para la variable de entorno TEMP o quite la restricción de sólo lectura del directorio o unidad especificada actuamente.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible realizar la operación solicitada (Error 17)
No se puede realizar la operación solicitada (Error 17)

La operación solicitada no se puede realizar ya que invalidaría el estado actual del proyecto. Las causas y posibles soluciones de este error son las siguientes:

•	La operación solicitada invalidaría el estado actual del proyecto. Por ejemplo, el error se produce si utiliza el cuadro de diálogo Referencias para agregar una referencia a un nuevo proyecto o biblioteca de objetos mientras un programa está en el modo de interrupción.

Detenga la ejecución del código actual y vuelva a intentar la operación.

•	Se realizó un intento de modificar mediante programa el código actualmente en ejecución. Por ejemplo, puede que el código haya intentado leer código de un archivo en disco e introducirlo en un módulo que se está ejecutando en este momento.

Aunque puede modificar los módulos del proyecto mientras no se estén ejecutando en ese momento, no puede realizar modificaciones en un módulo en ejecución. Para realizar tales cambios, debe detener la ejecución del módulo, realizar las adiciones o cambios y volver a iniciar la ejecución.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible cambiar el nombre con una unidad de disco diferente (Error 74)
No se puede cambiar el nombre a una unidad de disco diferente(Error 74)

La instrucción Name debe cambiar el nombre del archivo en la unidad actual. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó mover un archivo a otra unidad distinta utilizando la instrucción Name.

Use FileCopy para escribir el archivo en otra unidad de disco y elimine el archivo viejo con una instrucción Kill.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible guardar el archivo en TEMP (Error 735)
Imposible guardar el archivo en el directorio TEMP (Error 735)

Los componentes se necesitan guardar frecuentemente para guardar información temporal en el disco. Las causas y posibles soluciones de este error son las siguientes:

•	El componente no puede encontrar un directorio con el nombre TEMP.

Cree un directorio con el nombre TEMP y establezca la variable de entorno TEMP a esa ruta de acceso.

•	La unidad de disco o la partición que contiene el directorio TEMP no tiene suficiente espacio para guardar inf.

Cree algún espacio en la unidad de disco borrando archivos innecesarios, o cree un directorio TEMP en otra partición y establezca la variable de entorno TEMP a esa ruta de acceso.

Si desea más información, seleccione el tema en cuestión y presione F1.


La clase no admite Automatización (Error 430)
La clase no soporta automatización OLE(Error 430)

No todos los objetos exponen una interfaz de Automatización OLE. Las causas y posibles soluciones de este error son las siguientes:

•	La clase que especificó en la llamada a función GetObject o CreateObject se encontró, pero no ha expuesto una interfaz por programa.

No puede escribir código para controlar el comportamiento de un objeto a menos que se haya expuesto para automatización OLE. Compruebe en la documentación de la aplicación que creó el objeto si existen limitaciones sobre el uso de Automatización OLE con esta clase de objeto.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error en el bloqueo de los recursos de código (Error 455)
Error en el bloqueo de los recursos del código (Error 455)

Cuando acceda a un recurso de código, debe bloquearlo. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha realizado una llamada a un procedimiento en un recurso de código. Se ha encontrado el recurso de código pero ha ocurrido un error cuando se intentó bloquear el recurso.

Compruebe si existe un error devuelto por HLock (por ejemplo, "Ilegal en controlador libre" o "Ilegal en bloque libre". Este error sólo puede ocurrir en Macintosh.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el recurso de código (Error 454)
Recurso de código no hallado (Error 454)

Este error sólo puede ocurrir en la Macintosh. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha realizado una llamada a un procedimiento en un recurso de código, pero no se ha encontrado el recurso de código.

Compruebe para asegurarse de que el recurso está disponible y de que la referencia a él es adecuada.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha perdido la conexión a la biblioteca de tipos o a la biblioteca de objetos para proceso remoto (Error 442)
Se ha perdido la conexión con la biblioteca de tipos o con la biblioteca de objetos para procesos remotos (Error 442)

Durante un acceso remoto (es decir, cuando se tiene acceso a un objeto que forma parte de otro proceso o se ejecuta en otro equipo), se rompió la conexión a la biblioteca que contiene información del objeto. Las causas y posibles soluciones de este error son las siguientes:

•	Perdió la conexión a la biblioteca de objetos o a la biblioteca de tipos del proceso remoto.

Para volver a conectar, siga estos pasos:

1	Reinicie el objeto Aplicación.

2	En el cuadro de diálogo de error mediante el que entró este tema de Ayuda, haga clic en Aceptar para mostrar el cuadro de diálogo Referencias.

3	La referencia perdida aparece con la palabra PERDIDA a su izquierda.

4	Quite la referencia perdida.

5	En el cuadro de diálogo References, haga clic en la casilla de verificación del objeto que inició en el paso 1.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de E/S de dispositivo (Error 57)
Error en dispositivo de entrada o de salida (Error 57)

Los dispositivos externos a veces están sujetos a errores no previstos. Las causas y posibles soluciones de este error son las siguientes:

•	Ha ocurrido un error de entrada o de salida mientras el programa estaba usando un dispositivo como una impresora o una unidad de disco.

Asegúrese de que el dispositivo funciona correctamente y vuelva a intentar la operación.

Si desea más información, seleccione el tema en cuestión y presione F1.


El dispositivo no está disponible (Error 68)
Dispositivo no disponible (Error 68)

Las causas y posibles soluciones de este error son las siguientes:

•	El dispositivo al que está tratando de acceder no está en servicio o no existe.

Compruebe la alimentación del dispositivo y los cables que conecten su computadora con el dispositivo. Si intenta acceder a una impresora a través de la red, asegúrese de que existe una conexión lógica entre la computadora y la impresora, como por ejemplo, una conexión que asocie LPT1 con la Identificación de la impresora de red.

•	La conexión de red puede estar interrumpida.

Vuelva a conectarse a la red e intente de nuevo la operación..

Si desea más información, seleccione el tema en cuestión y presione F1.


Disco lleno (Error 61)

Las causas y posibles soluciones de este error son las siguientes:

•	No hay suficiente espacio en el disco para completar una operación de Print #, Write #, o Close.

Traslade algunos archivos a otro disco o elimine alguno de ellos.

•	No hay suficiente espacio en el disco para crear los archivos requeridos.

Traslade algunos archivos a otro disco o elimine alguno de ellos.

Si desea más información, seleccione el tema en cuestión y presione F1.


El disco no está listo (Error 71)

Las causas y posibles soluciones de este error son las siguientes:

•	No hay ningún disco en la unidad de disco especificada.

Inserte un disco en la unidad de disco y vuelva a realizar la operación.

•	La puerta de la unidad de disco especificada está abierta.

Cierre la puerta y vuelva a realizar la operación.

Si desea más información, seleccione el tema en cuestión y presione F1.


División por cero (Error 11)
División entre cero (Error 11)

La división por cero no es posible. Las causas y posibles soluciones de este error son las siguientes:

•	El valor de la expresión que se está usando como divisor es cero

Compruebe la ortografía de las variables en la expresión. El nombre de una variable mal escrito puede crear implícitamente una variable que es inicializada en cero. Compruebe las operaciones previas con las variables en la expresión, especialmente aquéllas pasadas al procedimiento como argumentos desde otros procedimientos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Ha ocurrido un error al cargar la DLL (Error 48)
Error al cargar DLL (Error 48)

La biblioteca de vínculos dinámicos (DLL) especificada con la cláusula Lib en la instrucción Declare. Las causas y posibles soluciones de este error son las siguientes:

•	El archivo no es ejecutable con DLL.

Si se trata de un archivo de texto de origen, debe estar compilado y vinculado a formato ejecutable de DLL.

•	El archivo no es una DLL de Microsoft Windows.

Obtenga la DLL de Microsoft Windows equivalente para el archivo.

•	El archivo es una DLL antigua de Microsoft Windows que es incompatible con el modo protegido de Microsoft Windows.

Obtenga una versión actualizada de la DLL.

•	La DLL hace referencia a otra DLL que no está presente.

Obtenga la DLL referida y haga que sea disponible para la otra DLL.

•	La DLL o una de las DLLs a las que se hace referencia no se encuentra en el directorio especificado en la ruta de acceso.

Mueva la DLL a un directorio referido, o incluya su directorio actual en la ruta de acceso.

Si desea más información, seleccione el tema en cuestión y presione F1.


El archivo ya existe (Error 58)

Las causas y posibles soluciones de este error son las siguientes:

•	Este error ocurre en tiempo de ejecución, cuando el nombre de un archivo nuevo (por ejemplo, uno especificado en una instrucción Name) es idéntico al nombre de un archivo que ya existe.

Especifique un nuevo nombre de archivo en la instrucción Name, o elimine el archivo existente antes de especificarlo en una instrucción Name.

•	También ocurre cuando utiliza Save As para guardar un proyecto, ya cargado, si el nombre del proyecto ya existe.

Utilice un nombre de proyecto distinto si no desea reemplazar el proyecto.

Si desea más información, seleccione el tema en cuestión y presione F1.


El archivo ya está abierto (Error 55)

A veces es necesario cerrar un archivo antes de que se pueda producir otra operación Open o de otro tipo. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción Open del modo salida secuencial ha sido ejecutado para abrir un archivo que ya está abierto.

Debe cerrar un archivo abierto para un tipo de acceso secuencial antes de abrirlo para otro tipo de acceso. Por ejemplo, debe cerrar un archivo abierto para Input antes de abrirlo para Output.

•	Una instrucción (por ejemplo, Kill, SetAttr, o Name) se refiere a un archivo abierto.

Cierre el archivo antes de ejecutar la instrucción.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se puede encontrar el archivo especificado

El archivo no se encontró en la ubicación especificada. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción (por ejemplo, Kill, Name, u Open) se refiere a un archivo que no existe.

Compruebe que ha escrito bien el nombre del archivo, así como la especificación de la ruta de acceso.

•	Se ha intentado llamar a una biblioteca de vínculos dinámicos (DLL) pero el nombre del archivo de biblioteca especificado en la cláusula Lib de la instrucción Declare no se ha podido encontrar.

Compruebe que ha escrito bien el nombre del archivo, así como la especificación de la ruta de acceso.

•	En el entorno de depuración, este error ocurre si se intenta abrir un proyecto o cargar un archivo que ya no existe..

Compruebe si ha escrito bien el nombre del proyecto del archivo, así como la especificación de la ruta de acceso.

Si desea más información, seleccione el tema en cuestión y presione F1.


El bucle For no está inicializado (Error 92)
El bucle For no ha sido inicializado (Error 92)

Los contadores del bucle For deben inicializarse. Las causas y posibles soluciones de este error son las siguientes:

•	Ha saltado al medio de un bucle For...Next.

Elimine el salto al interior del bucle. No se recomienda ubicar rótulos dentro de un bucle For...Next.

Si desea más información, seleccione el tema en cuestión y presione F1.


La entrada de datos ha sobrepasado el final del archivo (Error 62)
Entrada pasó el final del archivo (Error 62)

No puede leer más allá de la posición de final de archivo. Las causas y posibles soluciones de este error son las siguientes:

•	Una instrucción Input # o Line Input # está leyendo de un archivo en el cual todos los datos ya han sido leídos o es un archivo vacío.

Utilice la función EOF (inmediatamente antes de la instrucción Input #) para detectar el final del archivo.

•	Utilizó la función EOF con un archivo abierto para acceso Binary.

EOF sólo funciona con archivos abiertos para acceso Input secuencial. Utilice Seek y Loc con archivos abiertos para acceso Binary.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error interno (Error 51)

Asegúrese de que este error no se ha generado mediante la instrucción Error o el método Raise. Las causas y posibles soluciones de este error son las siguientes:

•	Ha ocurrido un error interno en Visual Basic.

A menos que esta llamada haya sido generada por la instrucción Error o por el método Raise, contacte los servicios de apoyo técnico de productos de Microsoft para informar sobre las condiciones bajo las cuales apareció este mensaje.

Si desea más información, seleccione el tema en cuestión y presione F1.


El formato del Portapapeles no es válido (Error 460)

El Portapapeles sólo acepta datos en ciertos formatos especificados. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó colocar datos de un componente en el Portapapeles, pero los datos están en un formato incompatible con el Portapapeles.

Consulte la documentación del componente para determinar si puede utilizar el Portapapeles para transferir datos desde el componente.

Si desea más información, seleccione el tema en cuestión y presione F1.


El formato de archivo no es válido (Error 321)

Los archivos de discos frecuentemente tienen datos almacenados en formatos particulares. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó cargar un archivo en un componente, pero el formato de los datos en el archivo eran incompatible con el componente.

Consulte la documentación del componente para determinar el formato particular de los datos del archivo de disco y si el componente proporciona soporte para convertir de un formato a otro.

•	Intentó guardar datos del componente en un archivo, pero el formato de los datos era incompatible con el formato del archivo.

Consulte la documentación del componente para determinar el formato particular de los datos del archivo de disco y si el componente proporciona soporte para convertir de un formato a otro.

Si desea más información, seleccione el tema en cuestión y presione F1.


El número ordinal no es válido (Error 452)
Número ordinal no válido (Error 452)

Ha llamado a una biblioteca de vínculos dinámicos (DLL) y le ha indicado que utilice un número en vez de un nombre de procedimiento, con la sintaxis #núm. Las causas y posibles soluciones de este error son las siguientes:

•	Falló un intento de convertir la expresión núm a un ordinal.

Asegúrese de que la expresión representa un número válido o llame al procedimiento por el nombre.

•	El núm especificado no especifica ninguna función en la DLL.

Asegúrese de que núm identifica una función válida en la DLL.

•	Una biblioteca de tipos tiene una declaración no válida que da como resultado un uso interno de un número ordinal no válido.

Realice un comentario del código para aislar la llamada a procedimiento que origina el problema. Escriba una instrucción Declare para el procedimiento, e informe del problema al suministrador de la biblioteca de tipos.

Si desea más información, seleccione el tema en cuestión y presione F1.


La cadena modelo no es válida (Error 93)
Cadena de patrón no válida (Error 93)

El modelo de cadena especificado en la operación de búsqueda Like no es válido. Las causas y posibles soluciones de este error son las siguientes:

•	Un ejemplo común de una expresión de la lista de carácter no válida es [a-b , donde falta el corchete derecho.

Repase los caracteres válidos en busca de expresiones de lista.

Si desea más información, seleccione el tema en cuestión y presione F1.


Llamada a procedimiento no válida (Error 5)
Llamada o argumento a procedimiento no válido (Error 5)

Parte de esta llamada no se puede completar. Las causas y posibles soluciones de este error son las siguientes:

•	Probablemente un argumento excede el intervalo de valores permitidos. Por ejemplo, la función Sin sólo acepta valores incluidos en determinado intervalo. Los argumentos positivos menores que 2.147.483.648 se aceptan, mientras que 2.147.483.648 genera este error.

Compruebe los intervalos permitidos para los argumentos.

•	Este error también puede producirse si se intenta llamar a un procedimiento que no es válido en la plataforma actual. Por ejemplo, puede que algunos procedimientos sólo sean válidos para Macintosh, o para Microsoft Windows, etc

Compruebe la información específica de la plataforma relativa al procedimiento.

Si desea más información, seleccione el tema en cuestión y presione F1.


El índice de la propiedad matriz no es válido (Error 381)
El índice de la matriz de propiedades no es válido (Error 381)

Un valor de propiedad puede consistir en una matriz de valores. Las causas y posibles soluciones de este error son las siguientes:

•	Una matriz de propiedades del componente podría tener un límite inferior de cero y un límite superior igual al número de elementos de la matriz menos 1. Alternativamente, el límite inferior podría ser 1 y el límite superior podría ser igual al número de elementos de la matriz.

Compruebe la documentación del componente para asegurarse de el índice está en el intervalo válido de la propiedad especificada.

Si desea más información, seleccione el tema en cuestión y presione F1.


El uso de Null no es válido (Error 94)
Uso de Null no válido (Error 94)

Null es un subtipo de Variant utilizado para indicar que un elemento de datos no contiene datos válidos. Las causas y posibles soluciones de este error son las siguientes:

•	Está tratando de obtener el valor de una variable Variant o de una expresión que es Null. Por ejemplo:

MiVar = Null

For Count = 1 To MiVar

. . .

Next Count

Asegúrese de que la variable contiene un valor válido.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el argumento con nombre (Error 448)
No se ha encontrado el argumento con nombre (Error 448)

Un argumento con nombre no se puede utilizar en una invocación de procedimiento a menos que aparezca en la definición del procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	Se especificó un argumento con nombre, pero no se definió el procedimiento para aceptar un argumento con ese nombre.

Compruebe si se ha escrito bien el nombre del argumento.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se necesita un índice de la propiedad matriz(Error 385)
Se necesita un índice de matriz de propiedad (Error 385)

Este valor de propiedad consta de una matriz en vez de un único valor. Las causas y posibles soluciones de este error son las siguientes:

•	No especificó el índice de la matriz de propiedad a la que intentó tener acceso.

Compruebe la documentación del componente para encontrar el intervalo de los índices adecuados para la matriz. Especifique un índice adecuado en la instrucción de acceso a la propiedad.

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto no admite la configuración regional actual (Error 447)
El objeto no admite la configuración regional vigente (Error 447)

No todos los objetos admiten todas las configuraciones regionales. Las causas y posibles soluciones de este error son las siguientes:

•	El objeto al que se está intentando obtener acceso no admite la configuración regional en el proyecto activo. Por ejemplo, si el proyecto actual tiene la configuración regional de francés canadiense, el objeto al que se trata de obtener acceso debe ser compatible con esta configuración regional.

Compruebe qué configuración regional admite el objeto.

•	El objeto se basa en la compatibilidad del idioma nacional en una biblioteca de vínculos dinámicos (DLL), por ejemplo OLE2NLS.DLL, que puede no estar actualizada.

Obtenga una versión más reciente de la DLL, que admita la configuración regional del proyecto actual.

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto no admite argumentos con nombre (Error 446)

No todos los objetos admiten argumentos con nombre. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó acceder a un objeto cuyos métodos no admiten argumentos con nombre.

Especifique los argumentos mediante posición cuando ejecute los métodos en este objeto. Consulte en la documentación del objeto más información sobre las posiciones y tipos de los argumentos.

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto no admite esta acción (Error 445)

No todos los objetos admiten todas las acciones. Las causas y posibles soluciones de este error son las siguientes:

•	Hizo referencia a un método o propiedad que no son compatibles con este objeto.

Vea la documentación del objeto para mayor información acerca del objeto y para comprobar la forma correcta de escribir las propiedades y métodos.

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto no es una colección (Error 451)

Determinadas propiedades, métodos y operaciones solamente son aplicables a objetos Collection. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha especificado una operación o propiedad que es exclusiva de las colecciones, pero el objeto no es una colección.

Compruebe la ortografía del nombre del objeto o la propiedad, o compruebe que el objeto es de tipo Collection. Además, asegúrese de que el método Add que se utilizó para agregar el objeto a la colección tiene la sintaxis correcta y que los identificadores que incluye están bien escritos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se requiere un objeto (Error 424)

Las referencias a propiedades y métodos con frecuencia requieren un calificador de objeto explícito. Las causas y posibles soluciones de este error son las siguientes:

•	Ha hecho referencia a un método o propiedad de objeto, pero no ha proporcionado un calificador de objeto adecuado.

Especifique un calificador de objeto si no lo hizo antes. Por ejemplo, aunque puede omitir un calificador de objeto al hacer referencia a una propiedad de formulario desde dentro del módulo, del propio formulario, debe especificar explícitamente el calificador al hacer referencia a la propiedad desde un módulo standard.

•	Suministró un calificador de objeto, pero no se está reconociendo como objeto.

Compruebe la ortografía del calificador de objeto y asegúrese de que el objeto es visible en la parte del programa donde está haciendo referencia a él. En el caso de los objetos Collection, compruebe todas las veces que aparezca el método Add para asegurarse de que su sintaxis y la ortografía de todos sus elementos son correctas.

•	Suministró un calificador de objeto válido, pero otras partes de la llamada tiene un error.

Un comando Archivo Abrir de una aplicación host con una ruta de acceso incorrecta como un argumento podría causar el error. Compruebe los argumentos.

•	No utilizó la instrucción Set al asignar una referencia de objeto.

Si asigna un valor devuelto de una llamada CreateObject a una variable Variant, no necesariamente ocurrirá un error al omitir la instrucción Set. En el siguiente ejemplo de código, se crea una instancia implícita de Microsoft Excel, y su propiedad predeterminada (la cadena "Microsoft Excel") se devuelve y se asigna a la Variant ValRet. Un intento posterior de utilizar ValRet como referencia de objeto provoca este error:

Dim RetVal	' Variant implícita.

' La propiedad predeterminada se asigna a la Variant ' ValRet de Tipo 8.

RetVal = CreateObject("Excel.Application")

RetVal.Visible = True	' Aquí ocurre el error.

Utilice la instrucción Set al asignar una referencia de objeto.

•	En casos extraños, este error se produce cuando tiene un objeto válido, pero está intentando ejecutar una acción no válida en el objeto. Por ejemplo, puede recibir este error si intenta asignar un valor a una propiedad de sólo lectura.

Compruebe la documentación del objeto y asegúrese de que la acción que intenta ejecutar es válida.

Si desea más información, seleccione el tema en cuestión y presione F1.


Variable del objeto no establecida (Error 91)
Variable del objeto o variable de bloque With no establecida (Error 91)

Existen dos pasos para crear una variable de objeto. Primero, debe declarar la variable de objeto y a continuación, debe asignar una referencia válida a dicha variable de objeto, para lo cual utiliza la instrucción Set. Igualmente, un bloque With...End With se debe inicializar ejecutando el punto de entrada de la instrucción With. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar una variable de objeto que todavía no está haciendo referencia a un objeto válido.

Especifique o vuelva a especificar una referencia para la variable de objeto. Por ejemplo, si se omitiera la instrucción Set en el código siguiente, se generaría un error en la referencia a MiObjeto:

Dim MyObject As Object	' Crea una variable de objeto.

Set MyObject = Sheets(1)	' Crea referencia de objeto válida.

MyCount = MyObject.Count	' Asigna valor Cuenta a MiCuenta

•	Intentó utilizar una variable de objeto que se ha establecido como Nothing.

Set MyObject = Nothing	' Libera el objeto.

MyCount = MyObject.Count	' Hace referencia a un objeto liberado.

Vuelva a especificar una referencia para la variable de objeto. Por ejemplo, utilice una nueva instrucción Set para establecer una nueva referencia para el objeto.

•	El objeto es válido, pero no se estableció porque la biblioteca de objetos donde está descrito no está seleccionada en el cuadro de diálogo Referencias.

Seleccione la biblioteca de objetos en el cuadro de diálogo Agregar referencias.

•	El destino de una instrucción GoTo está dentro de un bloque With.

No debe saltar al interior de un bloque With. Asegúrese de que el bloque se inicializa ejecutando el punto de entrada indicado por la instrucción With.

•	Especificó una línea incluida dentro de un bloque With al elegir el comando Establecer siguiente instrucción.

El bloque With se debe inicializar ejecutando la instrucción With.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de Automatización (Error 440)
Error de Automatización OLE (Error 440)

Cuando accede a objetos de Automatización OLE, pueden producirse errores de determinados tipos específicos. Las causas y posibles soluciones de este error son las siguientes:

•	Ocurrió un error al ejecutar un método, o al obtener o establecer una propiedad de una variable de objeto. La aplicación que creó el objeto es la que informa del error.

Compruebe las propiedades del objeto Err para determinar el origen y la naturaleza del error. Además, al acceder a un objeto de Automatización OLE, pruebe utilizando la instrucción On Error Resume Next justo antes de la instrucción de acceso. A continuación, compruebe si hay errores inmediatamente después de la instrucción de acceso

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto no admite esta propiedad o método (Error 438)

No todos los objetos admiten todas las propiedades y métodos. Las causas y posibles soluciones de este error son las siguientes:

•	No existe este método o propiedad para este objeto de automatización OLE.

Vea la documentación del objeto para mayor información acerca del objeto y para comprobar la forma correcta de escribir las propiedades y métodos.

•	Especificó un procedimiento Friend que se llama posteriormente.

El nombre del procedimiento Friend se debe conocer en tiempo de compilación. No puede aparecer en una llamada posterior.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay suficiente memoria (Error 7)

Se requiere más memoria de la que se dispone o se encontró un segmento de límite 64K. Las causas y posibles soluciones de este error son las siguientes:

•	Tiene demasiadas aplicaciones, documentos o archivos de origen abiertos.

Cierre las aplicaciones, documentos o archivos de origen innecesarios que están en la memoria.

•	Tiene un módulo o procedimiento que es demasiado extenso.

Divida los módulos o procedimientos excesivamente extensos en otros más pequeños. Esto no ahorrará memoria, pero puede evitar el encontrarse con segmentos de límite 64K.

•	Está ejecutando Microsoft Windows en modo estándar.

Reinicie Microsoft Windows en modo mejorado.

•	Está ejecutando Microsoft Windows en modo mejorado, pero se ha quedado sin memoria virtual.

Aumente la memoria virtual liberando espacio en disco, o al menos asegúrese de que tiene espacio disponible.

•	Está ejecutando programas residentes en memoria.

Elimine programas residentes en la memoria.

•	Tiene demasiados controladores de dispositivos cargados.

Elimine controladores de dispositivos innecesarios.

•	Se ha quedado sin espacio para variables Public.

Reduzca el número de variables Public.

Si desea más información, seleccione el tema en cuestión y presione F1.


No hay suficiente espacio de pila (Error 28)

La pila es un área de trabajo de la memoria que crece y se reduce dinámicamente según las necesidades del programa en ejecución. Las causas y posibles soluciones de este error son las siguientes:

•	Demasiadas llamadas Function, Sub, o Property activas.

Compruebe que los procedimientos no están anidados muy profundamente. Esto es especialmente frecuente con los procedimientos recursivos (es decir, los procedimientos que se llaman a sí mismos). Asegúrese de que los procedimientos recursivos terminan adecuadamente. Utilice el cuadro de diálogo Calls para ver qué procedimientos están activos (en la pila).

•	Las variables locales requieren más espacio de variable local del que hay disponible.

En su lugar, trate de declarar algunas variables a nivel de módulo También se pueden declarar todas las variables en el procedimiento del tipo estático, precediendo la palabra clave Property, Sub, o Function con la palabra Static. O se puede usar la instrucción Static para declarar variables estáticas Static individuales en los procedimientos.

•	Tiene demasiadas cadenas de longitud fija.

Las cadenas de longitud fija en un procedimiento agilizan el acceso, pero utilizan más espacio de pila que las cadenas de longitud variable, puesto que son los datos de cadena en sí los que están incluidos en la pila. Trate de volver a definir algunas de las cadenas de caracteres de longitud fija como cadenas de longitud variable. Al declarar cadenas de longitud variable en un procedimiento, solamente se incluye en la pila el descriptor de la cadena (no los propios datos). También puede definir la cadena a nivel de módulo donde no requiere espacio de pila. Las variables declaradas a nivel de módulo son Public de manera predeterminada, por lo que la cadena es visible para todos los procedimientos del módulo.

•	Tiene demasiadas llamadas de función DoEvents anidadas.

Use el cuadro de diálogo Calls para ver qué procedimientos están activos (en la pila).

•	El código desencadenó una cascada de eventos

Una cascada de eventos se origina al desencadenar un evento que llama a un procedimiento de eventos que ya está en la pila. Una cascada de eventos se parece a una llamada de procedimiento recursiva no terminada, pero es menos obvia porque es Visual Basic quien realiza la llamada en lugar de ser una llamada explícita del código. Use el cuadro de diálogo Calls para ver qué procedimientos están activos (en la pila).

Para mostrar el cuadro de diálogo Calls, seleccione el botón Calls situado a la derecha del cuadro Procedimientos de la ventana Depuración, o elija el comando Llamadas. Si desea más información, seleccione el tema en cuestión y presione F1.


No hay suficiente espacio de cadena (Error 14)

Visual Basic le permite utilizar cadenas muy extensas. No obstante, las necesidades de otros programas y la forma en que manipula sus cadenas pueden provocar este error. Las causas y posibles soluciones de este error son las siguientes:

•	De modo similar, las expresiones que requieren que se creen cadenas temporales para evaluación pueden estar causando este error. Por ejemplo, el siguiente código causa el mensaje de error No hay suficiente espacio de cadena en algunos sistemas operativos:

MyString = "Hola"

For Count = 1 To 100

MyString = MyString & MyString

Next Count

Asigne la cadena a una variable con otro nombre.

•	Puede que el sistema se haya quedado sin memoria, lo que ha impedido la asignación de una cadena.

Elimine de la memoria las aplicaciones innecesarias para crear más espacio.

Si desea más información, seleccione el tema en cuestión y presione F1.


Desbordamiento (Error 6)

Un desbordamiento ocurre cuanto intenta realizar una asignación que supera las limitaciones del destino de la asignación. Las causas y posibles soluciones de este error son las siguientes:

•	El resultado de una asignación, de un cálculo o de una conversión de tipo de datos es demasiado grande para que pueda ser representado dentro del intervalo asignado a este tipo de variables.

Asigne el valor a una variable de un tipo que pueda alijar un intervalo de valores más amplio.

•	Una asignación a una propiedad excede el valor máximo que ésta puede aceptar.

Asegúrese de que la asignación se adapta al intervalo de la propiedad para la que se realiza.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se ha encontrado la ruta de acceso (Error 76)

La ruta de acceso a un archivo consta de la especificación de la unidad más los directorios y subdirectorios por los que se debe avanzar para localizar el archivo. Una ruta puede ser relativa o absoluta. Las causas y posibles soluciones de este error son las siguientes:

•	El sistema operativo no ha podido encontrar la ruta de acceso especificada durante una operación de acceso a un archivo o disco (por ejemplo, Open, MkDir, ChDir, o RmDir).

Vuelva a especificar la ruta de acceso.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de acceso a la ruta o el archivo (Error 75)
Error de acceso a la ruta o archivo (Error 75)

El sistema operativo no ha podido establecer una conexión entre la ruta de acceso y el nombre del archivo durante una operación de acceso a un archivo o disco (por ejemplo, Open, MkDir, ChDir, o RmDir). Las causas y posibles soluciones de este error son las siguientes:

•	La especificación de archivo tenga el formato correcto.

Un nombre de archivo puede contener una ruta de acceso relativa o totalmente calificada. Una ruta de acceso totalmente calificada comienza con el nombre de la unidad de disco (si la ruta de acceso está en otra unidad de disco) y enumera la ruta de acceso explícita desde la raíz hasta el archivo. Cualquier ruta de acceso que no está totalmente calificada es relativa al directorio y unidad de disco actuales.

•	Intentó guardar un archivo que reemplazaría un archivo existente de sólo lectura.

Cambie el atributo de sólo lectura del archivo de destino o bien guarde el archivo con un nombre distinto.

•	Intentó abrir un archivo de sólo lectura en modo Output o Append secuencial.

Abra el archivo en el modo Input o cambie el atributo de sólo lectura del archivo.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha denegado el permiso (Error 70)
Permiso no autorizado (Error 70)

Se ha intentado escribir en un disco protegido contra escritura o acceder a un archivo bloqueado. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó abrir un archivo protegido contra escritura para Output o Append secuencial.

Abra el archivo para Input o cambie el atributo de protección contra escritura del archivo.

•	Intentó abrir un archivo en un disco que está protegido contra escritura para Output o Append secuencial.

Elimine el dispositivo de protección contra escritura del disco o abra el archivo para Input.

•	Intentó escribir en un archivo que otro proceso ha bloqueado.

Espere hasta que el otro proceso libere el archivo para abrirlo.

•	Intentó acceder al registro, pero sus permisos de usuario no incluyen este tipo de acceso al registro.

En los sistemas Microsoft Windows de 32 bits, un usuario debe disponer de los permisos adecuados para acceder al registro del sistema. Cambie sus permisos o haga que los cambie el administrador del sistema.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error de la impresora (Error 482)
Error de impresora (Error 482)

Las causas y posibles soluciones de este error son las siguientes:

•	Se produjo un error en la impresora, pero no se devolvió ninguna otra información al equipo que envió el archivo.

Debe examinar físicamente la impresora. Asegúrese de que todas las conexiones entre le equipo y la impresora son correctas. La mayoría de las impresoras proporcionan una pantalla con información sobre el error como "Sin papel," "Sin conexión," entre otros.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible ejecutar Property Get en tiempo de ejecución (Error 393)
La propiedad no se puede leer en tiempo de ejecución(Error 393)

No todas las propiedades devuelven información en tiempo de ejecución. Las causas y posibles soluciones de este error son las siguientes:

•	La propiedad a la que está intentando tener acceso es de sólo lectura en tiempo de ejecución.

Termine la ejecución y vea la propiedad tiempo de diseño.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible ejecutar Property Get en una propiedad de sólo escritura (Error 394)
La propiedad '|1' es de sólo escritura (Error 394)

No todas las propiedades devuelven información. Las causas y posibles soluciones de este error son las siguientes:

•	La propiedad a la que está intentando tener acceso no devuelve información.

No puede determinar el estado de la propiedad.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró la propiedad o el método (Error 423)
No se ha encontrado la propiedad o el método (Error 423)

La ortografía del nombre de un objeto debe coincidir exactamente con su definición en la biblioteca de objectos. correspondiente. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha definido el objeto.método o el objeto.propiedad, pero no se ha definido el método o propiedad.

Puede que haya escrito mal el nombre del objeto. Para ver qué propiedades y métodos se han definido en el objeto muestre el Examinador de objetos. Seleccione el objeto y la biblioteca apropiados para mostrar los métodos y propiedades disponibles.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró la propiedad (Error 422)

No todos los objetos admiten el mismo conjunto de propiedades. Las causas y posibles soluciones de este error son las siguientes:

•	Este objeto no admite la propiedad especificada.

Compruebe la ortografía del nombre de la propiedad. También, puede intentar tener acceso a algo, como una propiedad "texto" cuando el objeto realmente admite una "título" o alguna propiedad con nombre parecida. Compruebe la documentación del objeto.

Para obtener más información, seleccione el objeto y presione F1.


Imposible ejecutar Property Set en tiempo de ejecución (Error 382)
Set no se admite en tiempo de ejecución(Error 382)

Puede ser imposible obtener una referencia a una propiedad en tiempo de ejecución. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó obtener una referencia a una propiedad que es de sólo lectura o de sólo escritura en tiempo de ejecución.

Hasta que pueda utilizar una referencia para lectura y escritura, la propiedad debe proporcionar compatibilidad en tiempo de ejecución para ambas operaciones para que se obtenga una referencia en tiempo de ejecución.

Si desea más información, seleccione el tema en cuestión y presione F1.


Imposible ejecutar Property Set con una propiedad de sólo lectura (Error 394)
Set no se admite (propiedad de sólo lectura) (Error 383)

Puede ser imposible obtener una referencia a una propiedad en tiempo de ejecución. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó obtener una referencia a una propiedad que es de sólo lectura en tiempo de ejecución.

Hasta que pueda utilizar una referencia para lectura y escritura, la propiedad debe proporcionar compatibilidad en tiempo de ejecución para ambas operaciones para que se obtenga una referencia en tiempo de ejecución. Sólo puede utilizar una Property Get con esta propiedad.

Si desea más información, seleccione el tema en cuestión y presione F1.


Property Set no permitida (Error 387)
Set no está permitido (Error 387)

No todas las propiedades admiten devolver una referencia. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó obtener una referencia de una propiedad que no devuelve una referencia.

Restrinja el acceso a esta propiedad para Property Let y Property Get.

Si desea más información, seleccione el tema en cuestión y presione F1.


Sustituciones demasiado largas (Error 746)

Una sustitución no puede exceder una longitud máxima especificada. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó una sustitución que excede la longitud permitida.

Consulte la documentación del componente para comprobar la restricción de longitud máxima.

Si desea más información, seleccione el tema en cuestión y presione F1.


Resume sin Error (Error 20)
Reanudar sin errores (Error 20)

Se ha encontrado una instrucción Resume, pero está fuera del código del controlador de error o se encontró mientras no había una rutina de control de error activa. Las causas y posibles soluciones de este error son las siguientes:

•	Incluyó una instrucción Resume fuera de código de control de error.

Mueva la instrucción al interior de un control de error, o elimínela.

•	El código saltó a un controlador de error aunque no había ningún error.

Quizás escribió mal una etiqueta de línea. Los saltos a etiquetas no pueden ocurrir entre procedimientos, así que busque en el procedimiento la etiqueta que identifica el controlador de error. Si encuentra una etiqueta duplicada especificada como destino de una instrucción GoTo que no sea On Error GoTo, cambie la etiqueta de línea para que concuerde con el destino deseado.

Si desea más información, seleccione el tema en cuestión y presione F1.


Return sin GoSub (Error 3)
Se ha encontrado Return sin GoSub (Error 3)

Una instrucción Return no tiene una instrucción GoSub correspondiente. Las causas y posibles soluciones de este error son las siguientes:

•	Tiene una instrucción Return que no se corresponde con ninguna instrucción GoSub.

Asegúrese de que no borró sin querer la instrucción GoSub.

A diferencia de For...Next, While...Wend, y Sub...End Sub, que corresponden a tiempo de compilación, GoSub y Return corresponden a tiempo de ejecución.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró la función en la DLL especificada (Error 453)
La función no ha sido definida en la biblioteca (DLL) especificada (Error 453)

Se encontró la biblioteca de vínculos dinámicos (DLL) en una referencia a la biblioteca de usuario: pero no se encontró la función DLL especificada en ella. Las causas y posibles soluciones de este error son las siguientes:

•	Puede ser que se haya especificado un ordinal no válido en la declaración de función.

Compruebe el ordinal adecuado o llame a la función por su nombre.

•	Proporcionó el nombre de DLL adecuado, pero no es la versión que contiene esta función determinada.

Puede que tenga la versión correcta en el equipo, pero si el directorio que contiene la versión incorrecta precede al directorio que contiene la adecuada en la ruta de acceso, se accede a la DLL incorrecta. Compruebe las versiones disponibles en el equipo. Si tiene una versión antigua, póngase en contacto con el proveedor para solicitar una versión más actual.

•	Si trabaja en una plataforma Microsoft Windows de 32 bits, tanto el nombre de la DLL como el alias (si se utiliza) deben ser correctos.

Asegúrese de que son correctos tanto el nombre de la DLL como su alias.

•	Algunas DLL de 32 bits contienen funciones con versiones ligeramente distintas para aceptar cadenas tanto Unicode como ANSI. Una A al final del nombre de la función especifica la versión ANSI. Una W al final del nombre de la función especifica la versión Unicode.

Si la función toma argumentos de tipo cadena, pruebe agregando una A al nombre de la función.

Si desea más información, seleccione el tema en cuestión y presione F1.


La expresión es demasiado compleja (Error 16)
La expresión de cadena es demasiado compleja (Error 16)

El número de subexpresiones permitidas en una expresión de coma flotante varía de unas plataformas a otras. Por ejemplo, en los sistemas operativos Microsoft Windows de 32 bits, el límite es de ocho niveles de expresiones de coma flotante anidadas. Las causas y posibles soluciones de este error son las siguientes:

•	Una expresión de coma flotante contiene demasiadas subexpresiones anidadas.

Divida la expresión en tantas expresiones independientes como sean necesarias para impedir que surja el error.

Nota   En versiones anteriores de Visual Basic, el Error 16 era "Expresión de cadena demasiado compleja". Esta condición de error ya no puede ocurrir. No obstante, si dispone de código antiguo que detecta y controla este error, debe eliminarlo para impedir posibles confusiones con este nuevo error.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el texto de búsqueda (Error 744)

Las causas y posibles soluciones de este error son las siguientes:

•	No se encontró el texto especificado.

El texto no existe.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se ha definido Sub, Function o Property (Error 35)

Se ha llamado, pero no se ha definido, un procedimiento Sub, Function, o Property. Las causas y posibles soluciones de este error son las siguientes:

•	Escribió mal el nombre del procedimiento.

Compruebe la ortografía y corríjala.

•	Usted está intentando llamar a un procedimiento desde otro proyecto sin explícitamente agregar la referencia a ese proyecto en el cuadro de diálogo Referencias.

Para agregar una referencia

1	Mostrar el cuadro de diálogo Referencias.

2	Encontrar el nombre de proyecto que contiene el procedimiento a llamar. Si el nombre de proyecto no aparece en el cuadro de diálogo Referencias, haga clic en el botón Examinar para encontrarlos.

3	Active la casilla de verificación a la izquierda del nombre de proyecto.

4	Haga clic en Aceptar.

•	El procedimiento especificado no es visible para el procedimiento que lo llama.

Los procedimientos declarados Private en un módulo no pueden ser llamados desde procedimientos que están fuera del módulo. Si Option Private Module está en efecto, los procedimientos d el módulo no estarán disponibles para otros proyectos. Realice una búsqueda para localizar el procedimiento.

•	Se ha declarado una rutina de biblioteca de vínculos dinámicos (DLL), pero la rutina no está en la biblioteca especificada.

•	Compruebe el ordinal (si lo utilizó) o el nombre de la rutina. Asegúrese de que su versión de la DLL es la correcta. La rutina solamente puede existir en las versiones más actuales de la DLL. Si el directorio que contiene la versión errónea precede el directorio que contiene la versión correcta en la ruta de acceso, se tiene acceso a la DLL equivocada. Especificó el nombre de DLL correcto, pero no la versión que contiene la función especificada.

Si desea más información, seleccione el tema en cuestión y presione F1.


El subíndice está fuera de intervalo (Error 9)

Solamente se puede acceder a los elementos de matrices y a los miembros de colecciones dentro de sus intervalos definidos. Las causas y posibles soluciones de este error son las siguientes:

•	Ha establecido una referencia a un elemento de matriz no existente.

El subíndice puede ser mayor o menor que el intervalo de subíndices posibles, o puede que la matriz no tenga dimensiones asignadas en este punto de la aplicación. Compruebe la declaración de la matriz para asegurarse de sus márgenes superior e inferior. Utilice las funciones UBound y LBound para accesos a matriz con condición si está trabajando con matrices redimensionadas. Si el índice se especifica como una variable, compruebe la ortografía del nombre de la variable.

•	Declaró una matriz, pero no especificó su número de elementos. Por ejemplo, el siguiente código provoca este error:

Dim MiMatriz() As Integer

MiMatriz(8) = 234	' Causa el Error 9.

Visual Basic no dimensiona implícitamente intervalos de matriz no especificados como 0 – 10. En lugar de esto, debe utilizar Dim o ReDim para especificar explícitamente el número de elementos de una matriz.

•	Hizo referencia a un miembro de una colección que no existe.

Intente utilizar la construcción For Each...Next en lugar de especificar elementos de índice.

•	Utilizó un formulario abreviado de subíndice que especifica implícitamente un elemento no válido.

Por ejemplo, cuando utiliza el operador ! con una colección, el ! implícitamente especifica una clave. Por ejemplo, objeto!nombreclave.valor es igual a objeto.elemento(nombreclave).valor. En este caso, se genera un error si nombreclave representa una clave no válida en la colección. Para resolver el error, utilice un nombre de clave válido o un índice para la colección.

Si desea más información, seleccione el tema en cuestión y presione F1.


Este componente no admite eventos (Error 459)
El objeto o la clase no admite el conjunto de eventos (Error 459)

No todos los componentes admiten eventos de declaración y activación. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó declarar, activar o escribir un procedimiento de evento para un componente que no admite ningún tipo de eventos.

No puede declarar, activar o escribir procedimientos de evento para un componente que no admita eventos.

Si desea más información, seleccione el tema en cuestión y presione F1.


Hay demasiados clientes de la aplicación DLL (Error 47)

La biblioteca de vínculos dinámicos (DLL) de Visual Basic para aplicaciones host sólo puede dar acceso a 50 aplicaciones residentes a la vez. Las causas y posibles soluciones de este error son las siguientes:

•	Su aplicación, y otras aplicaciones que son hosts de Visual Basic (su aplicación puede acceder a algunas de ellas), están intentando acceder a la DLL de Visual Basic al mismo tiempo.

Reduzca el número de las aplicaciones abiertas que obtienen acceso a Visual Basic para aplicaciones.

Si desea más información, seleccione el tema en cuestión y presione F1.


Hay demasiados archivos (Error 67)
Hay demasiados archivos abiertos (Error 67)

Existe un límite en el número de archivos de discos que se pueden abrir al mismo tiempo. Las causas y posibles soluciones de este error son las siguientes:

•	Sistema operativo MS-DOS: Se han creado más archivos en el directorio raíz que los permitidos por el sistema operativo.

El sistema operativo MS-DOS tiene un límite para el número de archivos que puede haber en el directorio raíz (generalmente 512). Si su programa abre, cierra o guarda archivos en el ese directorio, modifique el programa de manera que use un subdirectorio.

•	Sistema operativo MS-DOS: se han abierto más archivos que el número especificado en la configuración de files= del archivo CONFIG.SYS.

Aumente el número especificado en la configuración files= del archivo CONFIG.SYS y reinicie la computadora.

•	Macintosh: El programa intentó abrir más de 40 archivos.

En Macintosh, el límite estándar es de 40 archivos. El límite se puede cambiar usando una utilidad que modifica el parámetro MaxFiles del bloque de reinicialización.

Si desea más información, seleccione el tema en cuestión y presione F1.


El tipo no coincide (Error 13)
No coinciden los tipos (Error 13)

Visual Basic versión 4.0 puede convertir y forzar muchos valores para que realicen asignaciones de tipo de datos que no eran posibles en versiones anteriores. No obstante, este error todavía puede ocurrir y tiene las siguientes causas y soluciones:

•	La variable o propiedad no es del tipo correcto. Por ejemplo, una variable que requiere un número entero no puede aceptar un valor de cadena a menos que toda la cadena sea reconocible como entero.

Intente realizar asignaciones solamente entre tipos de datos compatibles. Por ejemplo, un Integer siempre se puede asignar a un Long, un Single siempre se puede asignar a un Double, y cualquier tipo (excepto un tipo definido por el usuario) se puede asignar a una Variant.

•	Se ha pasado un objeto a un procedimiento que espera un valor o propiedad único.

Pase la propiedad única adecuada, o llame a un método apropiado para el objeto.

•	Se utilizó un nombre de módulo o de proyecto donde se esperaba una expresión, por ejemplo:

Debug.Print MyModule

Especifique una expresión que se pueda mostrar.

•	Se intentó mezclar el tradicional control de error de Basic con valores de Variant (10, Error subtype (10, vbError), por ejemplo:

Error CVErr(n)

Si necesita volver a generar un error, debe asignarlo a un error intrínseco (o definido por el usuario) de Visual Basic, a continuación, genere el error.

•	Un valor CVErr no se puede convertir en Date. Por ejemplo:

MiVar = CDate(CVErr(9))

Utilice una instrucción Select Case, o alguna construcción parecida, para asignar el valor devuelto de CVErr a este tipo de valor.

•	En el tiempo de ejecución, este error indica típicamente que una Variant usada en una expresión tiene un subtipo incorrecto o que una Variant que contiene una matriz ha aparecido en una instrucción Print #.

Para imprimir matrices, cree un bucle que muestre cada elemento por separado.

Si desea más información, seleccione el tema en cuestión y presione F1.


Se ha producido una interrupción por parte del usuario (Error 18)

El proceso de interrupción de la ejecución es útil, pero si se deja sin control, da como resultado la terminación de la aplicación. Las causas y posibles soluciones de este error son las siguientes:

•	Se ha presionado CTRL+INTER u otra tecla de interrupción.

En el entorno de programación. Para impedir que se provoque esta condición en tiempo de ejecución, controle el error de la manera adecuada.

Si desea más información, seleccione el tema en cuestión y presione F1.


La variable utiliza un tipo no admitido en Visual Basic (Error 458)
La variable utiliza un tipo OLE no admitido en Visual Basic (Error 458)

No todos los lenguajes de programación pueden utilizar todas las variables que aparecen en una biblioteca de tipos o en una biblioteca de objetos. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar una variable definida en una biblioteca de tipos u objetos que tiene un tipo de datos no admitido por Visual Basic.

No puede utilizar una variable de un tipo no reconocido por Visual Basic en un programa de Visual Basic.

Si desea más información, seleccione el tema en cuestión y presione F1.


El número de argumentos no es correcto (Error 450)
Número de argumentos incorrectos(Error 450)

El número de argumentos para un procedimiento debe coincidir con el número de parámetros de la definición del procedimiento. Las causas y posibles soluciones de este error son las siguientes:

•	El número de argumentos incluidos en la llamada al procedimiento no es el esperado por el procedimiento.

Compruebe la lista de argumentos contra la declaración del procedimiento.

•	Especificó un índice para un control que no forma parte de una matriz de control.

La especificación de índice se interpreta como argumento, pero puesto que no se espera ni un índice ni un argumento, se produce el error. Elimine la especificación de índice, o siga el procedimiento para crear una matriz de control (es decir, establezca la propiedad Indice a un valor distinto de cero en la hoja de propiedades del control o en la ventana de propiedad en tiempo de diseño.

•	Intentó asignar un valor a una propiedad de sólo lectura, o intentó asignar un valor a una propiedad para la que no existe ningún procedimiento Property Let.

Asignar un valor a una propiedad es igual que pasar el valor como un argumento al procedimiento Property Let del objeto. Defina bien el procedimiento Property Let (debe tener un argumento más que el procedimiento Property Get correspondiente). Si desea que la propiedad sea de sólo lectura, no podrá asignarle ningún valor.

Si desea más información, seleccione el tema en cuestión y presione F1.


El componente ActiveX no puede crear el objeto o devolver la referencia a este objeto (Error 429)
El componente ActiveX no puede crear el objeto o devolver la referencia a ases objeto (Error 429)

Para crear objetos es necesario que la clase del objeto esté registrada en el registro del sistema y que cualquier biblioteca de vínculos dinámicos (DLL) asociada esté disponible. Las causas y posibles soluciones de este error son las siguientes:

•	La clase no está registrada. Por ejemplo, el registro del sistema no incluye ninguna mención de la clase, o la clase se menciona pero especifica un archivo de un tipo incorrecto o que no se encuentra.

Si es posible, intente iniciar la aplicación del objeto. Si la información del registro es antigua o está equivocada, la aplicación debe comprobar el registro y corregirla. Si al iniciar la aplicación no se soluciona el problema, vuelva a ejecutar el programa de instalación de la aplicación.

•	Una DLL requerida por el objeto no se puede utilizar, porque no se encuentra o porque está dañada.

Asegúrese de que todas las DLL asociadas están disponibles. Por ejemplo, un objeto como Data Access Object (DAO) necesita DLL que varían de unas plataformas a otras. Quizás necesite volver a ejecutar el programa de instalación para este tipo de objeto, si es eso lo que ocasiona el error.

•	El objeto está disponible en el equipo, pero es un objeto de Automatizacióncon licencia y no puede comprobar la disponibilidad de la licencia necesaria para hacer una copia.

Hay algunos objetos cuyas instancias solamente se pueden crear si el servidor encuentra una clave de licencia, que verifica que el objeto está registrado para duplicar su instancia en el equipo actual. Cuando se realiza una referencia a un objeto a través de una biblioteca de tipos o de objetos bien instalada, la clave correcta se suministra de manera automática.

Si el intento de crear una instancia es el resultado de una llamada a CreateObject o GetObject , el objeto tiene que encontrar esta clave. En este caso, puede buscar en el registro del sistema o localizar un archivo especial (por ejemplo, con la extensión .LIC) que crea en el momento de la instalación. Si no puede encontrar la clave, es imposible crear una instancia del objeto. Si un usuario final ha establecido la aplicación del objeto de forma inadecuada, ha eliminado sin darse cuenta un archivo necesario, o ha cambiado el registro del sistema, el objeto no encontrará su clave.  En este caso, no se podrá crear una nueva instancia de dicho objeto. La generación de la instancia puede funcionar en el sistema del programador, pero no en el sistema del usuario. Quizás sea necesario que el usuario vuelva a instalar el objeto con licencia.

•	Si intenta utilizar la función GetObject para recuperar una referencia a una clase creada con Visual Basic.

GetObject no se puede usar para obtener una referencia a una clase creada con Visual Basic.

•	El acceso al objeto se ha denegado explícitamente.

Por ejemplo, quizás esté intentando acceder a un objeto de datos que se está utilizando en este momento y que está bloqueado para impedir situaciones de punto muerto. En este caso, podrá acceder al objeto al cabo de cierto periodo de tiempo.

Si desea más información, seleccione el tema en cuestión y presione F1.


El valor de la propiedad no es válido (Error 380)
Valor de propiedad no válido (error 380)

La mayoría de las propiedades sólo admiten valores de tipo e intervalo determinado. Este error tiene la causa y la solución siguientes:

•	Se ha asignado a una propiedad un valor incorrecto.

Consulte el tema de Ayuda de la propiedad para determinar qué tipos y qué intervalo de valores son adecuados para ella.

Si desea más información, seleccione la propiedad de que se trate y presione F1.


La imagen no es válida (Error 481)
Imagen no válida (error 481)

Sólo puede asignarse una imagen a la propiedad Picture o al objeto Picture. Este error tiene la causa y la solución siguientes:

•	Ha intentado asignar a una propiedad Picture o a un objeto Picture algo que no se reconoce como icono, mapa de bits o metarchivo de Microsoft Windows.

Consulte los temas de Ayuda del objeto Picture o de la propiedad Picture del objeto que esté utilizando para determinar los tipos de imágenes permitidos.

Si desea más información, seleccione el tema en cuestión y presione F1.


El formato del archivo de recursos no es válido (Error 325)
Formato no válido en archivo de recursos (error 325)

Al acceder a un archivo de recursos, el recurso que se intenta recuperar debe tener un formato válido. Este error tiene la causa y la solución siguientes:

•	El archivo de recursos que intenta recuperar, o bien un recurso específico del archivo, tiene un formato no válido.

Si el contenido del archivo ha sido dañado, vuelva a instalar el archivo desde el disco original. Si el error persiste, póngase en contacto con el suministrador del recurso para obtener un nuevo archivo o una versión del recurso con el formato esperado.

Si desea más información, seleccione el tema en cuestión y presione F1.


Esta tecla ya está asociada con un elemento de esta colección (Error 457)

Una tecla es una cadena especificada en el método Add que identifica únicamente a un miembro específico de una colección. Las causas y posibles soluciones de este error son las siguientes:

•	Especificó una tecla para un miembro de una colección que ya identifica a otro miembro de la colección.

Elija una tecla diferente para este miembro.

Si desea más información, seleccione el tema en cuestión y presione F1.


La matriz está bloqueada de manera fija o temporal (Error 10)

No se pueden redimensionar todas las matrices. Incluso matrices declaradas específicamente como dinámicas y matrices dentro de variables de tipo Variant a veces se bloquean temporalmente. Las causas y posibles soluciones de este error son las siguientes:

•	Intentó utilizar ReDim para cambiar el número de elementos de una matriz de longitud fija. Por ejemplo, en el código siguiente, la matriz fija AlgunaMatriz recibe a MatrizFija en el procedimiento Siguiente y después se intenta cambiar el tamaño de AlgunaMatriz:

Sub FirstOne

Dim MatrizFija(25) As Integer	' Crea una matriz de longitud fija y

Siguiente MatrizFija()	' la transfiere a otro procedimiento.

End Sub

Sub Siguiente(AlgunaMatriz() As Integer)

ReDim AlgunaMatriz(35)	' Aquí se produce el error 10.

. . .

End Sub

Haga la matriz original dinámica en vez de fija declarándola con ReDim (si la matriz se declara en un procedimiento) o declarándola sin especificar el número de elementos (si la matriz se declara de nivel de módulo).

•	Intentó redimensionar una matriz dinámica de nivel de módulo, en la que se ha transferido un elemento como un argumento a un procedimiento. Por ejemplo, en el código siguiente, ModMatriz es una matriz dinámica de nivel de módulo cuyos cuarenta y cinco elementos se transfieren por referencia al procedimiento Prueba:

Dim ModMatriz () As Integer	' Crea una matriz dinámica de nivel de módulo.

. . .

Sub AliasError()

ReDim ModMatriz (1 To 73) As Integer

Prueba ModMatriz (45)	' Transfiere un elemento de la matriz de nivel

' de módulo al procedimiento Prueba.

End Sub

Sub Prueba(SomeInt As Integer)

ReDim ModMatriz (1 To 40) As Integer  ' Aquí se produce el error.

End Sub

En este caso no es necesario transferir un elemento de la matriz de nivel de módulo, hasta que sea visible dentro de todos los procedimientos del módulo. Sin embargo, si se transfiere un elemento, la matriz se bloquea para evitar una desasignación de memoria para el parámetro de referencia dentro del procedimiento, causando un comportamiento imprevisto cuando vuelve el procedimiento.

•	Intentó asignar un valor a una variable de tipo Variant que contiene una matriz, pero el tipo de datos Variant está bloqueado actualmente. Por ejemplo, si el código utiliza un bucle For Each...Next para repetirse sobre una variante que contiene una matriz, la matriz se bloquea a la entrada en el bucle y después se libera a la terminación del mismo:

AlgunaMatriz = Array(9,8,7,6,5,4,3,2,1)

For Each X In AlgunaMatriz

AlgunaMatriz = 301	' Genera un error porque la matriz está bloqueada.

Next X

Utilice un bucle For...Next en vez de For Each...Next para las repeticiones. Cuando el objeto de un bucle For Each...Next es una matriz, puede leer la matriz, pero no escribir en ella.

Si desea más información, seleccione el tema en cuestión y presione F1.


No se encontró el nombre del archivo o el nombre de la clase durante la operación de Automatización (Error 432)
No se encontró el nombre del archivo o de la clase durante la operación de Automatización (Error 432)

La función GetObject requiere o un nombre de archivo válido con una especificación de ruta de acceso o el nombre de una clase que esté registrada en el sistema. Las causas y posibles soluciones de este error son las siguientes:

•	No se pudo encontrar el nombre especificado para el nombre del archivo o de la clase en una llamada a la función GetObject.

Compruebe los nombres e inténtelo de nuevo. Asegúrese de que el nombre utilizado para el parámetro clase coincide con el registrado en el sistema.

Si desea más información, seleccione el tema en cuestión y presione F1.


El objeto de Automatización no tiene un valor predeterminado (Error 443)

Cuando especifica un nombre de objeto sin una propiedad o método, Visual Basic asume que está haciendo referencia al miembro predeterminado del objeto (propiedad o método). Sin embargo, no todos los objetos exponen un miembro predeterminado. Las causas y posibles soluciones de este error son las siguientes:

•	Visual Basic no puede determinar el miembro predeterminado para el objeto especificado.

Compruebe la documentación del objeto y proporcione una especificación explícita para la propiedad o el método.

Si desea más información, seleccione el tema en cuestión y presione F1.


Error inesperado. Se cerrará el programa

Se ha producido un error inesperado y Visual Basic no puede continuar. Puede ser un problema de hardware o una consecuencia de otro programa de su sistema.


Los valores válidos son los números enteros desde 1 hasta 32
Los valores válidos son números enteros desde 1 hasta 32

Ha intentado establecer TabStop Width con un valor fuera del rango permitido. Sólo se aceptan en este campo números entre 1 y 32 (ambos inclusive).


Los valores válidos son los números enteros desde 2 hasta 60
Los valores válidos son números enteros desde 2 hasta 60

Ha intentado establecer Grid Width o Grid Height con un valor fuera del rango permitido. Sólo se aceptan en este campo números entre 2 y 60 (ambos inclusive).


El elemento especificado es un formulario binario y no se puede cargar en Visual Basic

Los formularios binarios creados con versiones anteriores de Visual Basic, no se pueden cargar en esta versión. Sólo las versiones 2.0 y 3.0 de Visual Basic permiten la conversión de formularios binarios a ASCII. Si tiene una copia de Visual Basic 2.0 o 3.0, puede cargar el formulario creado con la versión 1.0 y las otras versiones y guardarlas como texto. Después puede importar el formulario en Visual Basic.


El archivo de proyecto es de sólo lectura

No se puede escribir en el archivo de proyecto. Si desea modificarlo, debe guardarlo con otro nombre o quitar el atributo de sólo lectura.


El archivo es de sólo lectura

No se puede escribir en el archivo. Para modificarlo, debe guardarlo con otro nombre o quitar el atributo de sólo lectura.


Ya existe un procedimiento con este nombre

Los nombres de procedimiento dentro del mismo alcance deben ser únicos. Cambie el nombre del procedimiento.


El archivo de proyecto especificado contiene un valor de clave no válido. El intervalo válido es de 0 a 'item3'

El intervalo de los valores de las claves está restringido. Deben estar dentro del intervalo especificado.


El nombre de proyecto es muy largo. El nombre se ha truncado

Si un nombre de proyecto excede la longitud permitida, se trunca a la longitud máxima permitida.


El archivo de proyecto especificado contiene una clave no válida. No se puede cargar el proyecto

No puede cargar el proyecto mientras el archivo de proyecto contenga la clave inválida.


item1' es una clave no válida. Imposible cargar el archivo 'item2'
El archivo de proyecto especificado contiene una clave no válida. Imposible cargar el proyecto.

No puede cargar el archivo mientras contenga una clave no válida.


Can't find file 'item'
No se puede encontrar el archivo especificado

No se puede encontrar el archivo especificado. Corrija la ruta o el nombre del archivo.


El archivo de proyecto especificado contiene un valor de clave no válido

La clave especificada es inválida. Debe corregirla.


No hay suficiente memoria para la ejecución. Se cerrará el programa

Visual Basic no tiene suficiente memoria para la ejecución. Cierre otras aplicaciones e inténtelo de nuevo.


Versión incorrecta de sistema operativo, se requiere el build especificado de Windows NT 3.51 o de Windows 95

Para ejecutar esta versión de Visual Basic, debe ejecutar la revisión especificada de Windows 95 o Windows NT 3.51.


Ha ocurrido el error del sistema especificado

Visual Basic se ha encontrado con un error generado por el sistema o por un componente externo.


El archivo especificado está marcado como una versión no soportada por la versión actual de Visual Basic y no se cargará

Ha intentado cargar un formulario de Visual Basic versión 1.0 o un formulario de una versión posterior que la versión actual de Visual Basic. No son compatibles.


El archivo de proyecto especificado está dañado y no se puede cargar

Visual Basic no puede leer el archivo de proyecto. Esto puede ocurrir si el archivo se ha modificado con un archivo externo a Visual Basic. Para corregir el problema, deshaga los cambios que haya realizado en el archivo.


El Diseñador no puede escribir en el archivo de caché especificado; sólo se utilizarán archivos normales al cargar

Su diseñador ActiveX no puede escribir información en el archivo de caché, por lo tanto el diseñador cargará los datos utilizando la información que no esté en el caché.

Para mejorar el rendimiento la próxima vez que inicie Visual Basic, el diseñador ActiveX escribe un archivo de caché. El diseñador no puede escribir en el archivo de caché debido al espacio insuficiente en disco o por un permiso inválido de acceso a la unidad de disco. Asegúrese de que tiene espacio disponible y permiso de escritura en la unidad de disco. Si el problema persiste, contacte con el distribuidor del diseñador ActiveX.


No hay memoria suficiente para cargar el archivo

Visual Basic no tiene suficiente memoria para cargar el archivo. Cierre otras aplicaciones e inténtelo de nuevo.


El nombre del procedimiento está duplicado

Ha definido (o está intentado definir) más de una versión de un procedimiento con el mismo nombre. Renombre uno de los procedimientos. Asegúrese de que la instrucciones  Declare duplicadas del mismo procedimiento tienen la misma cláusula Alias.


No es posible encontrar el archivo .exe de Ayuda de Windows

La aplicación de Ayuda de Windows no está disponible. Si winhelp.exe está en su equipo, asegúrese de que está en su ruta. Si no está en su equipo, ejecute la instalación de Microsoft Windows 95 o Microsoft Windows NT para instalarla.


No es posible mostrar la información del sistema

Visual Basic no puede mostrar la información del sistema cuando usted elige Información del Sistema en el cuadro de diálogo Acerca de Microsoft Visual Basic. Su sistema puede no tener memoria suficiente o un archivo requerido puede estar dañado o perdido.


Invalid procedure name
El nombre del procedimiento no es válido

Hay restricciones al nombrar el procedimiento además de las reglas para nombres de identificadores. Este error tiene las siguientes causas y soluciones:

•	Intentó definir un procedimiento, pero el nombre utilizado para el procedimiento no es válido porque el host ya utiliza ese identificador para otro propósito. Por ejemplo, si la aplicación host es Microsoft Excel, no puede definir un procedimiento con el nombre R1C1 porque ese identificador ya se utiliza en Microsoft Excel.

Elija otro nombre para el procedimiento.

•	El nombre del procedimiento es una palabra clave restringida, excede de 255 caracteres o no comienza con una letra.

Elija otro nombre para el procedimiento.

Para obtener más información, seleccione el elemento y presione F1.


La descripción de la aplicación no puede contener más de 2000 caracteres

No puede tener una descripción de aplicación con más de 2000 caracteres. Elimine algunos caracteres de la descripción.


Debe especificar el o los elementos a imprimir

No ha especificado qué quiere imprimir. Active al menos uno de las casillas de verificación Formulario o Código del cuadro de diálogo Imprimir, después de elegir Imprimir en el menú Archivo.


El nombre especificado no es un nombre de objeto permitido

Los nombres de los formularios y controles deben comenzar con una letra y tener un máximo de 40 caracteres, incluyendo letras, números y caracteres de subrayado (_).

Observe que la propiedad Name de un formulario o control es diferente de las propiedades Label (Caption, Text y Value), que muestran o etiquetan el contenido de un control en tiempo de ejecución. Estas propiedades pueden ser palabras clave reservadas, pueden comenzar con un número y pueden contener caracteres que no  alfanuméricos.


El nombre especificado está en conflicto con un módulo, proyecto u objeto de librería existente

Este error tiene las siguientes causas:

•	Ha cargado un formulario, Control de usuario, Documento de usuario o Página de propiedades que contiene objetos con nombre conflictivos. Esto puede ocurrir si el archivo se ha editado fuera de Visual Basic.

•	Este error también puede ocurrir cuando renombre un formulario con el mismo nombre que el proyecto, otro formulario o un módulo. También puede ocurrir cuando cambia el nombre del proyecto con el mismo nombre que un formulario o módulo.


En este momento no es posible establecer el nombre del proyecto

El nombre del proyecto no se puede establecer en este momento.


La descripción de la aplicación no puede contener más de 2000 caracteres


El componente ActiveX especificado no se registró correctamente o no se encontró
El componente ActiveX especificado no se ha encontrado o no está registrado correctamente

Un componente debe registrase en el registro del sistema. Este error tiene la siguiente causa y solución:

•	La información del componente en el registro es incorrecta, por lo tanto no se ha encontrado el componente.

Corrija el registro. Vuelva a instalar el componente, si es necesario.

•	El componente fue quitado eliminándolo, en lugar de utilizar un programa de desinstalación.

Reponga los archivos del componente en el directorio especificado en el registro.

Para obtener más información, seleccione el elemento y presione F1.


Imposible realizar la operación porque el proyecto está protegido
No se puede realizar la operación porque el proyecto está protegido

Cuando un proyecto está protegido, algunas acciones están prohibidas. Este error tiene la siguiente causa y solución:

•	El proyecto se protegió de forma inadvertida.

Elimine la protección y después intente la operación de nuevo.

•	El proyecto se protegió intencionadamente.

No intente realizar la operación hasta que elimine la protección la persona que la aplicó en primer lugar.

Para obtener más información, seleccione el elemento y presione F1.


Imposible iniciar una grabación hasta que haya terminado la sesión actual
No es posible iniciar una nueva grabación cuando la sesión ha finalizado

No puede “anidar” grabaciones. Este error tiene la siguiente causa y solución:

•	Ya tiene una grabación ejecutándose.

Termine la grabación actual antes de comenzar una nueva

Para obtener más información, seleccione el elemento y presione F1.


¿Desea exportar |1 antes de quitarlo?
¿Desea exportar el objeto especificado antes de quitarlo?

Puede exportar formularios y módulos y volver a cargarlos en otro momento. Este error tiene la siguiente causa y solución:

•	Está quitando un formulario o módulo del proyecto.

Para conservar el módulo, expórtelo. Después, puede importarlo en cualquier momento.

Para obtener más información, seleccione el elemento y presione F1.


La clase de formulario contenida en '|1' no es compatible con VBE. Imposible cargar el archivo.
La clase de formulario contenida en el archivo especificado no es compatible con Visual Basic for Applications; no se puede cargar el archivo.

Visual Basic for Applications sólo admite objetos formularios UserForm. Este error tiene la siguiente causa y solución:

•	Está intentando cargar un formulario de una versión anterior de Visual Basic o un formulario de una versión independiente de Visual Basic.

Lo más sencillo es volver a diseñar el formulario utilizando las herramientas UserForm en Visual Basic for Applications. Si puede guardar el formulario en formato ASCII, podrá modificarlo e importarlo. Sin embargo, debe tener un conocimiento completo del formato y limitaciones de los diferentes formatos de formularios.

Para obtener más información, seleccione el elemento y presione F1.


Imposible cargar el archivo especificado
No se pudo cargar el archivo especificado.

No todos los archivos se pueden cargar en Visual Basic for Applications. Este error tiene la siguiente causa y solución:

•	El archivo que está intentando cargar tiene un formato que Visual Basic no puede interpretar o el archivo está dañado.

No puede cargar el archivo.

Para obtener más información, seleccione el elemento y presione F1.


Este comando detendrá el depurador
Este comando detendrá el depurador.

Algunos comandos y acciones producen que Visual Basic detenga el análisis del código. Este error tiene la siguiente causa y solución:

•	Algunas modificaciones (como declarar una variable Static) y algunos comandos, como los que se utilizan para agregar un nuevo módulo o formulario hacen que se detenga el código en ejecución o suspendido.

Si no quiere que se detenga el código en ejecución, no agregue o ejecute el comando.

Para obtener más información, seleccione el elemento y presione F1.


Ha guardado este proyecto para agregar una referencia
Debe guardar un proyecto antes de hacer referencia al mismo

No se puede agregar una referencia a un proyecto que no esté guardado. Este error tiene la siguiente causa y solución:

•	Ha intentado agregar una referencia cuando el proyecto no estaba guardado.

Guarde el proyecto antes de agregar la referencia.

Para obtener más información, seleccione el elemento y presione F1.


El uso del objeto no es válido (Error 425)

La mayoría de los objetos sólo se pueden utilizar de unas formas determinadas, normalmente al intentar utilizar un objeto fuera del alcance para el que está relacionado. Por ejemplo una referencia del objeto pasada a un evento de arrastrar y colocar puede utilizarse probablemente sólo en el contexto de ese evento.


Imposible imprimir la imagen de formulario en este tipo de impresora (Error 425)
No se puede imprimir la imagen de formulario en este tipo de impresora (Error 486)

Debe tener una impresora capaz de imprimir gráficos para imprimir una imagen de formulario.


Imposible utilizar el objeto especificado como un formulario propietario para Show() (Error 371)
El objeto especificado no se puede utilizar como un formulario propietario para Show() (Error 371)

Debe utilizar un objeto apropiado con el método Show.


No se ha encontrado el control ActiveX 'item' (Error 363)
No se ha encontrado el control ActiveX especificado (Error 363)

El formulario que se está cargando contiene un control ActiveX que no forma parte del proyecto actual. Este error tiene las siguientes causas y soluciones:

•	Puede haber editado manualmente el archivo de proyecto .vbp para agregar un formulario que contiene un control ActiveX que todavía no forma parte del proyecto.

Después de cargar el proyecto, utilice el comando Agregar archivo del menú Archivo para agregar el control ActiveX al proyecto.

•	Puede haber editado manualmente el archivo del proyecto .vbp para agregar un formulario que contiene un control ActiveX que es una versión anterior que el control ActiveX que ya forma parte del proyecto.

Después de cargar el proyecto, elimine la versión anterior del formulario y coloque la última versión del control en el formulario.


El componente ActiveX no está registrado correctamente (Error 336)

El componente ActiveX no ha sido registrado apropiadamente en el registro del sistema.


No se encontró el valor del dato (Error 327)

El valor del dato no se ha encontrado.


La imagen no es válida (Error 481)

Un formato gráfico no válido se asignó a la propiedad Picture. Este error tiene la causa y la solución siguiente:

•	Ha intentado asignar un formato gráfico distinto de un mapa de bits, icono o meta-archivo de Windows a la propiedad Picture de un formulario o control.

Asegúrese que el archivo que está intentando grabar dentro de la propiedad Picture es un archivo gráfico válido admitido por Visual Basic.


Error de la impresora (Error 482)

Hay un error que impide imprimir. Este error tiene las siguientes causas y soluciones:

•	No tiene una impresora instalada en el Panel de control de Windows.

Abra el Panel de control, haga doble clic en el icono Impresoras y haga clic en Agregar impresora para instalar una impresora.

•	Su impresora no está en línea.

Ponga físicamente la impresora en línea.

•	Su impresora se ha atascado o no tiene papel.

Corrija físicamente el problema.

•	Intentó imprimir un formulario en una impresora que sólo puede aceptar texto.

Cambie a una impresora instalada que pueda imprimir gráficos.


El controlador de impresora no admite la propiedad especificada (Error 483)

El controlador de impresora para la impresora en uso no admite esta propiedad del objeto Printer. Este objeto tiene la siguiente causa y solución:

•	El efecto de las propiedades del objeto Printer depende del controlador proporcionado por el fabricante de la impresora. Algunos valores de propiedad pueden no tener efecto o bien muchos valores de propiedad diferentes pueden tener el mismo efecto. Los valores fuera del intervalo aceptado pueden o no producir un error.

Si desea más información, consulte la documentación del fabricante para el controlador específico.


Problemas al obtener información de la impresora desde el sistema. Asegúrese de que la impresora está configurada correctamente
Problemas al obtener información de la impresora desde el sistema; asegúrese de que la impresora está configurada correctamente. (Error 484)

Hay algún problema que impide obtener información de la impresora desde el sistema. Este error tiene las siguientes causas y soluciones:

•	No tiene una impresora instalada en el Panel de control de Windows.

Abra el Panel de control, haga doble clic en el icono Impresoras y haga clic Agregar impresora para instalar una impresora.

•	Su impresora no está en línea.

Ponga físicamente su impresora en línea.

•	Su impresora se ha atascado o no tiene papel.

Corrija físicamente el problema.


El tipo de imagen no es válido (Error 485)

El formato de imagen del archivo de recursos que intentó cargar no coincide con la propiedad especificada del objeto. Este error tiene las siguientes causas y soluciones:

•	Intentó utilizar el método LoadResPicture para cargar un recurso de mapa de bits como la propiedad Icon de un formulario.

Cambie la propiedad a la propiedad Picture o cambie el argumento formato de LoadResPicture a vbResIcon.

•	Intentó utilizar el método LoadResPicture para cargar un recurso de cursor como alguna propiedad de un objeto o control distinta de la propiedad MousePointer.

Cambie la referencia a la propiedad MousePointer.


Imposible vaciar el Portapapeles (Error 520)
No se puede vaciar el Portapapeles (Error 520)

El Portapapeles se abrió pero no puede vaciarse. Este error tiene la siguiente causa y solución:

•	Otra aplicación está utilizando el Portapapeles y no lo liberará para su aplicación.

Establezca en su código un controlador de errores para esta situación y proporcione un cuadro de mensaje con los botones Reintentar y Cancelar para permitir al usuario intentarlo de nuevo tras una corta pausa.


Imposible abrir el Portapapeles (Error 521)
No se puede abrir el Portapapeles (Error 521)

El Portapapeles ya está abierto por otra aplicación. Este error tiene la siguiente causa y solución:

•	Otra aplicación está utilizando el Portapapeles y no lo liberará para su aplicación.

Establezca en su código un controlador de errores para esta situación y proporcione un cuadro de mensaje con los botones Reintentar y Cancelar para permitir al usuario intentarlo de nuevo tras una corta pausa.


El formato especificado no coincide con el formato de los datos (Error 461)

El formato del Portapapeles especificado es incompatible con el método que se está ejecutando. Este error tiene las siguientes causas y soluciones:

•	Intentó utilizar el método GetText o el método SetText con un formato del Portapapeles distinto de vbCFText o vbCFLink.

Antes de utilizar estos métodos, utilice el método GetFormat para comprobar si el contenido actual del Portapapeles coincide con el formato especificado.

•	Intentó utilizar el método GetData o el método SetData con un formato del Portapapeles distinto de vbCFBitmap, vbCFDIB o vbCFMetafile.

Antes de utilizar estos métodos, utilice el método GetFormat para comprobar si el contenido actual del Portapapeles coincide con el formato gráfico especificado.


El formato del Portapapeles no es válido (Error 460)

El formato del Portapapeles especificado es incompatible con el método que se está ejecutando. Este error tiene las siguientes causas y soluciones:

•	Intentó utilizar el método GetText o el método SetText con un formato del Portapapeles distinto de vbCFText o vbCFLink.

Elimine el formato no válido y especifique uno de los dos formatos válidos.

•	Intentó utilizar el método GetData o SetData con un formato del Portapapeles distinto de vbCFBitmap, vbCFDIB o vbCFMetafile.

Elimine el formato no válido y especifique uno de los tres formatos gráficos válidos.


No se encontró la información de licencia de este componente. No dispone de una licencia apropiada para utilizar esta función e
No se encontró la información de licencia para este componente. No tiene una licencia adecuada para usar esta característica en el entorno de diseño (Error 429)

No tiene licencia de usuario del control ActiveX. Este error tiene la siguiente causa y solución:

•	Intentó colocar un control ActiveX en un formulario en tiempo de diseño o trató de agregar un formulario a un proyecto con un control ActiveX en él, pero la información asociada en el registro no pudo encontrarse.

La información en el registro puede haber sido eliminada o haberse dañado. Vuelva a instalar el control ActiveX o contacte con el distribuidor del control.


El formulario ya está mostrado. Imposible mostrar en forma modal (Error 400)
El formulario ya está mostrado; no se puede mostrar en forma modal (Error 400)

No puede utilizar el método Show para mostrar un formulario visible como modal. Este error tiene la siguiente causa y solución:

•	Intentó utilizar Show, con el argumento estilo establecido a 1 - vbModal, en un formulario ya visible.

Utilice la instrucción Unload o el método Hide en el formulario antes de intentar mostrarlo como un formulario modal.


Primero debe cerrar u ocultar el formulario modal superior (Error 402)

El formulario modal que está intentando cerrar u ocultar no está en el nivel superior del orden z. Este error tiene la siguiente causa y solución:

•	Otro formulario modal está más adelante en el orden del eje z que el formulario modal que intentó cerrar u ocultar.

Primero utilice la instrucción Unload o el método Hide en cualquier formulario modal que esté por delante en el orden del eje z. Un formulario modal es un formulario mostrado con el método Show, con el argumento estilo establecido a 1 - vbModal.


Imposible cargar o descargar este objeto (Error 361)
No se puede cargar o descargar este objeto (Error 361)

Una instrucción Load o Unload ha hecho referencia a un objeto o control no válido. Este error tiene las siguientes causas y soluciones:

•	Intentó cargar o descargar un objeto que no es cargable, como Screen, Printer, o Portapapeles.

Elimine la instrucción errónea de su código.

•	Intentó cargar o descargar un control ya existente que no es parte de una matriz de control. Por ejemplo, asumiendo que existe un TextBox con la propiedad Name como Text1,entonces Load Text1 causará este error.

Elimine la instrucción errónea de su código o cambie la referencia a un control en una matriz de control.

•	Intentó descargar un control Menu en el evento Clic de su menú principal.

Descargue el control Menu con algún otro procedimiento.

•	Intentó descargar el último elemento de menú visible de un control Menu.

Compruebe los valores de la propiedad Visible para los otros elementos de menú de la matriz de controles antes de intentar descargar un elemento de menú o eliminar la instrucción errónea de su código.


Ya se ha cargado el objeto (Error 360)

El control en la matriz de controles ya se ha cargado. Este error tiene la siguiente causa y solución:

•	Intentó agregar un control a una matriz de controles en tiempo de ejecución con la instrucción Load pero el valor del índice al que se está refiriendo ya existe.

Cambie la referencia del índice a un nuevo valor o verifique si su código está ejecutando, más de una vez, la misma instrucción Load, con la misma referencia al valor del índice.


No se encontró el formulario (Error 424)

El formulario no se ha encontrado. Este error tiene la siguiente causa y solución:

•	Intentó agregar un formulario a la colección UserForms utilizando el método Add pero no hay clase de formulario de ese nombre. Por ejemplo, UserForms.Add "MiForm", donde MiForm no existe.

Asegúrese que la clase está disponible en su proyecto.


Imposible descargar dentro de este contexto (Error 365)
No se puede descargar dentro de este contexto (Error 365)

En algunas situaciones no se le permite descargar un formulario o control sobre un formulario. Este error tiene las siguientes causas y soluciones:

•	Hay una instrucción Unload en el evento Paint para el formulario o para el control de un formulario que tenga el evento Paint.

Elimine la instrucción Unload del evento Paint.

•	Hay una instrucción Unload en uno de los eventos Change, Click o DropDown de un control ComboBox.

Elimine la instrucción Unload del evento.

•	Hay una instrucción Unload en el evento Scroll de un control HScrollBar o VScrollBar.

Elimine la instrucción Unload del evento.

•	Hay una instrucción Unload en el evento Resize de un control Data, Form, MDIForm o PictureBox.

Elimine la instrucción Unload del evento.

•	Hay una instrucción Unload en el evento Resize de un control MDIForm que está intentando descargar un formulario secundario MDI.

Elimine la instrucción Unload del evento.

•	Hay una instrucción Unload en los eventos RePosition o Validate de un control Data.

Elimine la instrucción Unload del evento.

•	Hay una instrucción Unload en el evento ObjectMove de un control OLE Container.

Elimine la instrucción Unload del evento.


Imposible cargar la DLL 'dll' del sistema (Error 298)
No se puede cargar la DLL especificada del sistema (Error 298)

No se puede encontrar un archivo .dll proporcionado por el sistema operativo; por ejemplo, DDEML.DLL, VERSION.DLL o WINSPOOL.DRV. Este error tiene las siguientes causas y soluciones:

•	El archivo no está en la ruta apropiada.

Asegúrese de que la DLL está en la ruta de acceso del Sistema de Windows.

•	La DLL está dañada o se ha eliminado.

Vuelva a cargar la DLL.

•	No hay suficiente memoria o espacio de intercambio.

Intente liberar algo de memoria cerrando otras aplicaciones.


Imposiblen utilizar nombres de dispositivos de caracteres en nombres de archivos: 'item' (Error 320)
No se pueden utilizar nombres de dispositivos de caracteres en nombres de archivos (Error 320)

Desde dentro de Visual Basic, no puede dar a un archivo el mismo nombre que el de un controlador de dispositivo de caracteres. Este error tiene la siguiente causa y solución:

•	Intentó utilizar un nombre de archivo como AUX, CON, COM1, COM2, LPT1, LPT2, LPT3, LPT4 o NUL.

De otro nombre al archivo.


El formato de archivo no es válido (Error 321)
Formato de archivo no válido (Error 321)

Un archivo del formulario de Visual Basic está dañado. Este error tiene las siguientes causas y soluciones:

•	El formulario tiene un control ActiveX dañado.

Intente reemplazar el control ActiveX del formulario.

•	El número de propiedades en la versión actual del control ActiveX no coincide con el número esperado de propiedades.

Intente remplazar el control ActiveX con una versión anterior o posterior.


Parámetro ilegal. Imposible escribir matrices (Error 328)
Parámetro no válido. No se puede escribir matrices (Error 328)

Se ha pasado al método un parámetro no válido. Este error tiene la siguiente causa y solución:

•	En el evento WriteProperties de su Control de usuario, intentó hacer un PropBag.WriteProperty X, donde X es una matriz. Esta acción no está permitida.

Debe escribir cada elemento de la matriz individualmente.


Imposible tener acceso al registro del sistema (Error 335)
No se puede acceder al registro del sistema (Error 335)

Se produjo un fallo en el intento de leer o escribir en el registro del sistema.


No se encontró el componente ActiveX (Error 337)

El archivo .exe o .dll requerido no se pudo encontrar.


El componente ActiveX no se ejecutó correctamente (Error 338)

El archivo .exe del componente ActiveX falló en el intento de ejecutarse correctamente. Puede haber un problema con la información en el registro.


El objeto se ha descargado (Error 364)

Un formulario se descargó de su propio procedimiento _Load. Este error tiene la siguiente causa y solución:

•	Un formulario con una instrucción Unload en su procedimiento _Load se cargó implícitamente. Por ejemplo, la siguiente instrucción cargará implícitamente YourForm si no se ha cargado ya:

MiForm.BackColor = SuForm.BackColor.

Elimine la instrucción Unload del procedimiento Form_Load.


El archivo 'elemento' no está actualizado. Este programa necesita una versión más reciente (Error 368)
El archivo especificado no está actualizado. Este programa necesita una versión más reciente (Error 368)

Se encontró un control ActiveX no actualizado. Este error tiene la siguiente causa y solución:

•	El número de propiedades en la versión actual del control ActiveX no coincide con el número esperado de propiedades.

Reemplace el control ActiveX por una versión posterior.


El valor de la propiedad no es válido (Error 380)

Se asignó a una propiedad un valor inapropiado. Este error tiene la siguiente causa y solución:

•	Intentó establecer una de las propiedades de un objeto o control con un valor fuera de su intervalo permitido.

Cambie el valor de la propiedad a un valor de configuración válido. Por ejemplo, la propiedad MousePointer debe establecerse con un entero entre 0 y 15 ó 99.


La propiedad 'elemento' no se puede establecer en tiempo de ejecución (Error 382)
La propiedad especificada no se puede establecer en tiempo de ejecución (Error 382)

La propiedad es de sólo lectura en tiempo de ejecución. Este error tiene la siguiente causa y solución:

•	Intentó establecer o cambiar una propiedad cuyo valor solo puede establecerse en tiempo de diseño.

Elimine la referencia a la propiedad de su código o cambie la referencia para que sólo devuelva el valor de la propiedad en tiempo de ejecución.


La propiedad 'elemento' es de solo lectura (Error 383)
La propiedad especificadaes de sólo lectura (Error 383)

La propiedad es de sólo lectura tanto en tiempo de diseño como en tiempo de ejecución. Este error tiene la siguiente causa y solución:

•	Intentó establecer o cambiar una propiedad cuyo valor sólo puede leerse.

Elimine la referencia a la propiedad de su código o cambie la referencia para que sólo devuelva el valor de la propiedad en tiempo de ejecución.


La propiedad 'elemento' no se puede leer en tiempo de ejecución (Error 393)
La propiedad especificada no se puede leer en tiempo de ejecución (Error 393)

La propiedad sólo está disponible en tiempo de diseño. Este error tiene la siguiente causa y solución:

•	Intentó leer en tiempo de ejecución una propiedad que sólo es accesible en tiempo de diseño.

Cambie su código y elimine la referencia a la propiedad.


La propiedad 'item' es de solo escritura (Error 394)
La propiedad especificada es de sólo escritura (Error 394)

La propiedad no puede leerse. Este error tiene la siguiente causa y solución.

•	Una propiedad no puede leerse; por ejemplo, ctl.property = 3 podría ser válida, pero "Print ctl.property" generaría este error.

Cambie su código y elimine la referencia a la propiedad.


Permiso denegado para utilizar el objeto (Error 419)

No tiene los permisos necesarios para el objeto especificado. Este error tiene la siguiente causa y solución:

•	Actualmente no tiene la autorización para tener acceso a este objeto.

Para cambiar sus asignaciones de permiso, consulte con el administrador del sistema o con el creador del objeto.


Imposible crear una imagen AutoRedraw (Error 480)
No se puede crear una imagen AutoRedraw (Error 480)

Visual Basic no puede crear un mapa de bits permanente para  redibujar automáticamente el formulario o imagen. Este error tiene la siguiente causa y solución:

•	No hay suficiente memoria disponible para establecer la propiedad AutoRedraw a True.

Establezca la propiedad AutoRedraw a False y realice su propio proceso de actualización con el procedimiento de evento Paint o haga más pequeño el control PictureBox o el objeto Form e intente la operación de nuevo con AutoRedraw establecida a True.


Sin memoria (Error 31001)

El sistema no puede localizar o acceder a memoria o espacio en disco suficiente para completar la operación especificada.


Ningún objeto (Error 31004)

Intentó realizar una acción sobre un objeto que no existe.


La clase no está establecida (Error 31018)

Si no especifica un documento origen (propiedad SourceDoc) cuando se configura Action = 0 (método CreateEmbed), la propiedad Class debe establecerse con el nombre de una clase disponible en su sistema.

Para mostrar una lista de los nombres de clases disponibles en tiempo de diseño, haga clic en el control contenedor OLE con el botón secundario del mouse y elija el comando Insertar objeto.


Imposible activar el objeto (Error 31027)

El documento origen del objeto no puede cargarse o la aplicación que creó el objeto no está disponible.

Este error se produce cuando intenta activar un objeto vinculado (Action = 7) y el fichero especificado en la propiedad SourceDoc ha sido eliminado o ya no existe.

Este error también se produce cuando intenta activar un objeto (Action = 7) y la acción especificada por la propiedad Verb no es válida. Algunas aplicaciones que proporcionan objetos pueden admitir diferentes verbos, dependiendo del estado de la aplicación. Todos los verbos admitidos por una aplicación se enumeran en la lista de la propiedad ObjectVerbs. Sin embargo, algunos verbos pueden no ser válidos para el estado actual de la aplicación.


Imposible crear el objeto incrustado (Error 31032)

La aplicación que está creando el objeto no puede crear el objeto como se especificó en la propiedad SourceDoc.

Por ejemplo, este error se produce si intenta incrustar un objeto de hoja de cálculo y SourceDoc especifica una hoja de cálculo que es demasiado grande para cargarse por la aplicación de la hoja de cálculo.


Error al guardar el archivo (Error 31036)

Visual Basic no puede escribir el objeto en el archivo especificado (Action = 11 o 18). Causas posibles:

•	La propiedad FileNumber no es válida.

•	El archivo especificado no se abrió en modo Binary.

•	No hay suficiente espacio en disco.


Error al cargar el archivo (Error 31037)

Ocurrió un error mientras intentaba leer el archivo especificado (Action = 12). Causas posibles:

•	La propiedad FileNumber no es válida.

•	El archivo no se abrió en modo Binary.

•	El archivo no se guardó correctamente (Action = 11).

•	El archivo está dañado.

•	La posición del archivo no está situada al principio de un objeto OLE válido.


En la línea especificada: el nombre del formulario no es válido. Imposible cargar este formulario

El archivo ASCII contiene un nombre de formulario que no tiene una cadena Visual Basic válida. El formulario no se ha cargado.


En la línea especificada: imposible crear el objeto incrustado especificado

No se pudo crear un objeto incrustado durante la carga de un formulario, Control de usuario, Documento de usuario o Página de propiedades desde un archivo de texto. Por ejemplo, obtendrá este error si había insertado previamente un documento Microsoft Word en un formulario y quita Microsoft Word de sus sistema. Este mensaje está escrito en un archivo de registro de errores.


En la línea especificada: imposible crear el objeto incrustado especificado. No se encontró la licencia

No se pudo crear un objeto incrustado durante la carga de un formulario, Control de usuario, Documento de usuario o Página de propiedades desde un archivo de texto debido a que no se encontró la licencia. Debe tener una licencia para utilizar este objeto. Contacte con el distribuidor de objeto para obtener más información. Este mensaje está escrito en un archivo de registro de errores.


En la línea especificada: ha excedido el nivel máximo de anidación de controles del elemento especificado

El archivo ASCII contiene controles anidados con más de 7 niveles de profundidad.


En la línea especificada: todos los controles deben preceder a los menús. Imposible cargar el control especificado

Ha aparecido un control en una posición incorrecta en el archivo ASCII de formulario. Todos los controles deben cargarse antes que los menús.


En la línea especificada: imposible cargar el menú especificado como un separador.

El archivo ASCII contiene un control Menu cuyo menú primario o de nivel superior está definido como un separador de menú. Los menús primarios no pueden ser separadores de menú. El separador no estará definido.


En la línea especificada: No se puede establecer la propiedad Checked en el menú especificado. El menú primario no puede estar
En la línea especificada: No se puede establecer la propiedad Checked en el menú especificado. El menú primario no puede estar cargado.

Un Menu primario apareció en el archivo ASCII de formulario con su propiedad Checked establecida a True. Los menús primarios no pueden activarse. El control Menu se cargará, pero su propiedad Checked no se establecerá.


En la línea especificada: No se puede establecer la propiedad Shortcut del menú especificado. El menú primario no puede estar
En la línea especificada: No se puede establecer la propiedad Shortcut del menú especificado. El menú primario no puede estar marcado.

Apareció un control Menu primario en el archivo ASCII de formulario con una tecla de método abreviado definida. Los menús primarios no pueden tener una tecla de método abreviado. El control Menu se cargará, pero su propiedad Shortcut no se establecerá.


En la línea especificada: El nombre del formulario especificado ya está en uso. No se puede cargar este formulario.

El archivo ASCII contiene un formulario con un nombre que ya se está utilizando en la aplicación. El formulario no se carga.


Hay un conflicto de atributos en el elemento especificado. Se usarán los valores predeterminados

Alguna de las instrucciones de atributos de un formulario, Control de usuario, Página de propiedades, Documento de usuario o Módulo de clase tienen un conflicto con los valores requeridos por sus tipos. Por ejemplo, los formularios deben tener siempre el atributo VB_PredeclaredId igual a True. Este error se puede producir si el archivo se ha modificado con un editor distinto de Visual Basic.


El elemento especificado es un archivo de sólo lectura

Ha preguntado si desea guardar un archivo de sólo lectura. Los archivos de sólo lectura se muestran en el Explorador de proyectos como [image]. No puede guardar archivos de sólo lectura, pero sí utilizar la opción Guardar como.


En la línea especificada: No se puede crear la referencia especificada

No se pudo crear la referencia indicada en la línea especificada.


En la línea especificada: No es posible cargar el archivo especificado.

Errores sintácticos están impidiendo a Visual Basic reconocer y cargar o el nombre del formulario en conflicto impide cargar un formulario ASCII. El formulario no se cargará y el nombre del formulario no se mostrará en el Explorador de proyectos.

Asegúrese de que el archivo que causa el error es un formulario ASCII válido con el formato correcto y que no exista conflicto entre los diferentes formularios del proyecto.


Se han producido errores durante la carga

Compruebe el archivo de registro de errores para obtener información más descriptiva.


No es posible cargar el elemento especificado¿Quitarlo de la lista de complementos disponibles?

Visual Basic no puede cargar el complemento que está intentando seleccionar de la lista Complementos disponibles del cuadro de diálogo Administrador de complementos. Haga clic en Sí para quitarlo de la lista o haga clic en No para dejarlo en la lista. En cualquier caso, no podrá cargarlo.


Visual Basic no puede cargar el elemento especificado porque no está en el registro del sistema. Asegúrese de que todos los
Visual Basic no puede cargar el elemento especificado porque no está en el registro del sistema. Asegúrese de que todos los complementos han sido instalados correctamente.

Visual Basic no pudo cargar el complemento que intentó seleccionar de la lista de Complementos disponibles en el cuadro de diálogo Administrador de complementos, porque no estaba registrado apropiadamente o no estaba registrado en el registro del sistema.


¿Desea ver más errores de carga?

Haga clic en Aceptar para ver más errores, de lo contrario haga clic en Cancelar.


No es posible cargar el elemento especificado

Errores sintácticos están impidiendo a Visual Basic reconocer y cargar un archivo o los conflictos del nombre del formulario impiden cargar un formulario ASCII. El formulario no se cargará y el nombre del formulario no se mostrará en el Explorador de proyectos.

Asegúrese que el archivo que causa el error es un formulario ASCII válido con el formato correcto y que no existe conflicto entre los diferentes formularios del proyecto.


El número de la versión no existe o no es válido

No se ha encontrado la versión o no se reconoce la versión especificada. Asegúrese que la primera línea no está en blanco o que un comentario en el formulario ASCII especifica la versión correcta.


El elemento especificado está referenciado por el proyecto especificado y no puede actualizarse.

El control especificado está siendo referenciado por más de un proyecto . Actualizarlo en un proyecto puede hacerlo no válido en el otro proyecto.


No es posible eliminar el control o la referencia. Se está utilizando actualmente

El control ActiveX o la referencia que está intentado quitar, está siendo utilizada por uno de los formularios del proyecto. Elimine primero el control o la referencia del objeto del formulario y después desactive la selección de la lista.


No es posible salir en este momento

No puede salir de Windows mientras Visual Basic esté en modo ejecución o en modo de interrupción. Tampoco puede salir de Windows mientras se muestre un cuadro de mensaje.


Error al cargar el elemento especificado. Se ha detectado un error al cargar una propiedad. ¿Continuar?

Debe haber intentado cargar un formulario con controles cuyos nombres entran en conflicto con los de los formularios que ya están en el proyecto. Por ejemplo, cargar un Formulario2 que contiene un control Formulario1 desencadena este error.


Error al cargar el elemento especificado. No es posible cargar un control debido a un error de carga. ¿Continuar?

Este mensaje de error aparece tras haber ocurrido otro error. Despues que haya realizado la acción apropiada para ese error, verá este mensaje de error. Para cargar el control de cualquier manera, elija Sí. Para cancelar la carga, elija No.


El elemento especificado tiene un formato antiguo. Al guardarlo, se guardará con un nuevo formato.

Este archivo se creó con una versión antigua de Visual Basic. Cuando lo guarde, se guardará con el formato de archivo de la versión actual.


El elemento especificado ya existe en el proyecto

El archivo que especificó ya es parte del proyecto. No puede agregar el mismo archivo a un proyecto más de una vez. No puede guardar un archivo con el mismo nombre que otro archivo del proyecto.


Errores de carga. Consulte el elemento especificado para obtener más detalles

Ocurrió algo inesperado en el archivo de formulario ASCII. Visual Basic creó un archivo de registro para proporcionar más detalles sobre algunos errores. Puede examinar el archivo de registro para determinar la importancia del problema. Algunas veces puede ignorar de forma segura los errores (por ejemplo, Número de versión perdida o no válida...). Otras veces, sin embargo, los errores podrían hacer que el formulario no se ejecutase conforme se esperaba (por ejemplo, No se cargó la clase de control Class MiClase del control MiControl).


El valor de la cadena es demasiado largo para ser procesado. Se ha interrumpido la carga del formulario

Una cadena incrustada en el formulario que se está cargando es demasiado larga para procesarse.


Se han modificado uno o más archivos de este proyecto. ¿Desea guardar los cambios?

Una de las configuraciones de propiedad o una instrucción de código ha cambiado en uno o varios archivos del proyecto y los cambios no se han guardado todavía. Ésta es su última oportunidad para guardar los cambios antes de cargar otro proyecto.


No es posible registrar el elemento especificado

El archivo especificado no se pudo registrar en el registro del sistema. El error está relacionado con las bibliotecas de tipos utilizadas por componentes del entorno de programación de Visual Basic (por ejemplo OC25.DLL, VB.OLB, DAO2516.DLL) e indica que la entrada del archivo especificado en el registro del sistema está corrupta o que la DLL se ha perdido o está dañada.


Otras aplicaciones están teniendo acceso a un objeto del programa. Si finaliza la ejecución del programa, se podrían producir
Otras aplicaciones están teniendo acceso a un objeto del programa. Si finaliza la ejecución del programa, se podrían producir errores en esas aplicaciones. ¿Desea finalizar la ejecución ahora?

Se esta accediendo por al menos otra aplicación a un Objeto de automatizacióndel programa Visual Basic que usted está ejecutando actualmente. Si finaliza su programa puede causar un error en la otra aplicación. Elija Sí para salir del programa o elija No para continuar.


Una o más propiedades de el elemento especificado están dañadas. Puede que alguna o todas ellas no se hayan establecido
Una o más propiedades de el elemento especificado están dañadas. Puede que alguna o todas ellas no se hayan establecido correctamente.

El archivo de proyecto especificado tiene un o más valores de configuración de propiedad no válidos. Este error ocurre sólo con archivos de proyecto.


Se encontraron nombres conflictivos en el elemento especificado. Se utilizará el nombre especificado.

El nombre de un formulario se ha encontrado dos veces en un formulario, Control de usuario, Página de propiedades o Documento de usuario. Este error se puede producir si el archivo se ha modificado con un editor diferente del editor de Visual Basic.


En la línea especificada: el nombre del control especificado no es válido.

El archivo ASCII contiene un nombre de control que no es una cadena válida en Visual Basic. El control no está cargado.


En la línea especificada: el nombre de la propiedad especificada no es válida.

El archivo ASCII contiene un nombre de propiedad que no es una propiedad válida para ese control.


En la línea especificada: El elemento especificado contiene una cadena encerrada entre comillas donde debería estar el nombre
En la línea especificada: El elemento especificado contiene una cadena encerrada entre comillas donde debería estar el nombre de la propiedad.

Una cadena encerrada entre comillas apareció en el archivo ASCII de formulario donde se esperaba el nombre de la propiedad. Los nombres de propiedad no se colocan entre comillas (" ").


En la línea especificada: La propiedad especificada tiene un índice de propiedad no válido.

El archivo ASCII contiene un nombre de propiedad con un índice de propiedad mayor de 255.


En la línea especificada: no es posible cargar la propiedad especificada.

El archivo ASCII contiene una propiedad desconocida. Esta propiedad se ignora cuando se cargue el formulario.


En la línea especificada: la propiedad especificada debe ser una cadena encerrada entre comillas.

El archivo ASCII contiene una propiedad que debe aparecer encerrada entre comillas (" "), pero no se han incluido las comillas. Se ignorará esta línea en la descripción de formulario.


En la línea especificada: la propiedad especificada tenía un valor no válido.

El archivo ASCII contiene una propiedad con un valor que no es correcto para este control. La propiedad toma su valor predeterminado.


En la línea especificada: la propiedad especificada tenía una referencia a archivo no válida.

El archivo ASCII contiene una referencia a un archivo que Visual Basic no pudo encontrar en el directorio especificado.


En la línea especificada: no es posible establecer la propiedad especificada.

Visual Basic no puede definir la propiedad del control especificado tal y como se indica en la descripción del formulario del archivo ASCII.


En la línea especificada: la clase especificada del control especificado no era una clase de control cargada.

El archivo ASCII contiene una clase de control que no reconoce Visual Basic. Agregue el control personalizado con esta clase a su proyecto.


En la línea especificada: no es posible encontrar una propiedad Index y el control especificado ya existe.

El control no puede cargarse porque no hay índice y tiene el mismo nombre que un control cargado previamente.


En la línea especificada: el nombre del control es demasiado largo. Se ha truncado el elemento especificado.

El archivo ASCII contiene un nombre de control con una longitud superior a 40 caracteres. El control se cargará con el nombre truncado a los 40 primeros caracteres.


En la línea especificada: el nombre de clase es demasiado largo. Se ha truncado el elemento especificado.

El archivo ASCII contiene un nombre de clase con una longitud superior a 40 caracteres. La clase se cargará con el nombre truncado a los 40 primeros caracteres.


En la línea especificada: error de sintaxis: a la propiedad especificada le falta un signo igual (=).

El archivo ASCII contiene un nombre de propiedad y un valor sin un signo igual (=) entre ellos. La propiedad no se carga.


En la línea especificada: Imposible cargar el control especificado. El control contenedor no es un control contenedor válido.

Ha intentado cargar un control en un control que no es un contenedor válido.


En la línea especificada: Imposible cargar el control especificado. Ya se ha utilizado este nombre.

El control nombrado en el archivo de texto ASCII no pudo cargarse porque su nombre ya se está utilizando en la aplicación.


En la línea especificada: en el archivo especificado falta la clase de control o no es válida.

El archivo ASCII contiene un nombre de clase de control desconocido en la descripción del formulario, o el nombre del control no es una cadena válida en Visual Basic.


En la línea especificada: en el archivo especificado, falta el nombre del control o no es válido.

El archivo ASCII contiene un nombre de control desconocido en la descripción del formulario, o el nombre del control no es una cadena válida en Visual Basic.


En la línea especificada: Imposible cargar el control especificado. No se encontró la licencia.

No se pudo crear un control ActiveX durante la carga de un formulario, Control de usuario, Documento de usuario o Página de propiedades. El control puede haber desaparecido o estar dañado. Vuelva a instalarlo e inténtelo de nuevo. Este mensaje está escrito en un archivo de registro de errores.


En la línea especificada: el CLSID especificado no es válido

No se pudo cargar un objeto durante la carga de un formulario, Control de usuario, Documento de usuario o Página de propiedades de un archivo de texto. El CLSID especificado en el archivo no es válido. Se aplica sólo a objetos que tienen propiedades como el objeto Font. Este mensaje está escrito en un archivo de registro de errores.


Imposible crear la referencia al elemento especificado

Se ha producido un error al establecer un referencia mientras se cargaba el archivo, por lo tanto no se agregaron las referencias.


No se cargará el elemento especificado. El nombre ya está en uso.

No puede tener dos elementos del tipo especificado cargados a la vez.


El proyecto especificado hace referencia al elemento especificado y no se puede actualizar.
El proyecto especificado hace referencia al elemento especificado y no se puede actualizar


ChDir (Ejemplo de la instrucción)
Ejemplo de la instrucción ChDir

En este ejemplo se utiliza la instrucción ChDir para cambiar el directorio o carpeta actual.

' Cambia el directorio o carpeta actual a "MIDIR".

ChDir "MIDIR"

' En Microsoft Windows:

' Se supone que "C:" es la unidad de disco actual. La siguiente instrucción cambia el directorio

' predeterminado de la unidad "D:". "C:" continúa siendo la unidad actual.

ChDir "D:\WINDOWS\SYSTEM"

' En Macintosh:

' Cambia la carpeta y la unidad de disco predeterminada.

ChDir "HD:MI CARPETA"


ChDrive (Ejemplo de la instrucción)
Ejemplo de la instrucción ChDrive

En este ejemplo se utiliza la instrucción ChDrive para cambiar la unidad de disco actual.

' En Microsoft Windows:

ChDrive "D"	' Hace que "D" sea la unidad de disco actual.

' En Macintosh:

' Hace que "MI UNIDAD" sea la unidad actual.

ChDrive "MI UNIDAD:"

' Hace que "MI UNIDAD" sea la unidad de disco y carpeta actual dado que

' es la raíz.

ChDrive "MI UNIDAD: MI CARPETA "


CurDir (Ejemplo de la función)
Ejemplo de la función CurDir

En este ejemplo se utiliza la función CurDir para obtener la ruta de acceso actual.

' En Microsoft Windows:

' Se supone que la ruta de acceso actual en la unidad C es "C:\WINDOWS\SYSTEM".

' 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".

' En Macintosh:

' Se ignoran las letras de unidad de disco. Se devuelve la ruta de acceso de la unidad de disco actual.

' Se supone que la ruta de acceso actual en la unidad HD ' es "HD:MI CARPETA ".

' Se supone que la unidad de disco actual es HD y que se ' cuenta también con la unidad MD.

Dim MiRuta

MiRuta = CurDir	' Se devuelve "HD:MI CARPETA".

MiRuta = CurDir("HD")	' Se devuelve "HD:MI CARPETA".

MiRuta = CurDir("MD")	' Se devuelve "HD:MI CARPETA".


Dir (Ejemplo de la función)
Ejemplo de la función Dir

En este ejemplo se utiliza la función Dir para comprobar si existen ciertos archivos y directorios. En Macintosh se puede utilizar la función MacID para especificar el tipo de archivo.

Dim MiArchivo, MiRuta, MiNombre

' En Microsoft Windows:

' Devuelve "WIN.INI" si existe.

MiArchivo = Dir("C:\WINDOWS\WIN.INI")

' Se devuelve el nombre de archivo con la extensión especificada. Si hay más de un archivo *.INI se

' devuelve el primer nombre de archivo que se encuentra.

MiArchivo = Dir("C:\WINDOWS\*.INI")

' Se vuelve a llamar la función Dir sin argumentos para obtener el siguiente archivo *.INI del

' mismo directorio.

MiArchivo = Dir

' Se devuelve el primer archivo *.TXT con que tenga activado el atributo oculto.

MiArchivo = Dir("*.TXT", vbHidden)

' Muestra los nombres en C:\ que representan directorios.

MiRuta = "c:\"	' Establece la ruta.

MiNombre = Dir(MiRuta, vbDirectory)	' Recupera la primera entrada.

Do While MiNombre <> ""	' Inicia el bucle.

' Ignora el directorio actual y el que lo abarca.

If MiNombre <> "." And MiNombre <> ".." Then

' Utiliza comparación a nivel de bits para asegurarse de que MiNombre es un directorio.

If (GetAttr(MiRuta & MiNombre) And vbDirectory) = vbDirectory Then

Debug.Print MiNombre	' Muestra la entrada

End If	' solamente si representa un directorio.

End If

MiNombre = Dir	' Obtiene siguiente entrada.

Loop

' En Macintosh:

' Se utiliza la función MacID para especificar el tipo de ' archivo.

' En la siguiente instrucción se devuelve el nombre

del' primer archivo  "TEXT" que se encuentra en el directorio o carpeta especificados.

MiArchivo = Dir("HD:MI CARPETA:", MacID("TEXT"))


Environ (Ejemplo de la función)
Ejemplo de la función Environ

Este ejemplo utiliza la función Environ para proporcionar el número de entrada y la longitud de la instrucción PATH a partir de la tabla de cadenas del entorno.

Dim EntCadena, Indice, Msj, LongRuta	' Declara variables.

Indice = 1	' Inicializa índice a 1.

Do

EntCadena = Environ(Indice)	' Obtiene la

' variable de entorno.

If Left(EntCadena, 5) = "PATH=" Then	' Comprueba la entrada PATH.

LongRuta = Len(Environ("PATH"))	' Obtiene la longitud.

Msj = "Entrada PATH = " & Indice & " y la longitud = " & LongRuta

Exit Do

Else

Indc = Indice + 1	' No es una entrada PATH,

End If	' buscar otra.

Loop Until EntCadena = ""

If LongRuta > 0 Then

MsgBox Msj	' Muestra el mensaje.

Else

MsgBox "No existe variable de entorno PATH."

End If


FileCopy (Ejemplo de la instrucción)
Ejemplo de la instrucción FileCopy

En este ejemplo se utiliza la instrucción FileCopy para copiar un archivo en otro. Se supone que ARCHORIG es un archivo que contiene información.

Dim ArchOrigen, ArchDestino

ArchOrigen = "ARCHORIG"	' Se define el nombre del archivo de origen.

ArchDestino = "ARCHDEST"	' Se define el nombre del archivo de origen.

File Copy ArchOrigen, ArchDestino	' Se copia el archivo de origen en el archivo de destino.


FileDateTime (Ejemplo de la función)
Ejemplo de la función FileDateTime

En este ejemplo se utiliza la función FileDateTime para obtener la fecha y la hora en que un archivo fue creado o modificado por última vez. El formato de fecha y hora que se muestra se basa en la configuración regional del sistema.

Dim MiFecha

' Se supone que el archivo PRUEBA fue modificado por última vez el 12 de febrero de 1993 a las 16:35:47.

' Se supone que la configuración regional es Inglés/Estados Unidos.

MiFecha = FileDateTime("PRUEBA")	' Devuelve "12/2/93 4:35:47 PM".


FileLen (Ejemplo de la función)
Ejemplo de la función FileLen

En este ejemplo se utiliza la función FileLen para obtener la longitud de un archivo en bytes. Se supone que PRUEBA es un archivo que contiene información.

Dim MiTamaño

MiTamaño = FileLen("PRUEBA")	' Se devuelve la longitud del archivo (en bytes).


GetAttr (Ejemplo de la función)
Ejemplo de la función GetAttr

En este ejemplo se utiliza la función GetAttr para determinar los atributos de un archivo y directorio o carpeta.

Dim MiAtrib

' Se supone que el archivo PRUEBA tiene el atributo oculto activado.

MiAtrib = GetAttr("PRUEBA")	' Devuelve 2.

' Devuelve distinto de cero si el atributo oculto se estableció en PRUEBA.

Debug.Print MiAtrib And vbHidden

' Se supone que el arachivo PRUEBA tiene activados los ' atributos de oculto y sólo-lectura.

MyAttr = GetAttr("TESTFILE")	' Devuelve 3.

'  Devuelve distinto de cero si el atributo oculto está ' activado en PRUEBA

Debug.Print MiAtrib And (vbHidden + vbReadOnly)

' Se supone que MIDIR es un directorio o una carpeta.

MiAtrib = GetAttr("MIDIR")	' Devuelve 16.


Kill (Ejemplo de la instrucción)
Ejemplo de la instrucción Kill

En este ejemplo se utiliza la instrucción Kill para borrar un archivo de un disco. Dado que Macintosh no permite el uso de caracteres comodín, se puede utilizar la función MacID para especificar el tipo del archivo en lugar del nombre del archivo.

' Se supone que PRUEBA es un archivo que contiene información.

Kill "PRUEBA"	' Se elimina el archivo.

' En Microsoft Windows:

' Se eliminan todos los archivos *.TXT del directorio actual.

Kill "*.TXT"

' En Macintosh:

' Se utiliza la función MacID para eliminar todos los archivos PICT de la carpeta actual

Kill MacID("PICT")


MacID (Ejemplo de la función)
Ejemplo de la función MacID

En este ejemplo se muestran distintos usos de la función MacID. La función MacID no está disponible en Microsoft Windows.

Dim NombreArchivo, ValorRetorno

' Se obtiene el primer archivo de texto de la carpeta HD:CARPETA.

NombreArchivo = Dir("HD:MI CARPETA:", MacId("TEXTO"))

' Se eliminan todos los archivos de tipo "TEXTO" de la ' carpeta actual.

Kill MacId("TEXT")

' Se ejecuta Microsoft Excel.

ValorRetorno = Shell(MacId("XCEL"))

' Se activa Microsoft Word.

AppActivate MacId("MSWD")


MkDir (Ejemplo de la instrucción)
Ejemplo de la instrucción MkDir

En este ejemplo se utiliza la instrucción MkDir para crear un directorio o una carpeta. Si no se especifica la unidad de disco, el directorio o carpeta se crea en la unidad actual.

MkDir "MIDIR"	' Se crea el directorio o la carpeta.


Name (Ejemplo de la instrucción)
Ejemplo de la instrucción Name

En este ejemplo se utiliza la instrucción Name para cambiar el nombre de un archivo. Se supone que los directorios o las carpetas especificados ya existen.

Dim NombreViejo, NombreNuevo

NombreViejo = "VIEJO": NombreNuevo = "NUEVO"	' Se definen nombres de archivo.

Name NombreViejo As NombreNuevo	' Se cambia el nombre del archivo.

' En Microsoft Windows:

NombreViejo = "C:\MIDIR\VIEJO": NombreNuevo = "C:\TUDIR\NUEVO"

Name NombreViejo As NombreNuevo	' Se mueve el archivo y se le cambia el nombre.

' En Macintosh:

NombreViejo = "HD:MI CARPETA:VIOEJO": NombreNuevo = "HD:TU CARPETA:NUEVO"

Name NombreViejo As NombreNuevo	' Se mueve el archivo y se le cambia el nombre.


QBColor (Ejemplo de la función)
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 accepa valores enteros entre 0 y 15.

Sub CambiarColorFondo (CódigoColor As Integer, MiFormulario As Form)

MiFormulario.BackColor = QBColor(CódigoColor)

End Sub


RGB (Ejemplo de la función)
Ejemplo de la función RGB

Este ejemplo muestra cómo se utiliza la función RGB para devolver un número entero que representa un valor de color RGB. Se utiliza por aquellos métodos y propiedades de aplicación que aceptan una especificación de color. El objeto MiObjeto y su propiedad se utilizan sólo como ejemplo. Si MiObjeto no existe o si no tiene una propiedad Color, se produce un error.

Dim Rojo, I, ValorRGB, MiObjeto

Red = RGB(255, 0, 0)	' Devuelve el valor de Rojo.

I = 75	' Inicializa un desplazamiento.

ValorRGB = RGB(I, 64 + I, 128 + I) ' Igual que RGB(75, 139, 203).

MiObjeto.Color = RGB(255, 0, 0)	' Establece la propiedad Color de

' MiObjeto a Rojo.


RmDir (Ejemplo de la instrucción)
Ejemplo de la instrucción RmDir

En este ejemplo se utiliza la instrucción RmDir para eliminar un directorio o carpeta existente.

' Se supone que MIDIR es un directorio o carpeta vacío.

RmDir "MIDIR"	' Se elimina MIDIR.


SetAttr (Ejemplo de la instrucción)
Ejemplo de la instrucción SetAttr

En este ejemplo se utiliza la instrucción SetAttr para establecer los atributos de un archivo.

SetAttr "PRUEBA", vbHidden	' Se establece el atributo oculto.

SetAttr "PRUEBA", vbHidden + vbReadOnly	' Se establecen los atributos

' oculto y sólo lectura.


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"


ChDrive (Instrucción)

Cambia la unidad de disco actual.

Sintaxis

ChDrive unidad

El argumento requerido unidad, es una expresión de cadena que especifica una unidad de disco existente. Si se suministra un argumento de longitud cero (""), la unidad de disco actual no cambia. Si el argumento unidad es una cadena de múltiples caracteres, la instrucción ChDrive solamente utiliza la primera letra.


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.


Dir (Función)

Devuelve un tipo String que representa el nombre de un archivo, directorio o carpeta que coincide con el patrón o atributo de archivo especificado, o la etiqueta de volumen de una unidad de disco.

Sintaxis

Dir[(nombre_ruta[, atributos])]

La sintaxis de la función Dir consta de las siguientes partes:

Parte	Descripción
nombre_ruta	Opcional. Expresión de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco. Si no se encuentra nombre_ruta, devolverá una cadena de longitud cero (“”).
Atributos	Opcional. Constante o expresión numérica, cuya suma especifica los atributos de archivo. Si se omite, devuelve todos los archivos que coinciden con nombre_ruta.
Valores

Los valores del argumento atributos son los siguientes:

Constante	Valor	Descripción
vbNormal	0	Normal
vbHidden	2	Oculto
vbSystem	4	Archivo de sistema
vbVolume	8	Etiqueta de volumen; si se especifica se ignoran todos los atributos.
VbDirectory	16	Directorio o carpeta.
Nota   Estas constantes están definidas en Visual Basic para Aplicaciones. Por ello, sus nombres se pueden utilizar en cualquier lugar del código sustituyendo al valor correspondiente.

Comentarios

La función Dir permite el empleo de los caracteres comodín '*' (múltiples caracteres) y '?' (un solo carácter) para especificar varios archivos.

La primera vez que se llama a la función Dir se debe especificar el nombre_ruta, de lo contrario se producirá un error. Si además especifica los atributos de archivo, deberá incluir el nombre_ruta.

La función Dir devuelve el primer nombre de archivo que coincide con nombre_ruta. Para obtener más nombres de archivo que coincidan con nombre_ruta, deberá volver a llamar a la función Dir sin argumentos. Cuando no hay más nombres de archivo coincidentes, la función Dir devuelve una cadena de caracteres de longitud cero. Cuando se devuelve una cadena de longitud cero, en las siguientes llamadas deberá especificar nombre_ruta o se producirá un error. Puede cambiar nombre_ruta sin haber obtenido todos los nombres de archivo que coinciden con el argumento nombre_ruta actual. Sin embargo, no se puede llamar a la función Dir recursivamente. Llamar a la función Dir con el atributo vbDirectory no devuelve continuamente subdirectorios.

Sugerencia   Dado que los nombres de archivo se extraen sin ningún orden específico, es conveniente guardar los nombres devueltos en una matriz y luego ordenarla de la manera deseada.


Environ (Función)

Devuelve la cadena (String) asociada a una variable del entorno del sistema operativo.

Sintaxis

Environ({cadenaentorno | número})

La sintaxis de la función Environ consta de los siguientes argumentos con nombre:

Parte	Descripción
cadenaentorno	Opcional. Expresión de cadena que contiene el nombre de una variable de entorno.
Número	Opcional. Expresión numérica correspondiente al orden numérico de la variable de entorno en la tabla de cadenas de entorno. El argumento número puede ser cualquier expresión numérica, pero se redondeará a un número entero antes de ser evaluada.
Comentarios

Si no se encuentra cadenaentorno en la tabla de cadenas de entorno, la función devolverá una cadena de longitud cero. En caso contrario, la función Environ devolverá el texto asignado a la cadena cadenaentorno especificada; esto es, el texto que sigue al signo igual en la tabla de cadenas de entorno para dicha variable.

Si especifica número, se devolverá la cadena que ocupe esa posición numérica en la tabla de cadenas de entorno. En este caso, la función Environ devolverá todo el texto, incluida cadenaentorno. Si no hay ninguna cadena de entorno en la posición especificada, la función Environ devolverá una cadena de longitud cero ("").


FileCopy (Instrucción)

Copia un archivo.

Sintaxis

FileCopy origen, destino

La sintaxis de la instrucción FileCopy consta de los siguientes argumentos con nombre:

Parte	Descripción
origen	Requerido. Expresión de cadena que especifica el nombre de un archivo que se va a copiar. El origen puede incluir el directorio o carpeta y la unidad de disco.
Destino	Requerido. Expresión de cadena que especifica el nombre del archivo de destino. Puede incluir el directorio o carpeta y la unidad de disco.
Comentarios

Si intenta utilizar la instrucción FileCopy en un archivo abierto actualmente, se producirá un error.


FileDateTime (Función)

Devuelve un valor de tipo Variant (Date) que indica la fecha y hora en que un archivo fue creado o modificado por última vez.

Sintaxis

FileDateTime(nombre_ruta)

El argumento requerido nombre_ruta es una expresión de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco.


FileLen (Función)

Devuelve un tipo Long que especifica la longitud de un archivo en bytes.

Sintaxis

FileLen(nombre_ruta)

El argumento nombre_ruta requerido es una expresión de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco.

Comentarios

Si el archivo especificado está abierto cuando se llama la función FileLen, el valor devuelto representa el último tamaño de ese archivo cuando se guardó por ultima vez en el disco.

Nota   Para obtener la longitud de un archivo abierto, utilice la función LOF.


GetAttr (Función)

Devuelve un tipo Integer que representa los atributos de un archivo, directorio o carpeta.

Sintaxis

GetAttr(nombre_ruta)

El argumento requerido nombre_ruta es una expresión de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco.

Valores devueltos

El valor devuelto por la función GetAttr es la suma de los siguientes valores de atributos:

Constante	Valor	Descripción
vbNormal	0	Normal
vbReadOnly	1	Sólo lectura
vbHidden	2	Oculto
vbSystem	4	Archivo de sistema
vbDirectory	16	Directorio o carpeta
vbArchive	32	El archivo ha sido modificado después de efectuar la última copia de seguridad
Nota   Estas constantes están definidas en Visual Basic para Aplicaciones. Por ello, esos nombres se pueden utilizar en cualquier lugar del código en vez del valor correspondiente.

Comentarios

Para determinar qué atributos han sido establecidos, utilice el operador And para realizar una comparación bit a bit entre el valor devuelto por la función GetAttr y el valor del atributo de archivo individual que desee. Si el resultado es distinto de cero, significa que ese atributo se ha establecido en el archivo indicado. Por ejemplo, el valor devuelto por la siguiente expresión And es cero si no está activado el atributo Archivo.

Resultado = GetAttr(NombreA) And vbArchive

Si se ha establecido el atributo Modificado, el valor devuelto es distinto de cero.


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

La función Kill permite el uso de los caracteres comodín '*' (múltiples caracteres) y '?' (un solo carácter) para especificar varios archivos.

Se producirá un error si intenta usar la instrucción Kill para eliminar un archivo abierto.

Nota   Para eliminar directorios, utilice la instrucción RmDir.


MkDir (Instrucción)

Crea un directorio o carpeta.

Sintaxis

MkDir ruta

El argumento requerido ruta es una expresión de cadena que identifica el directorio o carpeta que se va a crear. Puede incluir la unidad de disco. Si no se especifica la unidad de disco, la instrucción MkDir crea el directorio o carpeta en la unidad de disco actual.


Name (Instrucción)

Cambia el nombre de un archivo, directorio o carpeta.

Sintaxis

Name nombre_ruta_antigua As nombre_ruta_nueva

La sintaxis de la instrucción Name consta de las siguientes partes:

Parte	Descripción
nombre_ruta_antigua	Obligatorio. Expresión de cadena que especifica el nombre y la posición de archivo existente. Puede incluir el directorio o la carpeta y la unidad de disco.
nombre_ruta_nueva	Obligatorio. Expresión de cadena que especifica el nombre nuevo y la posición  del archivo. Puede incluir el directorio o la carpeta y la unidad de disco. El nombre y posición especificados en nombre_ruta_nueva no pueden ser los de un archivo existente.
Comentarios

Tanto nombre_ruta_nueva como nombre_ruta_antigua deben encontrarse en la misma unidad de disco. Si la ruta de acceso especificada en nombre_ruta_nueva existe y es distinta de la ruta de acceso especificada en nombre_ruta_antigua, la instrucción Name colocará el archivo en el nuevo directorio o carpeta y cambiará el nombre del archivo, si fuera necesario. Si nombre_ruta_nueva y nombre_ruta_antigua tienen distintas rutas de acceso y el mismo nombre de archivo, la instrucción Name cambiar el archivo de posición, sin cambiar el nombre del archivo. Por medio de la instrucción Name se puede mover un archivo de un directorio o carpeta a otro, pero no se puede mover un directorio o carpeta.

Si se utiliza la instrucción Name con un archivo abierto se producirá un error. Cierre un archivo antes de cambiarle el nombre. Los argumentos de la instrucción Name no pueden incluir caracteres comodín múltiples (*) ni sencillos (?).


QBColor (Función)

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.


RGB (Función)

Devuelve un número entero tipo Long que representa un valor de color RGB.

Sintaxis

RGB(red, green, blue)

La sintaxis de la función RGB consta de los siguientes argumentos:

Parte	Descripción
red	Obligatorio. tipo Variant (Integer). Número en el intervalo de 0-255, ambos inclusive, que representa el componente rojo del color.
green	Obligatorio; tipo Variant (Integer). Número en el intervalo de 0-255, ambos inclusive, que representa el componente verde del color.
blue	Obligatorio; tipo Variant (Integer). Número en el intervalo de 0-255, ambos inclusive, que representa el componente azul del color.
Comentarios

Los métodos de aplicación y las propiedades que aceptan una especificación de color esperan que ésta sea un número que represente un valor de color RGB. Un valor de color RGB especifica la intensidad relativa de rojo, verde y azul que hacen que se muestre un color determinado.

El valor de cualquier argumento para la función RGB que sea superior a 255 se considerará como 255.

La siguiente tabla muestra algunos colores estándar y sus valores de rojo, verde y azul:

Color	Valor de rojo	Valor de verde	Valor de azul
Negro	0	0	0
Azul	0	0	255
Verde	0	255	0
Aguamarina	0	255	255
Rojo	255	0	0
Fucsia	255	0	255
Amarillo	255	255	0
Blanco	255	255	255


RmDir (Instrucción)

Elimina un directorio o carpeta existente.

Sintaxis

RmDir ruta

El argumento requerido ruta es una expresión de cadena que identifica el directorio o carpeta que se va a eliminar. Puede incluir la unidad de disco. Si no se especifica una unidad de disco, RmDir elimina el directorio o carpeta de la unidad de disco actual.

Comentarios

Si se intenta utilizar la instrucción RmDir en un directorio o carpeta que contiene archivos, se producirá un error. Use la instrucción Kill para eliminar todos los archivos de ese directorio o carpeta antes de intentar eliminar el directorio o carpeta.


SetAttr (Instrucción)

Establece los atributos de un archivo.

Sintaxis

SetAttr nombreruta, atributos

La sintaxis de la instrucción SetAttr consta de los siguientes argumentos con nombres:

Parte	Descripción
nombreruta	Requerido. Expresión de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco.
atributos	Requerido. Constante o expresión numérica, cuya suma especifica los atributos de archivo.
Valores

El argumento y valores de atributos son:

Constante	Valor	Descripción
vbNormal	0	Normal (predeterminado)
vbReadOnly	1	Sólo lectura
vbHidden	2	Oculto
vbSystem	4	Archivo de sistema
vbArchive	32	El archivo ha sido modificado después de haberse efectuado la última copia de seguridad
Nota   Visual Basic para Aplicaciones especifica estas constantes. Como resultado de ello, esos nombres se pueden utilizar en cualquier lugar del código sustituyendo al valor correspondiente.

Comentarios

Si se trata de establecer los atributos de un archivo abierto, se producirá un error en tiempo de ejecución.


Close (Ejemplo de la instrucción)
Ejemplo de la instrucción Close

En este ejemplo se utiliza la instrucción Close para cerrar los tres archivos abiertos mediante Output.

Dim I, NombreArchivo

For I = 1 To 3	' Repite 3 veces la instrucción.

NombreArchivo = "PRUEBA" & I	' Crea el nombre del archivo.

Open NombreArchivo For Output As #I	' Abre el archivo.

Print #I, "Esto es una prueba."	' Escribe la cadena de caracteres en el archivo.

Next I

Close	' Cierra los 3 archivos abiertos.


EOF (Ejemplo de la función)
Ejemplo de la función EOF

En este ejemplo se utiliza la función EOF para detectar el fin de un archivo. Se supone que MIARCHIVO es un archivo de texto que contiene unas pocas líneas de texto.

Dim EntradaDatos

Open "MIARCHIVO" For Input As #1	' Abre el archivo.

Do While Not EOF(1)	' Busca el fin del archivo.

Line Input #1, EntradaDatos	' Lee la línea de datos.

Debug.Print EntradaDatos	' Imprime en la ventana Depuración.

Loop

Close #1	' Cierra el archivo.


FileAttr (Ejemplo de la función)
Ejemplo de la función FileAttr

En este ejemplo se utiliza la función FileAttr para obtener el modo de archivo y el controlador de archivo de un archivo abierto.

Dim NúmArchivo, Modo, Controlador

NúmArchivo = 1	' Establece el número de archivo.

Open "PRUEBA" For Append As NúmArchivo
' Abre el archivo.

Modo = FileAttr(NúmArchivo, 1)	' Devuelve 8 (modo de archivo Agregar).

Controlador = FileAttr(NúmArchivo, 1)	' Devuelve el controlador del archivo.

Close NúmArchivo	' Cierra el archivo.


FreeFile (Ejemplo de la función)
Ejemplo de la función FreeFile

En este ejemplo se utiliza la función FreeFile para devolver el número del siguiente archivo disponible. En el bucle se abren cinco archivos para salida y se escriben algunos datos de ejemplo en cada uno de ellos.

Dim MiÍndice, NúmeroArchivo

For MiÍndice = 1 To 5	' Se repite 5 veces la instrucción.

NúmeroArchivo = FreeFile	' Obtiene un número

' de archivo que no se ha utilizado.

Open "PRUEBA" & MiÍndice For Output As #NúmeroArchivo
' Crea el nombre de archivo.

Write #NúmeroArchivo, "Esto es un ejemplo." 'Inserta texto.

Close #NúmeroArchivo	' Cierra el archivo.

Next MiÍndice


Get (Ejemplo de la instrucción)
Ejemplo de la instrucción Get

En este ejemplo se utiliza la instrucción Get para leer datos de un archivo de disco y ponerlos en una variable. Se supone que PRUEBA es un archivo que contiene cinco registros del tipo definido por el usuario Record.

Type Record	' Define un tipo definido por el usuario.

Id As Integer

Nombre As String * 20

End Type

Dim MiRegistro As Record, Posición	' Declara variables.

' Se abre un archivo de ejemplo para acceso aleatorio.

Open "PRUEBA" For Random As #1 Len = Len(MiRegistro)

' Se lee el archivo de ejemplo por medio de la
' instrucción Get.

Posición = 3	' Define el número del registro.

Get #1, Posición, MiRegistro	' Lee el tercer registro.

Close #1	' Cierra el archivo.


Input # (Ejemplo de la instrucción)
Ejemplo de la instrucción Input #

En este ejemplo se utiliza la instrucción Input # para leer datos de un archivo y ponerlos en dos variables. Se supone que PRUEBA es un archivo de texto que contiene unas pocas líneas de datos escritos en él por medio de la instrucción Write #, es decir, cada línea contiene una cadena de caracteres entre comillas y un número separado por una coma, por ejemplo, ("Hola", 234).

Dim MiCadena, MiNúmero

Open "PRUEBA" For Input As #1	' Abre el archivo para recibir los datos.

Do While Not EOF(1)	' Repite el bucle hasta el final del archivo.

Input #1, MiCadena, MiNúmero	' Lee el carácter en dos variables.

Debug.Print MiCadena, MiNúmero	' Imprime datos en la ventana Depuración.

Loop

Close #1	' Cierra el archivo.


Input (Ejemplo de la función)
Ejemplo de la función Input

En este ejemplo se utiliza la función Input para leer un carácter cada vez en un archivo y mostrarlo en la ventana de Depuración. Se supone que PRUEBA es un archivo de texto con unas pocas líneas de datos de ejemplo.

Dim MiCarácter

Open "PRUEBA" For Input As #1	' Abre el archivo.

Do While Not EOF(1)	' Repite el bucle hasta el final del archivo.

MiCarácter = Input(1, #1)	' Obtiene un carácter.

Debug.Print MiCarácter	' Imprime datos en la ventana Depuración.

Loop

Close #1	' Cierra el archivo.


Line Input # (Ejemplo de la instrucción)
Ejemplo de la instrucción Line Input #

En este ejemplo se utiliza la instrucción Line Input # para leer una línea de un archivo secuencial y asignarla a una variable. Se supone que PRUEBA es un archivo de texto con unas pocas líneas de datos de ejemplo.

Dim LíneaTexto

Open "PRUEBA" For Input As #1	' Abre el archivo.

Do While Not EOF(1)	' Repite el bucle hasta el final del archivo.

Line Input #1, LíneaTexto	' Lee el carácter en la variable.

Debug.Print LíneaTexto	' Imprime datos en la ventana Depuración.

Loop

Close #1	' Cierra el archivo.


Loc (Ejemplo de la función)
Ejemplo de la función Loc

En este ejemplo se utiliza la función Loc para obtener la posición de lectura y escritura actual en un archivo abierto. Se supone que PRUEBA es un archivo de texto con unas pocas líneas de datos de ejemplo.

Dim MiUbicación, MiLínea

Open "PRUEBA" For Binary As #1	' Abre el archivo recién creado.

Do While MiUbicación < LOF(1)	' Repite el bucle hasta el final del archivo.

MiLínea = MiLínea & Input(1, #1)' Lee el carácter en la variable.

MiUbicación = Loc(1)	' Obtiene la posición actual en el archivo.

' Se imprime la línea en la ventana Depuración.

Debug.Print MiLínea; Tab; MiUbicación

Loop

Close #1	' Cierra el archivo.


Lock, Unlock (Ejemplo de las instrucciones)
Ejemplo de las instrucciones Lock, Unlock

En este ejemplo se muestra el empleo de las instrucciones Lock y Unlock. Cuando se está modificando un registro, otros procesos no pueden obtener acceso al mismo. Se supone que PRUEBA es un archivo que contiene cinco registros del tipo definido por el usuario Record.

Type Record	' Define el tipo definido por el usuario.

Id As Integer

Nombre As String * 20

End Type

Dim MiRegistro As Record, NúmeroRegistro	' Declara variables.

' Se abre un archivo de ejemplo para acceso aleatorio.

Open "PRUEBA" For Random Shared As #1 Len = Len(MiRegistro)

NúmeroRegistro = 4	' Define el número de registro.

Lock #1, NúmeroRegistro	' Bloquea el registro.

Get #1, NúmeroRegistro, MiRegistro	' Lee el registro.

MiRegistro.Id = 234	' Modifica el registro.

MiRegistro.Nombre = "Gloria Nagore"

Put #1, NúmeroRegistro, MiRegistro	' Escribe el registro modificado.

Unlock #1, NúmeroRegistro	' Desbloquea el registro actual.

Close #1	' Cierra el archivo.


LOF (Ejemplo de la función)
Ejemplo de la función LOF

En este ejemplo se utiliza la función LOF para determinar el tamaño de un archivo abierto en el disco. Se supone que PRUEBA es un archivo de texto que contiene datos de ejemplo.

Dim LongitudArchivo

Open "PRUEBA" For Input As #1	' Abre el archivo.

LongitudArchivo = LOF(1)	' Obtiene la longitud del archivo.

Close #1	' Cierra el archivo.


Open (Ejemplo de la instrucción)
Ejemplo de la instrucción Open

En este ejemplo se ilustran varios usos de la instrucción Open para habilitar operaciones de entrada y salida a un archivo.

El siguiente ejemplo abre en modo secuencial para entrada el archivo PRUEBA.

Open "PRUEBA" For Input As #1

' Cierra antes de volver a abrir en otro modo.

Close #1

Este ejemplo abre el archivo en modo binario para operaciones de sólo escritura.

Open "PRUEBA" For Binary Access Write As #1

' Cierra antes de volver a abrir en otro modo.

Close #1

El siguiente ejemplo abre el archivo en modo de acceso aleatorio. El archivo contiene registros del tipo definido por el usuario Record.

Type Record	' Define un tipo definido por el usuario.

Id As Integer

Nombre As String * 20

End Type

Dim MiRegistro As Record	' Declara una variable.

Open "PRUEBA" For Random As #1 Len = Len(MiRegistro)

' Cierra antes de volver a abrir en otro modo.

Close #1

Este ejemplo abre el archivo para salida secuencial; cualquier proceso podrá leer y escribir en el archivo.

Open "PRUEBA" For Output Shared As #1

' Cierra antes de volver a abrir en otro modo.

Close #1

Este ejemplo abre el archivo en modo binario para lectura; ningún otro proceso podrá leer el archivo.

Open "PRUEBA" For Binary Access Read Lock Read As #1


Print # (Ejemplo de la instrucción)
Ejemplo de la instrucción Print #

En este ejemplo se utiliza la instrucción Print # para escribir datos en un archivo.

Open "PRUEBA" For Output As #1	' Abre el archivo para operaciones de salida.

Print #1, "Esto es una prueba"	' Escribe texto en el archivo.

Print #1,	' Imprime una línea en blanco en el archivo.

Print #1, "Zona 1"; Tab ; "Zona 2"	' Escribe en dos zonas de impresión.

Print #1, "Hola" ; " " ; "mundo"	' Separa las cadenas ' de caracteres con un espacio.

Print #1, Spc(5) ; "5 espacios iniciales"	'Escribe 5 espacios iniciales.

Print #1, Tab(10) ; "Hola"	' Escribe una palabra en la columna 10.

' Se establecen valores de Boolean, Date, Null y Error.

Dim MiBool, MiFecha, MiNull, MiError

MiBool = False : MiFecha = #2,12, 1969# : MiNull = Null

MiError = CVErr(32767)

' True, False, Null y Error se traducen de acuerdo a la configuración regional del

' sistema. Los literales de fecha se escriben en el

formato de fecha corta estándar.

Print #1, MiBool ; " es un valor Boolean"

Print #1, MiFecha ; " es una fecha"

Print #1, MiNull ; " es un valor nulo"

Print #1, MiError ; " es un valor de error"

Close #1	' Cierra el archivo.


Put (Ejemplo de la instrucción)
Ejemplo de la instrucción Put

En este ejemplo se utiliza la instrucción Put para escribir datos en un archivo del disco. Se escriben cinco registros del tipo definido por el usuario Record.

Type Record	' Define el tipo definido por el usuario.

Id As Integer

Nombre As String * 20

End Type

Dim MiRegistro As Record, NúmeroRegistro	' Declara variables.

' Abre el archivo para acceso aleatorio.

Open "PRUEBA" For Random As #1 Len = Len(MiRegistro)

For NúmeroRegistro = 1 To 5	' Repite 5 veces el bucle.

MiRegistro.Id = NúmeroRegistro	' Define el Id.

MiRegistro.Nombre = "Mi Nombre" & NúmeroRegistro	' Crea una cadena.

Put #1, NúmeroRegistro, MiRegistro	' Escribe el registro en el archivo.

Next NúmeroRegistro

Close #1	' Cierra el archivo.


Reset (Ejemplo de la instrucción)
Ejemplo de la instrucción Reset

En este ejemplo se utiliza la instrucción Reset para cerrar todos los archivos abiertos y escribir el contenido de todos los búferes de archivo en disco. Observe el uso de la variable Variant NúmeroArchivo como una cadena y también como un número.

Dim NúmeroArchivo

For NúmeroArchivo = 1 To 5	' Repite 5 veces el bucle.

' Abre el archivo para salida. NúmeroArchivo se

' concatena a la cadena PRUEBA para el nombre de
' archivo, pero es un número tras un signo #.

Open "PRUEBA" & NúmeroArchivo For Output As #NúmeroArchivo

Write #NúmeroArchivo, "Hola"	' Escribe datos en el archivo.

Next NúmeroArchivo

Reset	' Cierra el archivo y escribe el contenido

' en el disco.


Seek (Ejemplo de la función)
Ejemplo de la función Seek

En este ejemplo se utiliza la función Seek para obtener la posición de archivo actual. El ejemplo supone que PRUEBA es un archivo que contiene registros del tipo definido por el usuario Record.

Type Record	' Define un tipo definido por el usuario.

Id As Integer

Nombre As String * 20

End Type

Para los archivos abiertos en modo Aleatorio, Seek devuelve el número del siguiente registro.

Dim MiRegistro As Record	' Declara la variable.

Open "PRUEBA" For Random As #1 Len = Len(MiRegistro)

Do While Not EOF(1)	' Repite hasta el final del archivo.

Get #1, , MiRegistro	' Lee el registro siguiente.

Debug.Print Seek(1)	' Imprime el número de

' registro en la ventana Depuración.

Loop

Close #1	' Cierra el archivo.

En archivos abiertos en modos distintos del modo Aleatorio Random, Seek devuelve la posición de byte en la que se ejecuta la siguiente operación. Se supone que PRUEBA es un archivo que contiene unas pocas líneas de texto.

Dim MiCarácter

Open "PRUEBA" For Input As #1	' Abre el archivo para lectura.

Do While Not EOF(1)	' Repite hasta el final del archivo.

MiCarácter = Input(1, #1)	' Lee el siguiente carácter de datos.

Debug.Print Seek(1)	' Imprime la posición de

' byte en la ventana Depuración.

Loop

Close #1	' Cierra el archivo.


Seek (Ejemplo de la instrucción)
Ejemplo de la instrucción Seek

En este ejemplo se utiliza la instrucción Seek para establecer la posición de la siguiente operación de lectura o escritura que se ejecutará en un archivo. Este ejemplo supone que PRUEBA es un archivo que contiene registros del tipo definido por el usuario Record.

Type Record	' Define un tipo definido por el usuario.

Id As Integer

Nombre As String * 20

End Type

En archivos abiertos en modo Aleatorio, Seek devuelve el número del registro siguiente.

Dim MiRegistro As Record, TamañoMax, NúmeroRegistro	' Declara una variable.

' Abre el archivo en modo aleatorio.

Open "PRUEBA" For Random As #1 Len = Len(MiRegistro)

TamañoMax = LOF(1) \ Len(MiRegistro)	' Obtiene el número de registros del archivo.

' Se leen todos los registros empezando con el último.

For NúmeroRegistro = TamañoMax To 1 Step - 1

Seek #1, NúmeroRegistro	' Establece la posición.

Get #1, , MiRegistro	' Lee el registro.

Next NúmeroRegistro

Close #1	' Cierra el archivo.

En archivos abiertos en modos distintos del Aleatorio, Seek devuelve la posición de byte en la que se ejecuta la siguiente operación. Se supone que PRUEBA es un archivo que contiene unas pocas líneas de texto.

Dim TamañoMax, SiguienteCar, MiCarácter

Open "PRUEBA" For Input As #1	' Abre el archivo para operaciones de entrada.

TamañoMax = LOF(1)	' Obtiene el tamaño del archivo en bytes.

' Se leen todos los caracteres empezando con el último.

For SiguienteCar = TamañoMax To 1 Step -1

Seek #1, SiguienteCar	' Establece la posición.

MiCarácter = Input(1, #1)	' Lee el carácter.

Next SiguienteCar

Close #1	' Cierra el archivo.


Spc (Ejemplo de la función)
Ejemplo de la función Spc

En este ejemplo se utiliza la función Spc para colocar el resultado en un archivo y en la ventana Depuración.

' La función Spc puede utilizarse con la instrucción ' ' Print #.

Open "PRUEBA" For Output As #1	' Abre el archivo para operaciones de salida.

Print #1, "10 espacios desde aquí"; Spc(10); "hasta aquí."

Close #1	' Cierra el archivo.

La siguiente instrucción hace que el texto se imprima en la ventana Depuración (mediante el método Print), precedido de 30 espacios.

Debug.Print Spc(30); "Treinta espacios después..."


Tab (Ejemplo de la función)
Ejemplo de la función Tab

En este ejemplo se utiliza la función Tab para colocar el resultado en un archivo y en la ventana Depuración.

' La función Tab puede utilizarse con la instrucción Print #.

Open "PRUEBA" For Output As #1	' Abre el archivo para operaciones de salida.

' La segunda palabra se imprime en la columna 20.

Print #1, "Hola"; Tab(20); "mundo."

' Si se omite el argumento, el cursor se coloca en la siguiente zona de impresión.

Print #1, "Hola"; Tab; "mundo"

Close #1	' Cierra el archivo.

La función Tab se puede utilizar también con el método Print. La siguiente instrucción imprime texto a partir de la columna 10.

Debug.Print Tab(10); "10 columnas desde el principio."


Width # (Ejemplo de la instrucción)
Ejemplo de la instrucción Width #

En este ejemplo se utiliza la instrucción Width # para establecer el ancho de la línea de resultado en un archivo.

Dim I

Open "PRUEBA" For Output As #1	' Abre el archivo para salida.

Width #1, 5	' Establece el ancho de la línea de resultado en 5.

For I = 0 To 9	' Repite 10 veces el bucle.

Print #1, Chr(48 + I);	' Imprime 5 caracteres por línea.

Next I

Close #1	' Cierra el archivo.


Write # (Ejemplo de la instrucción)
Ejemplo de la instrucción Write #

En este ejemplo se utiliza la instrucción Write # para escribir datos no procesados en un archivo secuencial.

Open "PRUEBA" For Output As #1	' Abre el archivo para operaciones de salida.

Write #1, "Hola mundo", 234	' Delimita con comas los datos introducidos.

Write #1,	' Coloca una línea en blanco.

Dim MiBool, MiFecha, MiNull, MiError

' Se establecen valores Boolean, Date, Null y Error.

MiBool = False : MiFecha = # 12-Feb-1969# : MiNull = Null

MiError = CVErr(32767)

' Los datos booleanos se escriben como #TRUE# o #FALSE#. ' Los literales de fecha se escriben en el formato de

' fecha universal, por ejemplo,#13-07-1994# representa

13 de julio de 1994. Los datos nulos se escriben como #NULL#.

' Los datos de error se escriben como #ERROR código_error#.

Write #1, MiBool ; "es un valor booleano"

Write #1, MiFecha ; "es una fecha"

Write #1, MiNull ; "es un valor nulo"

Write #1, MiError ; "es un valor de error"

Close #1	' Cierra el archivo.


Close (Instrucción)

Termina las operaciones de entrada/salida (E/S) en un archivo abierto con la instrucción Open.

Sintaxis

Close [listanúmerosarchivos]

El argumento opcional listanúmerosarchivos puede estar constituido por uno o más números de archivo usando la siguiente sintaxis, donde númeroarchivo es cualquier número de archivo válido:

[[#]númeroarchivo] [, [#]númeroarchivo] . . .

Comentarios

Si omite listanúmerosarchivos, se cierran todos los archivos activos abiertos con la instrucción Open.

Cuando se cierran archivos que se abrieron para Output o Append, el búfer final de salida se graba en el búfer del sistema operativo que corresponde a ese archivo. Todo el espacio del búfer asociado con el archivo cerrado se libera.

Cuando se ejecuta la instrucción Close, la asociación de un archivo con su número de archivo termina.


EOF (Función)

Devuelve un tipo Integer que contiene un valor tipo Boolean de True al llegar al final del archivo.

Sintaxis

EOF(númeroarchivo)

El argumento necesario númeroarchivo es cualquier tipo Integer que contenga cualquier número de archivo válido.

Comentarios

Se utiliza EOF para evitar el error que se genera al intentar obtener información más allá del final de un archivo.

La función EOF devuelve False hasta que se haya llegado al final del archivo. Si se usa con archivos abiertos mediante acceso Random o Binary, la función EOF devuelve False hasta que la última instrucción Get que se haya ejecutado no pueda leer el registro completo.

Con archivos abiertos con acceso Binary, intentar leer el archivo usando la función Input hasta que EOF devuelva True produce un error. Use las funciones LOF y Loc en lugar de EOF al leer archivos binarios con Input o use Get al utilizar la función EOF.


FileAttr (Función)

Devuelve un tipo Long que representa el modo del archivo para los archivos abiertos usando la instrucción Open.

Sintaxis

FileAttr(filenumber, returntype)

La sintaxis de la función FileAttr consta de los siguientes argumentos con nombre:

Parte	Descripción
filenumber	Se requiere; un tipo  Integer. Cualquier número de archivo válido.
returntype	Se requiere; un tipo Integer. Número que indica el tipo de información que se debe devolver. Especifique 1 para que se devuelva un valor que indica el modo del archivo. Sólo en sistemas de 16 bits, especifique 2 para obtener un controlador de archivo del sistema operativo. returntype 2 no es compatible en sistemas de 32 bits y produce un error.
Valores devueltos

Cuando el argumento returntype es 1, los siguientes valores devueltos indican el modo de acceso al archivo:

Modo	Valor
Input	1
Output	2
Random	4
Append	8
Binary	32


FreeFile (Función)

Devuelve un tipo Integer que indica el siguiente número de archivo disponible para su uso en la instrucción Open.

Sintaxis

FreeFile[(númerointervalo)]

El argumento opcional númerointervalo es un tipo Variant que especifica el intervalo desde el que se va a devolver el siguiente número de archivo. Se especifica 0 (predeterminado) para devolver un número de archivo entre 1 y 255, inclusive. Se especifica 1 para devolver un número de archivo entre 256 y 511.

Comentarios

Use FreeFile para proporcionar un número de archivo que no esté en uso.


Get (Instrucción)

Lee datos de un archivo de disco abierto y coloca la información en una variable.

Sintaxis

Get [#]númeroarchivo, [númeroregistro], nombrevariable

La sintaxis de la instrucción Get consta de las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
númeroregistro	Opcional. Un tipo Variant (Long). Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) desde el que comienza la lectura.
nombrevariable	Requerido. Nombre de una variable válida en la que se colocan los datos.
Comentarios

Los datos que se leen con Get se escriben habitualmente en un archivo con Put.

El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite númeroregistro, se lee el siguiente registro o byte que se encuentra después de la última instrucción Get o Put (o al que señala la última función Seek). Debe incluir las comas de delimitación, por ejemplo:

Get #4,,BúferArchivo

En los archivos abiertos en modo Random se aplican las siguientes reglas:

•	Aunque la longitud de la información que se lee sea menor que la especificada en la cláusula Len de la instrucción Open, Get lee los registros siguientes según los límites de longitud de registro. El espacio comprendido entre el final de un registro y el principio del siguiente se llena con el contenido del búfer del archivo. Puesto que la cantidad de la información de relleno no se puede determinar con certeza, es conveniente hacer que el registro tenga la misma longitud que la información que se lee.

•	Si la variable en la que se lee la información es una cadena de caracteres de longitud variable, Get lee un descriptor de 2 bytes que contiene la longitud de la cadena de caracteres y a continuación los datos que van en la variable. Por lo tanto, la longitud del registro especificada por la cláusula Len de la instrucción Open debe ser por lo menos 2 bytes mayor que la longitud real de la cadena de caracteres.

•	Si la variable que se va a leer es una variable Variant de tipo numérico, Get lee 2 bytes que identifican el VarType del tipo Variant y luego los datos que van en la variable. Por ejemplo, cuando se lee un tipo Variant de VarType 3, Get lee 6 bytes: 2 bytes identifican el tipo Variant como VarType 3 (Long) y 4 bytes contienen el dato tipo Long. La longitud del registro, especificada por la cláusula Len de la instrucción Open, debe ser por lo menos 2 bytes mayor que el número real de bytes necesario para almacenar la variable.

Nota Puede utilizar la instrucción Get para leer una matriz Variant del disco, pero no puede emplear Get para leer una Variant escalar que contenga una matriz Tampoco podrá utilizar Get para leer objetos del disco.

•	Si la variable que se va a leer es una Variant de tipo VarType 8 (String), Get lee 2 bytes que identifican el VarType, 2 bytes que indican la longitud de la cadena de caracteres y luego la propia cadena. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser por lo menos 4 bytes mayor que la longitud real de la cadena.

•	Si la variante que va a leer es una matriz dinámica, Get lee un descriptor cuya longitud equivale a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para leer los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en disco.

Dim MiMatriz(1 To 5,1 To 10) As Integer

Los 118 bytes se distribuyen de la siguiente forma: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 * 10 * 2).

•	Si la variable que va a leer es una matriz de tamaño fijo, Get lee solamente los datos. No lee ningún descriptor.

•	Si la variable que va a leer es cualquier otro tipo de variable (no una cadena de longitud variable ni un tipo Variant), Get lee solamente los datos variables. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la longitud de los datos que está leyendo.

•	Get lee elementos de tipos definidos por el usuario como si cada uno de ellos se leyera individualmente, excepto en que no hay relleno entre los elementos. En disco, una matriz dinámica de un tipo definido por el usuario (escrito con Put) tiene como prefijo un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para leer cada uno de los elementos, incluyendo las matrices y sus descriptores.

En los archivos abiertos en modo Binary tienen vigencia todas las reglas del modo Random, con las siguientes excepciones:

•	La cláusula Len de la instrucción Open no tiene efecto. Get lee del disco todas las variables en forma contigua, es decir, sin relleno entre registros.

•	Para cualquier matriz distinta de las utilizadas en un tipo definido por el usuario, Get lee solamente los datos. No lee ningún descriptor.

•	Get lee las cadenas de caracteres de longitud variable que no son elementos de tipos definidos por el usuario, sin esperar el descriptor de longitud de 2 bytes. El número de bytes leídos es igual al número de caracteres existentes en la cadena. Por ejemplo, las siguientes instrucciones leen 10 bytes del archivo número 1:

VarCadena = String(10," ")

Get #1,,VarCadena


Input # (Instrucción)

Lee datos de un archivo secuencial abierto y asigna esos datos a variables.

Sintaxis

Input #númeroarchivo, listavariables

La sintaxis de la instrucción Input # consta de las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
listavariables	Requerido. Lista de variables delimitada por comas que se asignan a los valores que se leen de un archivo; no puede ser una matriz o una variable de objeto. Sin embargo, es posible usar variables que describen elementos de una matriz o de un tipo definido por el usuario.
Comentarios

Los datos leídos con Input # se escriben normalmente en un archivo con Write #. Use esta instrucción sólo con archivos abiertos en modo Input o Binary.

Cuando se leen datos numéricos o cadenas estándar, se asignan tal cual a variables. La siguiente tabla ilustra la manera en que se trata la entrada de otros tipos de datos:

Datos	Valor asignado a la variable
Punto y coma de delimitación o línea en blanco	Empty
#NULL#	Null
#TRUE# or #FALSE#	True o False
#yyyy-mm-dd hh:mm:ss#	El día o la hora representadas por la expresión
#ERROR errornumber#	errornumber (la variable es un tipo Variant etiquetada como un error)
Se ignoran las comillas dobles (“") en la entrada de datos.

Los elementos de datos de un archivo deben aparecer en el mismo orden que tienen las variables en listavariables y deben coincidir con variables del mismo tipo de datos. Si una variable es numérica y los datos no lo son, se asigna un valor cero a esa variable.

Si se llega al fin del archivo cuando se está introduciendo un elemento de datos, se da por terminada la entrada y se produce un error.

Nota   Para introducir correctamente en variables mediante Input # los datos leídos de un archivo, utilice siempre la instrucción Write #, en lugar de Print #, para grabar la información en los archivos. La utilización de Write # garantiza que cada campo de datos separado se delimite correctamente.


Input (Función)

Devuelve un tipo String que contiene caracteres de un archivo abierto en modo Input o Binary.

Sintaxis

Input(número, [#]númeroarchivo)

La sintaxis de la función Input consta las siguientes partes:

Parte	Descripción
número	Requerido. Cualquier expresión numérica válida que especifique el número de caracteres para devolver.
númeroarchivo	Requerido. Cualquier número de archivo válido.
Comentarios

Los datos que se leen con la función Input normalmente se escriben en un archivo con Print # o Put. Sólo se utiliza esta función con archivos abiertos en modo Input o Binary.

A diferencia de la instrucción Input #, la función Input devuelve todos los caracteres que lee, incluyendo puntos y coma, retornos de carro, avances de línea, comillas y espacios iniciales.

Con archivos abiertos con acceso Binary, un intento de leer el archivo con la función Input hasta que EOF sea True produce un error. Use las funciones LOF y Loc en lugar de EOF al leer archivos binarios con Input o use Get al utilizar la función EOF.

Nota   Use la función InputB para datos tipo byte contenidos en archivos de texto. Con InputB, número especifica el número de bytes que se va a devolver en lugar del número de caracteres.


Line Input # (Instrucción)

Lee una línea de un archivo secuencial abierto y la asigna a una variable String.

Sintaxis

Line Input #númeroarchivo, nombrevariable

La sintaxis de la instrucción Line Input # consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo.
nombrevariable	Requerido. Un Variant o un nombre de variable String válido.
Comentarios

Los datos que se leen con Line Input # normalmente se escriben en un archivo con Print #.

La instrucción Line Input # lee un carácter cada vez en un archivo hasta que encuentra un retorno de carro (Chr(13)) o una secuencia retorno de carro-avance de línea (Chr(13) + Chr(10)). Las secuencias de retorno de carro-avance de línea no se tienen en cuenta y no se añaden a la cadena de caracteres.


Loc (Función)

Devuelve un tipo Long que especifica la posición actual de lectura o escritura dentro de un archivo abierto.

Sintaxis

Loc(númeroarchivo)

El argumento con nombre númeroarchivo es cualquier número de archivo de tipo Integer.

Comentarios

A continuación se indica el valor devuelto por cada modo de acceso a archivos:

Modo	Valor devuelto
Random	Número del último registro leído o escrito en el archivo.
Sequential	La posición de byte actual en el archivo, dividida por 128. Sin embargo, la información que devuelve Loc para los archivos secuenciales no se utiliza ni es obligatoria.
Binary	Posición del último byte leído o escrito.


Lock, Unlock (Instrucciones)

Controla el acceso por parte de otros procesos a todo o parte de un archivo abierto mediante la instrucción Open.

Sintaxis

Lock [#]númeroarchivo[, intervaloregistros]
. . .

Unlock [#]númeroarchivo[, intervaloregistros]

La sintaxis de las instrucciones Lock y Unlock consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
intervaloregistros	Opcional. El intervalo de registros para bloquear o desbloquear.
Valores

Los posibles valores del argumento intervaloregistros son:

númeroregistro | [inicio] To fin

Valor	Descripción
númeroregistro	Número de registro (archivos de modo Random) o número de byte (archivos de modo Binary) en el que comienza el bloqueo o el desbloqueo.
inicio	Número del primer registro o byte para bloquear o desbloquear.
fin	Número del último registro o byte para bloquear o desbloquear.
Comentarios

Las instrucciones Lock y Unlock se utilizan en entornos donde varios procesos pueden necesitar acceso al mismo archivo simultáneamente.

Las instrucciones Lock y Unlock se utilizan siempre por parejas. Los argumentos de Lock y Unlock deben coincidir exactamente.

El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si especifica sólo un registro, sólo se bloquea o se desbloquea ese registro. Si especifica un intervalo de registros y omite el registro de inicio (inicio), se bloquean o se desbloquean todos los registros a partir del primero hasta el último (fin) del intervalo. Si se utiliza Lock sin númeroregistro se bloquea todo el archivo y si se utiliza Unlock sin númeroregistro se desbloquea todo el archivo.

Si el archivo se ha abierto para efectuar operaciones secuenciales de entrada o salida, Lock y Unlock afectan al archivo completo, independientemente del intervalo especificado por inicio y fin.

Precaución   Antes de cerrar un archivo o terminar la ejecución de un programa, no olvide quitar todos los bloqueos por medio de una instrucción Unlock. Si no se quitan todos los bloqueos se pueden obtener resultados impredecibles.


LOF (Función)

Devuelve un tipo Long que indica el tamaño, en bytes, de un archivo abierto mediante la instrucción Open.

Sintaxis

LOF(númeroarchivo)

El argumento necesario númeroarchivo es cualquier Integer que contenga un número de archivo válido.

Nota   Para obtener la longitud de un archivo que no está abierto utilice la función FileLen.


Open (Instrucción)

Activa operaciones de entrada/salida (E/S) con un archivo.

Sintaxis

Open rutaacceso [For modo] [Access acceso] [bloquear] As [#]númeroarchivo [Len=longitudregistro]

La sintaxis de la instrucción Open consta las siguientes partes:

Parte	Descripción
rutaacceso	Requerido. Expresión de cadena que especifica un nombre de archivo; puede incluir el directorio o carpeta y la unidad de disco.
modo	Requerido. Palabra clave que especifica el modo de archivo: Append, Binary, Input, Output o Random. Si no se especifica, el archivo se abre con acceso Random.
acceso	Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto: Read, Write o Read Write.
bloquear	Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto por otros procesos: Shared, Lock Read, Lock Write y Lock Read Write.
númeroarchivo	Requerido. Un número de archivo válido entre 1 y 511 inclusive. Para obtener el número del siguiente archivo disponible se utiliza la función FreeFile.
longitudregistro	Opcional. Número igual o inferior a 32.767 bytes. En archivos abiertos para acceso aleatorio, este valor es la longitud del registro. Para archivos secuenciales, este valor es el número de caracteres almacenados en búfer.
Comentarios

Antes de poder ejecutar una operación de E/S en un archivo, éste debe estar abierto. Open asigna un búfer para operaciones de E/S con el archivo y determina el modo de acceso que se debe utilizar con el búfer.

Si el archivo especificado con rutaacceso no existe, se crea al abrir un archivo en los modos Append, Binary, Output o Random.

Si el archivo ya lo ha abierto otro proceso y no se permite el tipo de acceso especificado, la operación Open fracasa y se produce un error.

La cláusula Len se ignora si modo es Binary.

Importante   En los modos Binary, Input y Random se puede abrir un archivo utilizando un número de archivo distinto sin necesidad de cerrarlo antes. En los modos Append y Output debe cerrar el archivo para poder abrirlo con un número de archivo distinto.


Print # (Instrucción)

Escribe en un archivo secuencial los datos con formato de presentación.

Sintaxis

Print #númeroarchivo, [listasalida]

La sintaxis de la instrucción Print # consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
listasalida	Opcional. Expresión o lista de expresiones para imprimir.
Valor

El argumento listasalida tiene los valores siguientes:

[{Spc(n) | Tab[(n)]}][expresión][posicióncarácter]

Parte	Descripción
Spc(n)	Se utiliza para insertar caracteres de espacio en la salida, donde n es el número de caracteres de espacio para insertar.
Tab(n)	Se utiliza para colocar el punto de inserción en una número de columna absoluta, donde n es el número de columna. Utilice Tab sin argumentos para colocar el punto de inserción al comienzo de la siguiente zona de impresión.
expresión	Expresión numérica o expresión de cadena que se va a imprimir.
posicióncarácter	Especifica el punto de inserción del carácter siguiente. Se utiliza un punto y coma (;) para especificar que el punto de inserción debe estar inmediatamente después del último carácter mostrado. Utilice Tab(n) para colocar el punto de inserción en un número de columna absoluta. Utilice Tab sin argumentos para colocar el punto de inserción al comienzo de la siguiente zona de impresión. Si se omite posicióncarácter, el siguiente carácter se imprime en la línea siguiente.
Comentarios

Los datos que se escriben en un archivo con Print # se leen normalmente con Line Input # o Input.

Si omite listasalida y sólo incluye un separador de listas después de númeroarchivo, se imprime una línea en blanco en el archivo. Se pueden separar varias expresiones por medio de un espacio en blanco o de un punto y coma.

En el caso de datos de tipo Boolean se imprime True o False. Las palabras clave True y False no se traducen, cualquiera que sea la configuración regional.

Los datos de tipo Date se escriben en el archivo utilizando el formato corto de fecha estándar reconocido por el sistema. Cuando no se pone el componente correspondiente a la fecha o a la hora, o éste es igual a cero, sólo se escribe en el archivo la parte suministrada.

No se escribe nada en el archivo si los datos de listasalida son de tipo Empty. Sin embargo, si listasalida es Null, Null se escribe en el archivo.

Para datos de Error, la salida aparece como Error códigoerror. La palabra clave Error no se traducen, cualquiera que sea la configuración regional.

Todos los datos que se escriben en el archivo con Print # se adaptan regionalmente; es decir, se da formato al dato usando el separador decimal adecuado.

Puesto que Print # escribe una imagen de los datos en el archivo, debe delimitar los datos para que se impriman correctamente. Si utiliza Tab sin argumentos para mover la posición de impresión a la siguiente zona de impresión, Print # también escribe en el archivo los espacios entre campos de impresión.

Nota   Si en el futuro desea leer datos de un archivo por medio de la instrucción Input #, utilice la instrucción Write # en vez de la instrucción Print # para escribir los datos en el archivo. La utilización de Write # asegura la integridad de cada campo de datos separado, al delimitarlo adecuadamente, de modo que se pueda leer otra vez utilizando Input #. La utilización de Write # asegura también que los datos se puedan leer correctamente en cualquier configuración regional.


Put (Instrucción)

Escribe en un archivo de disco los datos contenidos en una variable.

Sintaxis

Put [#]númeroarchivo, [númeroregistro], nombrevariable

La sintaxis de la instrucción Put consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
númeroregistro	Opcional. Tipo Variant (Long). Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary, en el cual se comienza a escribir.
nombrevariable	Requerido. Nombre de la variable que contiene la información que se va a escribir en el disco.
Comentarios

Los datos que se escriben con Put normalmente se leen de un archivo con Get.

El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite númeroregistro, se escribe el siguiente registro o byte que se encuentra después de la última instrucción Get o Put o aquél al que señala la última función Seek. Debe incluir comas de delimitación, por ejemplo:

Put #4,, BúferArchivo

En los archivos abiertos en modo Random rigen las siguientes reglas:

•	Aunque la longitud de los datos escritos sea menor que la especificada en la cláusula Len de la instrucción Open, Put escribe los registros siguientes según los límites de longitud de registro y llena el espacio entre el fin de un registro y el comienzo del siguiente con el contenido del búfer del archivo. Puesto que la cantidad de datos de relleno no se puede determinar con certeza, es conveniente que el registro tenga la misma longitud que los datos que se escriben. Si la longitud de los datos que se escriben es mayor que la especificada en la cláusula Len de la instrucción Open, ocurre un error.

•	Si la variable en la que se escribe es una cadena de longitud variable, la instrucción Put escribe un descriptor de 2 bytes que indica la longitud de la cadena y luego escribe la variable. La longitud del registro, especificada por la cláusula de la instrucción Open, debe ser por lo menos 2 bytes mayor que la longitud real de la cadena.

•	Si la variable que se va a escribir es un Variant de un tipo numérico, Put escribe 2 bytes para identificar el VarType del Variant y luego escribe la variable. Por ejemplo, al escribir un Variant de VarType 3, Put escribe 6 bytes: 2 bytes para identificar un Variant de VarType 3 (Long) y 4 bytes que contienen los datos del tipo Long. La longitud del registro, especificada por la cláusula Len de la instrucción Open, debe ser por lo menos 2 bytes mayor que el número real de bytes necesarios para almacenar la variable.

Nota   Puede utilizar la instrucción Put para escribir una matriz Variant en disco, pero no puede emplear Put para escribir en disco un Variant escalar que contiene una matriz. Tampoco puede utilizar Put para escribir objetos en disco.

•	Si la variable escrita es una Variant del tipo VarType 8 (String), Put escribe 2 bytes para identificar el VarType, 2 bytes para indicar la longitud de la cadena y luego los datos de la cadena. La longitud del registro, especificada por la cláusula Len de la instrucción Open, debe ser por lo menos 4 bytes mayor que la longitud real de la cadena.

•	Si la variable escrita es una matriz dinámica, Put escribe un descriptor cuya longitud equivale a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro, especificada por la cláusula Len de la instrucción Open, debe ser mayor o igual que la suma de todos los bytes necesarios para escribir los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en disco.

Dim MiMatriz(1 To 5,1 To 10) As Integer

•	Los 118 bytes se distribuyen de la siguiente forma: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 * 10 * 2).

•	Si la variable escrita es una matriz de tamaño fijo, Put solamente escribe los datos. No se escribe en disco ningún descriptor.

•	Si la variable que se escribe es de cualquier otro tipo (ni una cadena de longitud variable ni una Variant), Put escribe solamente los datos de la variable.  La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la longitud de los datos escritos.

•	Put escribe elementos de tipos definidos por el usuario como si escribiera cada uno por separado, pero no coloca datos de relleno entre los elementos. En el disco, una matriz dinámica en un tipo definido por el usuario escrita con Put incluye como prefijo un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para escribir los elementos por separado, incluyendo algunas matrices y sus descriptores.

Para archivos abiertos en modo Binary, tienen vigencia todas las reglas del modo Random, con las siguientes excepciones:

•	La cláusula Len de la instrucción Open no tiene efecto. Put escribe todas las variables en el disco en forma contigua, es decir sin relleno entre registros.

•	Para cualquier matriz distinta de la indicada en un tipo definido por el usuario, Put escribe solamente los datos. No escribe ningún descriptor.

•	Put escribe las cadenas de caracteres de longitud variable que no son elementos de tipos definidos por el usuario sin el descriptor de longitud de 2 bytes. El número de bytes que se escribe es igual al número de caracteres de la cadena. Por ejemplo, en las siguientes instrucciones se escribe 10 bytes en el archivo número 1:

VarCadena$ = String$(10," ")

Put #1,,VarCadena$


Reset (Instrucción)

Cierra todos los archivos de disco abiertos mediante la instrucción Open.

Sintaxis

Reset

Comentarios

La instrucción Reset cierra todos los archivos activos abiertos con la instrucción Open y escribe en el disco el contenido de todos los búferes de los archivos.


Seek (Función)

Devuelve un tipo Long que especifican la posición actual de lectura o escritura de un archivo abierto mediante la instrucción Open.

Sintaxis

Seek(númeroarchivo)

El argumento necesario númeroarchivo es cualquier Integer que contenga un número de archivo válido.

Comentarios

Seek devuelve un valor entre 1 y 2.147.483.647 (equivalente a 2^31-1), ambos inclusive.

Los siguientes valores describen el valor devuelto para cada modo de acceso a un archivo.

Modo	Valor devuelto
Random	Número del siguiente registro que se lee o escribe
Binary Output Append Input	Posición de byte en la que se llevará a cabo la siguiente operación. El primer byte de un archivo tiene la posición 1, el segundo byte tiene la posición 2 y así sucesivamente.


Seek (Instrucción)

Establece la posición de la próxima operación de lectura o escritura en un archivo abierto mediante la instrucción Open.

Sintaxis

Seek [#]númeroarchivo, posición

La sintaxis de la instrucción Seek consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
posición	Requerido. Un número entre 1 y 2.147.483.647 inclusive, que indica la posición en la que se debe ejecutar la próxima operación de lectura o escritura.
Comentarios

Los números de registro especificados en las instrucciones Get y Put anulan la posición de archivo especificada por Seek.

Si se ejecuta una operación de escritura de archivo después de una instrucción Seek más allá del fin de un archivo, se extiende el archivo. Si se intenta ejecutar una instrucción Seek en una posición negativa o cero, se produce un error.


Spc (Función)

Se utiliza con la instrucción Print # o el método Print para alterar la posición de la salida.

Sintaxis

Spc(n)

El argumento obligatorio n es el número de espacios que se van a insertar antes de mostrar o imprimir la siguiente expresión de una lista.

Comentarios

Si n es menor que el ancho de la línea de salida, la próxima posición de impresión sigue inmediatamente al número de espacios impresos. Si n es mayor que el ancho de la línea de salida, Spc calcula la siguiente posición de impresión mediante la fórmula:

posiciónactualimpresión + (n Mod ancho)

Por ejemplo, si la posición de impresión actual es 24, el ancho de la línea de salida es de 80 y especifica Spc(90), la impresión siguiente comienza en la posición 34 (la posición de impresión actual + el resto de 90/80). Si la diferencia entre la  posición de impresión actual y el ancho de la línea de salida es menor que n (o n Mod ancho), la función Spc va al principio de la línea siguiente y genera un número de espacios igual a n - (ancho - posiciónactualimpresión).

Nota   Asegúrese de que las columnas tabulares sean suficientemente anchas para poder colocar letras anchas.

Cuando se utiliza el método Print con una fuente de espacio proporcional, el ancho de los caracteres de espacio impresos mediante la función Spc es siempre un promedio del ancho de todos los caracteres con el tamaño en puntos de la fuente elegida. Sin embargo, no hay ninguna correlación entre el número de caracteres impresos y el número de columnas de ancho fijo que estos caracteres ocupan. Por ejemplo, la letra W mayúscula ocupa más de una columna de ancho fijo y la letra I minúscula ocupa menos.


Tab (Función)

Se utiliza con la instrucción Print # o el método Print para definir la posición de la salida.

Sintaxis

Tab[(n)]

El argumento opcional n es el número de la columna que se mueve antes de mostrar o imprimir la próxima expresión de una lista. Si se omite, Tab coloca el punto de inserción al principio de la siguiente zona de impresión. Esto permite utilizar Tab en lugar de un punto en las configuraciones regionales en las que se utiliza el punto como separador decimal.

Comentarios

Si la posición de impresión actual es mayor que n, Tab va hasta la columna n de la siguiente línea de la salida. Si n es menor que 1, Tab coloca la posición de impresión en la columna 1. Si n es mayor que el ancho de la línea de salida, Tab calcula la siguiente posición de impresión con la fórmula:

n Mod ancho

Por ejemplo, si ancho es 80 y especifica Tab(90), la impresión siguiente comienza en la columna 10 (el resto de la operación 90/80). Si n es menor que la posición de impresión actual, la impresión comienza en la línea siguiente, en la posición de impresión calculada. Si la posición de impresión calculada es mayor que la posición de impresión actual, la impresión comienza en la posición de impresión calculada en la misma línea.

La posición de impresión en el extremo izquierdo de una línea de salida es siempre 1. Cuando se utiliza la instrucción Print # para imprimir en archivos, la posición de impresión en el extremo derecho es el ancho actual del archivo de salida, que puede asignar con la instrucción Width #.

Nota   Asegúrese de que las columnas tabulares sean suficientemente anchas para dar cabida a letras anchas.

Cuando utilice la función Tab con el método Print, la superficie de impresión se dividirá en columnas uniformes de ancho fijo. El ancho de cada columna es el promedio del ancho de todos los caracteres con el tamaño en puntos de la fuente elegida. Sin embargo, no hay ninguna correlación entre el número de caracteres impresos y el número de columnas de ancho fijo que estos caracteres ocupan; por ejemplo, la letra W mayúscula ocupa más de una columna de ancho fijo y la letra i minúscula ocupa menos.


Width # (Instrucción)

Asigna el ancho de línea de salida a un archivo abierto mediante la instrucción Open.

Sintaxis

Width #númeroarchivo, ancho

La sintaxis de la instrucción Width consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo.
ancho	Requerido. Una expresión numérica entre 0 y 255 inclusive, que indica cuántos caracteres aparecen en una línea antes de empezar una nueva línea. Si ancho es igual a 0, no hay ningún límite para la longitud de línea. El valor predeterminado de ancho es 0.


Write # (Instrucción)

Escribe datos en un archivo secuencial.

Sintaxis

Write #númeroarchivo, [listasalida]

La sintaxis de la instrucción Write consta las siguientes partes:

Parte	Descripción
númeroarchivo	Requerido. Cualquier número de archivo válido.
listasalida	Opcional. Una o varias expresiones numéricas o expresiones de cadena delimitadas por comas que se desea escribir en un archivo.
Comentarios

Los datos que se escriben con Write # normalmente se leen de un archivo con Input #.

Si omite listasalida e incluye un punto y coma después de númeroarchivo, se imprime una línea en blanco en el archivo. Se pueden separar múltiples expresiones con un espacio, un punto y coma (;) o una coma. Un espacio tiene el mismo efecto que un punto y coma.

Cuando se utiliza Write # para introducir información en un archivo, se siguen distintas convenciones universales, de modo que los datos siempre se pueden leer e interpretar correctamente mediante Input #, independientemente de la configuración regional:

•	Los datos numéricos siempre se escriben utilizando la coma (,) como separador decimal.

•	Para datos de tipo Boolean se imprime #TRUE# o #FALSE#. Las palabras clave #TRUE#  o #FALSE# no se traducen, independientemente de la configuración regional en que se esté trabajando.

•	Los datos de tipo Date se escriben en el archivo usando el formato de fecha universal. Si el componente correspondiente a la fecha o a la hora falta o es igual a cero, sólo se escribe en el archivo la parte suministrada.

•	Si los datos de listasalida son de tipo Empty no se escribe nada en el archivo. Sin embargo, en el caso de datos Null la salida es #NULL#.

•	Si el dato de listasalida Null, se escribe #NULL# en el archivo.

•	Para datos de Error, la salida aparece en el formato #ERROR códigoerror#. La palabra clave Error no se traduce, independientemente de la configuración regional en que esté trabajando.

A diferencia de la instrucción Print #, la instrucción Write # inserta puntos y coma entre elementos y comillas alrededor de cadenas, cuando se escriben en el archivo. No es necesario colocar delimitadores en la lista. Write # inserta un carácter de nueva línea, que es un retorno de carro y un avance de línea (Chr(13) + Chr (10)), después de que se ha escrito el último carácter de listasalida en el archivo.


DDB (Ejemplo de la función)
Ejemplo de la función DDB

En este ejemplo se utiliza la función para obtener la depreciación de un bien durante un período especificado, dado el coste inicial (CosteInic), el valor residual al término de la vida útil del bien (ValorResid), la vida total del bien en años (TiempoVida), y el período para el que se calcula la depreciación (Depr).

Dim Fmt, CosteInic, ValorResid, MesVida, TiempoVida, AñoDep, Depr

Const YRMOS = 12	' Número de meses en un año.

Fmt = "###,##0.00"

CosteInic = InputBox("¿Cuál es el coste inicial del bien?")

ValorResid = InputBox("Escriba el valor del bien al final de su vida.")

MesVida = InputBox("¿Cuál es la vida útil del bien, en meses?")

Do While MesVida < YRMOS	' Período >= 1 año.

MsgBox "La vida del bien debe ser igual o superior a un año."

MesVida = InputBox("¿Cuál es la vida útil del bien, en meses?")

Loop

TiempoVida = MesVida / YRMOS	' Pasa de meses a años.

If TiempoVida <> Int(MesVida / YRMOS) Then

TiempoVida = Int(TiempoVida + 1)	' Redondea al año siguiente.

End If

AñoDep = CInt(InputBox("Introduzca el año de cálculo de la depreciación."))

Do While AñoDep < 1 Or AñoDep > TiempoVida

MsgBox "Debe indicar como mínimo 1 y como máximo " & TiempoVida

AñoDep = InputBox("Indique el año de cálculo de la depreciación.")

Loop

Depr = DDB(CosteInic, ValorResid, TiempoVida, AñoDep)

MsgBox "La depreciación en el año " & AñoDep & " is " & _

Format(Depr, Fmt) & "."


FV (Ejemplo de la función)
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) & "."


IPmt (Ejemplo de la función)
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.


IRR (Ejemplo de la función)
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.

Vallores(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.


MIRR (Ejemplo de la función)
Ejemplo de la función MIRR

En este ejemplo se utiliza la función MIRR para obtener la tasa interna de retorno modificada para una serie de flujos de efectivo contenidos en la matriz Valores(). LoanAPR representa el interés de financiación, y InvAPR el tipo de interés recibido por reinversión.

Dim LoanAPR, InvAPR, Fmt, RetRate, Msg

Static Valores(5) As Double	' Define la matriz.

LoanAPR = .1	' Tipo de crédito.

InvAPR = .12	' Tipo de reinversión.

Fmt = "#0.00"	' Define el formato.

Valores(0) = -70000	' Costes iniciales.

' Flujos positivos representando ingresos en cuatro años siguientes.

Valores(1) = 22000 : Valores(2) = 25000

Valores(3) = 28000 : Valores(4) = 31000

RetRate = MIRR(Valores(), LoanAPR, InvAPR)	' Calcula tasa interna.

Msg = "La tasa interna de retorno modificada para estos cinco flujos de efectivo es "

Msg = Msg & Format(Abs(RetRate) * 100, Fmt) & "%."

MsgBox Msg	' Muestra la tasa internal de

' retorno.


NPer (Ejemplo de la función)
Ejemplo de la función NPer

En este ejemplo se utiliza la función NPer para obtener el número de períodos en los que realizar pagos para cancelar un crédito cuyo valor se encuentra en ValAct. También se facilita el tipo de interés porcentual por período (APR / 12), el pago (Pago), el valor futuro del crédito (FVal), y un número que indica si los pagos vencen al principio o al final del período de pago (Tipopago).

Dim FVal, PVal, APR, Pago, Tipopago, TotPmts

Const PERIODFIN = 0, PERIODINI = 1	' Momento de los pagos.

FVal = 0	' Normalmente 0 (crédito).

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.

Pago = InputBox("¿Cuánto desea pagar cada mes?")

Tipopago = MsgBox("¿Realiza los pagos al final del mes?", vbYesNo)

If Tipopago = vbNo Then Tipopago = PERIODINI Else Tipopago = PERIODFIN

TotPmts = NPer(APR / 12, -Pago, PVal, FVal, Tipopago)

If Int(TotPmts) <> TotPmts Then TotPmts = Int(TotPmts) + 1

MsgBox "Tardará " & TotPmts & " meses en cancelar el crédito."


NPV (Ejemplo de la función)
Ejemplo de la función NPV

En este ejemplo se utiliza la función NPV para obtener el valor actual neto de una serie de flujos de efectivo contenidos en la matriz Valor(). RetRate representa la tasa interna fija de retorno.

Dim Fmt, Guess, RetRate, NetPVal, Msg

Static Valores(5) As Double	' Define la matriz.

Fmt = "###,##0.00"	' Define el formato.

Guess = .1	' Guess comienza con el 10%.

RetRate = .0625	' Establece la tasa interna fija.

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

NetPVal = NPV(RetRate, Valores())	' Calcula el valor actual neto.

Msg = "El valor actual neto de estos flujos de efectivo es "

Msg = Msg & Format(NetPVal, Fmt) & "."

MsgBox Msg	' Muestra el valor actual neto.


Pmt (Ejemplo de la función)
Ejemplo de la función Pmt

En este ejemplo se utiliza la función Pmt para obtener los pagos mensuales de un crédito en un período fijado. Se dan el tipo porcentual de interés por período (APR / 12), el número total de pagos (TotPmts), el valor actual o nominal del crédito (PVal), el valor futuro del crédito (FVal), y un número que indica si los pagos vencen al principio o al final del período de pago(Tipopago).

Dim Fmt, FVal, PVal, APR, TotPmts, Tipopago, Pago

Const PERIODFIN = 0, PERIODINI = 1	' Momento de los pagos.

Fmt = "###,###,##0.00"	' Define el formato.

FVal = 0	' Normalmente 0 (crédito).

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("¿Cuantos pagos mensuales va a realizar?")

Tipopago = MsgBox("¿Realiza los pagos al final del mes?", vbYesNo)

If Tipopago = vbNo Then Tipopago = PERIODINI Else Tipopago = PERIODFIN

Pago = Pmt(APR / 12, TotPmts, -PVal, FVal, Tipopago)

MsgBox "El importe del pago será " & Format(Pago, Fmt) & " al mes."


PPmt (Ejemplo de la función)
Ejemplo de la función PPmt

En este ejemplo se utiliza la función PPmt para calcular la parte de un pago correspondiente al nominal para un período especificado, 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 que se desea hallar la parte correspondiente al nominal (Period), el número total de pagos (TotPmts), el valor actual o nominal del crédito (PVal), el valor futuro del crédito (FVal), y un número que indica si los pagos vencen al principio o al final del período de pago (Tipopago).

Dim NL, TB, Fmt, FVal, PVal, APR, TotPmts, Tipopago, Pago, Msg, MakeChart, Period, P, I

Const ENDPERIOD = 0, BEGINPERIOD = 1	' Momento de los pagos.

NL = Chr(13) & Chr(10)	' Define nueva línea.

TB = Chr(9)	' Define tabulador.

Fmt = "###,###,##0.00"	' Define el formato.

FVal = 0	' Normalmente 0 (crédito).

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("¿Cuántos pagos mensuales debe realizar?")

Tipopago = MsgBox("¿Realiza los pagos al final del mes?", vbYesNo)

If Tipopago = vbNo Then Tipopago = BEGINPERIOD Else Tipopago = ENDPERIOD

Pago = Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, Tipopago))

Msg = "El pago mensual es " & Format(Pago, Fmt) & ". "

Msg = Msg & "¿Desea desglosar el nominal y el interés "

Msg = Msg & "en cada período?"

MakeChart = MsgBox(Msg, vbYesNo)	' Comprueba si hay desglose.

If MakeChart <> vbNo Then

If TotPmts > 12 Then MsgBox "Sólo se mostrará el primer año."

Msg = "Mes  Pago  Nominal  Interés" & NL

For Period = 1 To TotPmts

If Period > 12 Then Exit For	' Sólo muestra 12.

P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, Tipopago)

P = (Int((P + .005) * 100) / 100)	' Redondea el nominal.

I = Pago - P

I = (Int((I + .005) * 100) / 100)	' Redondea el interés.

Msg = Msg & Period & TB & Format(Pago, Fmt)

Msg = Msg & TB & Format(P, Fmt) & TB & Format(I, Fmt) & NL

Next Period

MsgBox Msg	' Muestra la amortización.

End If


PV (Ejemplo de la función)
Ejemplo de la función PV

En este ejemplo, la función PV devuelve el valor actual de una anualidad de $1.000.000 que proporcionará $50.000 anuales durante los próximos 20 años. Se dan la tasa anual porcentual (APR), el número total de pagos (TotPmts), la cantidad de cada pago (YrIncome), el valor futuro total de la inversión (FVal), y un número que indica si cada pago se realiza al principio o al final del período (Tipopago). Observe que al representar YrIncome un efectivo que se obtiene de la anualidad cada año, es un número negativo.

Dim Fmt, APR, TotPmts, YrIncome, FVal, Tipopago, PVal

Const PERIODFIN= 0, PERIODINI= 1	' Momento de los pagos.

Fmt = "###,##0.00"	' Define el formato.

APR = .0825	' Tasa anual procentual.

TotPmts = 20	' Número total de pagos.

YrIncome = 50000	' Ingreso anuale.

FVal = 1000000	' Valor futuro.

Tipopago = PERIODINI	' Pago al comienzo del mes.

PVal = PV(APR, TotPmts, -YrIncome, FVal, Tipopago)

MsgBox "El valor actual es " & Format(PVal, Fmt) & "."


Rate (Ejemplo de la función)
Ejemplo de la función Rate

En este ejemplo se utiliza la función Rate para calcular el tipo de interés de un crédito, dados el número total de pagos (TotPmts), la cantidad de pago (Pago), el valor actual o nominal del crédito (PVal), el valor futuro del crédito (FVal), un número que indica si los pagos vencen al principio o al fin de cada período (Tipopago), y una aproximación del tipo de interés esperado (Guess).

Dim Fmt, FVal, Guess, PVal, Pago, TotPmts, Tipopago, APR

Const PERIODINI = 0, PERIODFIN = 1	' Momento de los pagos.

Fmt = "##0.00"	' Formato de porcentaje.

FVal = 0	' Normalmente 0 (crédito).

Guess = .1	' Estimación del 10%.

PVal = InputBox("¿Cuánto dinero ha solicitado?")

Pago = InputBox("¿Cuánto debe pagar al mes?")

TotPmts = InputBox("¿Cuántos pagos mensuales debe realizar?")

Tipopago = MsgBox("¿Realiza los pagos al final del mes?", _

vbYesNo)

If Tipopago = vbNo Then Tipopago = PERIODINI Else Tipopago = PERIODFIN

APR = (Rate(TotPmts, -Pago, PVal, FVal, Tipopago, Guess) * 12) * 100

MsgBox "El tipo de interés es el " & Format(CInt(APR), Fmt) & " por ciento."


SLN (Ejemplo de la función)
Ejemplo de la función SLN

En este ejemplo se utiliza la función SLN para obtener la depreciación lineal de un bien durante un solo período, dados el coste inicial del bien (CosteInic), su valor residual al final de su vida útil (ValorResid) y la vida total del bien en años(TiempoVida).

Dim Fmt, CosteInic, ValorResid, MesVida, TiempoVida, PDepr

Const MESESAÑO = 12	' Número de meses en un año.

Fmt = "###,##0.00"	' Define el formato.

CosteInic = InputBox("¿Cuál es el coste inicial del bien?")

ValorResid = InputBox("¿Cuál es el valor del bien al término de su vida útil?")

MesVida = InputBox("¿Cuál es la vida útil del bien, en meses?")

Do While MesVida < MESESAÑO 	' Perído >= 1 año.

MsgBox "La vida del bien debe ser igual o superior a un año."

MesVida = InputBox("¿Cuál es la vida útil del bien, en meses?")

Loop

TiempoVida = MesVida / MESESAÑO 	' Pasa de meses a años.

If TiempoVida <> Int(MesVida / YEARMONTHS) Then

TiempoVida = Int(TiempoVida + 1)	' Redondea al año siguiente.

End If

PDepr = SLN(CosteInic, ValorResid, TiempoVida)

MsgBox "La depreciación es " & Format(PDepr, Fmt) & " por año."


SYD (Ejemplo de la función)
Ejemplo de la función SYD

Este ejemplo muestra el uso de la función SYD para obtener la depreciación de un bien durante un período de tiempo especificado, dado el coste inicial del bien (CosteInic), su valor residual al término de su vida útil (ValorResid), y el tiempo de vida total del bien en años (TiempoVida). El período en años para el que se calcula la depreciación es PDepr.

Dim Fmt, CosteInic, ValorResid, MesVida, TiempoVida, AñoDep, PDepr

Const MESESAÑO = 12	' Número de meses en una año.

Fmt = "###,##0.00"	' Define el formato.

CosteInic = InputBox("¿Cuál es el coste inicial del bien?")

ValorResid = InputBox("¿Cuál es el valor del bien al final de su vida?")

MesVida = InputBox("¿Cuál es la vida útil del bien, en meses?")

Do While MesVida < MESESAÑO 	' Perído >= 1 año.

MsgBox "La vida del bien debe ser igual o superior a un año."

MesVida = InputBox("¿Cuál es la vida útil del bien, en meses?")

Loop

TiempoVida = MesVida / MESESAÑO 	' Pasa de meses a años.

If TiempoVida <> Int(MesVida / MESESAÑO ) Then

TiempoVida = Int(TiempoVida + 1)	' Redondea al año siguiente.

End If

AñoDep = CInt(InputBox("¿De qué año desea conocer la depreciación?"))

Do While AñoDep < 1 Or AñoDep > TiempoVida

MsgBox "Debe indicar como mínimo 1 y como máximo " & TiempoVida

AñoDep = CInt(InputBox("¿De qué año desea conocer la depreciación?"))

Loop

PDepr = SYD(CosteInic, ValorResid, TiempoVida, AñoDep)

MsgBox "La depreciación en el año " & AñoDep & " es " & Format(PDepr, Fmt) & "."


DDB (Función)

Devuelve un tipo Double que indica la depreciación de un bien durante un periodo de tiempo especificado utilizando el método de balance de doble declinación u otro método que especifique.

Sintaxis

DDB(cost, salvage, life, period[, factor])

La función DDB consta de los siguientes argumentos con nombre:

Parte	Descripción
cost	Obligatorio. Un tipo Double que indica el costo inicial del bien.
salvage	Obligatorio. Un tipo Double que indica el valor del bien al término de su vida útil.
life	Obligatorio. Un tipo Double que indica la duración de la vida útil del bien.
period	Obligatorio. Un tipo Double que indica el periodo para el que se calcula la depreciación del bien.
factor	Opcional. Un tipo Variant que indica la velocidad a la que declina el balance. Si se omite, se asume un valor 2 (método de declinación doble).
Comentarios

El método de balance de doble declinación calcula la depreciación a un ritmo acelerado. La depreciación es mayor en el primer periodo y se reduce en los periodos sucesivos.

Los argumentos life y period deben expresarse en las mismas unidades. Por ejemplo, si life se especifica en meses, period también deberá indicarse en meses. Todos los argumentos deben ser números positivos.

La función DDB utiliza la fórmula siguiente para calcular la depreciación en un periodo dado:

Depreciación / period = ((cost – salvage) * factor) / life


FV (Función)

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]])

La función FV consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. 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	Obligatorio. 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	Obligatorio. 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.


IPmt (Función)

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]])

La función IPmt consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. 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	Obligatorio. Un tipo Double que indica el periodo de pago, entre 1 y nper.
nper	Obligatorio. 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	Obligatorio. 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.


IRR (Función)

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])

La función IRR consta de los siguientes argumentos con nombre:

Parte	Descripción
values()	Obligatorio. 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.


MIRR (Función)

Devuelve un tipo Double que indica la tasa interna de retorno modificada para una serie de flujos de efectivo periódicos (pagos y cobros).

Sintaxis

MIRR(values(), finance rate, reinvest rate)

La función MIRR consta de los siguientes argumentos con nombre:

Parte	Descripción
values()	Obligatorio. Matriz de tipo Double que indica los valores de flujo de efectivo. La matriz debe contener al menos un valor negativo (un pago) y uno positivo (un cobro).
finance rate	Obligatorio. Un tipo Double que indica el tipo de interés pagado como costo de financiación.
reinvest rate	Obligatorio. Un tipo Double que indica el tipo de interés recibido como ganancia por la inversión en efectivo.
Comentarios

La tasa interna de retorno modificada es la tasa interna de retorno cuando los pagos y los cobros se financian con tipos distintos. La función MIRR tiene en cuenta el costo de la inversión (finance rate) y el tipo de interés recibido por la reinversión de efectivo (reinvest rate).

Los argumentos finance rate e reinvest rate son porcentajes expresados como valores decimales. Por ejemplo, 12 por ciento se expresa como 0,12.

La función MIRR 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.


NPer (Función)

Devuelve un tipo Double que indica el número de periodos de una anualidad basándose en pagos periódicos y constantes con un tipo de interés también constante.

Sintaxis

NPer(rate, pmt, pv[, fv[, type]])

La función NPer consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. Un tipo Double que indica el tipo de interés por periodo. Por ejemplo, si obtiene un crédito para comprar 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.
pmt	Obligatorio. 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	Obligatorio. 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).

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.


NPV (Función)

Devuelve un tipo Double que indica el valor actual neto de una inversión basada en una serie de flujos de efectivo periódicos (pagos y cobros) y un tipo de descuento.

Sintaxis

NPV(rate, values())

La función NPV consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. Un tipo Double que indica el tipo de descuento a lo largo del periodo, expresado como un valor decimal.
values()	Obligatorio. Matriz de tipo Double que especifica valores de flujo de efectivo. La matriz debe contener al menos un valor negativo (un pago) y un valor positivo (un cobro).
Comentarios

El valor actual neto de una inversión es el valor actual de una serie de pagos y cobros futuros.

La función NPV 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.

La inversión de NPV comienza un periodo antes de la fecha del primer flujo de efectivo y termina con el último flujo de efectivo de la matriz.

El cálculo del valor actual neto se basa en flujos de efectivo futuros. Si el primer flujo de efectivo se produce al principio del primer periodo, el primer valor debe agregarse al que devuelva NPV y no debe incluirse en los valores de flujo de efectivo de values().

La función NPV es similar a PV (valor actual), excepto en que PV permite que los flujos de efectivo comiencen al principio o al final de un periodo. A diferencia de los valores de flujo de efectivo variables de NPV, los de PV deben ser constantes a lo largo de toda la inversión.


Pmt (Función)

Devuelve un tipo Double que indica el pago de una anualidad basada en pagos periódicos constantes con un tipo de interés también constante.

Sintaxis

Pmt(rate, nper, pv[, fv[, type]])

La función Pmt consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. Un tipo Double que indica el tipo de interés por periodo. Por ejemplo, si obtiene un crédito para comprar 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.
nper	Obligatorio. 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.
pv	Obligatorio. Un tipo Double 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.
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.


PPmt (Función)

Devuelve un tipo Double que indica el pago nominal correspondiente a un periodo determinado de una anualidad basada en pagos periódicos y constantes con un tipo de interés también constante.

Sintaxis

PPmt(rate, per, nper, pv[, fv[, type]])

La función PPmt consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. Un tipo Double que indica el tipo de interés por periodo. Por ejemplo, si obtiene un crédito para comprar 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	Obligatorio. Un tipo Integer que indica el periodo del pago, entre 1 y nper.
nper	Obligatorio. 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.
fv	Obligatorio. 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.


PV (Función)

Devuelve un tipo Double que indica el valor actual de una anualidad basada en pagos periódicos constantes que se van a realizar en el futuro, con un tipo de interés también constante.

Sintaxis

PV(rate, nper, pmt[, fv[, type]])

La función PV consta de los siguientes argumentos con nombre:

Parte	Descripción
rate	Obligatorio. Un tipo Double que indica el tipo de interés por periodo. Por ejemplo, si obtiene un crédito para comprar 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.
nper	Obligatorio. 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	Obligatorio. Un tipo Double que indica el pago a 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.
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.


Rate (Función)

Devuelve un tipo Double que indica el tipo de interés por periodo de una anualidad.

Sintaxis

Rate(nper, pmt, pv[, fv[, type[, guess]]])

La función Rate consta de los siguientes argumentos con nombre:

Parte	Descripción
nper	Obligatorio. 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.
pmt	Obligatorio. Un tipo Double que indica el pago que se va a 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	Obligatorio. Un tipo Double que indica el valor actual, o valor 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.
vf	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.
guess	Opcional. Un tipo Variant que indica la estimación que devolverá Rate. Si se omite, guess será 0,1 (10 por ciento).
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).

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.

Rate se calcula por iteración. Comenzando por el valor de guess, Rate 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 pueden encontrar un resultado, Rate falla. Si se comienza por el 10 por ciento y Rate falla, pruebe con un valor distinto para guess.


SLN (Función)

Devuelve un tipo Double que indica la depreciación lineal de un bien durante un único periodo.

Sintaxis

SLN(cost, salvage, life)

La función SLN consta de los siguientes argumentos con nombre:

Parte	Descripción
cost	Obligatorio. Un tipo Double que indica el costo inicial del bien.
salvage	Obligatorio. Un tipo Double que indica el valor del bien al término de su vida útil.
life	Obligatorio. Un tipo Double que indica la duración de la vida útil del bien.
Comentarios

El periodo de depreciación se debe expresar en las mismas unidades que el argumento life. Todos los argumentos deben ser números positivos.


SYD (Función)

Devuelve un tipo Double que indica la depreciación de un bien en dígitos de suma de años durante un periodo especificado.

Sintaxis

SYD(cost, salvage, life, period))

La función SYD consta de los siguientes argumentos con nombre:

Parte	Descripción
cost	Obligatorio. Un tipo Double que indica el costo inicial del bien.
salvage	Obligatorio. Un tipo Double que indica el valor del bien al término de su vida útil.
life	Obligatorio. Un tipo Double que indica la duración de la vida útil del bien.
period	Obligatorio. Un tipo Double que indica el periodo para el que se calcula la depreciación del bien.
Comentarios

Los argumentos life y period deben expresarse en las mismas unidades. Por ejemplo, si life se indica en meses, period también debe especificarse en meses. Todos los argumentos deben ser números positivos.


IsArray (Ejemplo de la función)
Ejemplo de la función IsArray

En este ejemplo se utiliza la función IsArray para verificar si una variable es una matriz.

Dim MiMatriz(1 To 5) As Integer, TuMatriz, MiPrueba
' Declara variables de matriz.

TuMatriz = Array(1, 2, 3)	' Utiliza la función Array.

MiPrueba = IsArray(MiMatriz)	' Devuelve True.

MiPrueba = IsArray(TuMatriz)	' Devuelve True.


IsDate (Ejemplo de la función)
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 (Ejemplo de la función)
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.


IsError (Ejemplo de la función)
Ejemplo de la función IsError

En este ejemplo se utiliza la función IsError para verificar si una expresión numérica es un valor de error. La función se utiliza para devolver un Error Variant desde una función definida por el usuario. Se supone que FunciónUsuario es un procedimiento de función definida por el usuario que devuelve un valor de error; por ejemplo, devuelve un valor devuelto asignado con la instrucción FunciónUsuario = CVErr(32767), donde 32767 es un número definido por el usuario.

Dim ValDevuelto, MiPrueba

ValDevuelto = UserFunction()

MiPrueba = IsError(ValDevuelto)	' Devuelve True.


IsMissing (Ejemplo de la función)
Ejemplo de la función IsMissing

En este ejemplo se utiliza la función IsMissing para verificar si un argumento opcional ha sido pasado a un procedimiento definido por en usuario..Advierta que los argumentos opcionales (Optional) pueden tener ahora valores predeterminados y ser de un tipo distinto a Variant.

Dim ValorDevuelto

' Las instrucciones siguientes llaman al procedimiento definido por el usuario.

ValorDevuelto = DevolverDos()	' Devuelve Null.

ValorDevuelto = DevolverDos(2)	' Devuelve 4.

' Definición del procedimiento función.

Function DevolverDos(Optional A)

If IsMissing(A) Then

' Si falta el argumento se devuelve Null.

DevolverDos = Null

Else

' Si el argumento está presente se devuelve el doble del valor.

DevolverDos = A * 2

End If

End Function


IsNull (Ejemplo de la función)
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 (Ejemplo de la función)
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.


IsObject (Ejemplo de la función)
Ejemplo de la función IsObject

En este ejemplo se utiliza la función IsObject para determinar si una variable hace referencia a un objeto válido. MiObjeto y TuObjeto son variables de objeto del mismo tipo. Son nombres genéricos que se utilizan sólo con propósitos ilustrativos.

Dim MiEnt As Integer, TuObjeto, MiPrueba	' Declara una variable.

Dim MiObjeto As Object

Set TuObjeto = MiObjeto	' Asigna una referencia de objeto.

MiPrueba = IsObject(TuObjeto)' Devuelve True.

MiPrueba = IsObject(MiEnt)	' Devuelve False.


TypeName (Ejemplo de la función)
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()".


VarType (Ejemplo de la función)
Ejemplo de la función VarType

En este ejemplo se utiliza VarType para determinar el subtipo de una variable.

Dim VarEnt, VarCad, VarFecha, MiPrueba

' Inicializa las variables.

VarEnt = 459: VarCad = " Hola a todos ": VarFecha = #2/12/69#

MiPrueba = VarType(VarEnt)	' Devuelve 2.

MiPrueba = VarType(VarFecha)	' Devuelve 7.

MiPrueba = VarType(VarCad)	' Devuelve 8.


IsArray (Función)

Devuelve un valor de tipo Boolean que indica si una variable es una matriz.

Sintaxis

IsArray(nombrevariable)

El argumento requerido nombrevariable, es un identificador que especifica una variable.

Comentarios

La función IsArray devuelve True si la variable es una matriz; en caso contrario, devuelve False. La función IsArray es especialmente útil con variables de tipo Variant que contienen matrices.


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)

El argumento expresión requerido, es un tipo de datos Variant que contiene una expresión de fecha o una expresión de cadena reconocible como una fecha o una hora.

Comentarios

La función IsDate devuelve True si la expresión es una fecha o se puede convertir en 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.C. hasta el 31 de diciembre de 9999 D.C; los intervalos varían de un sistema operativo a otro.


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.


IsError (Función)

Devuelve un valor de tipo Boolean que indica si una expresión tiene un valor de error.

Sintaxis

IsError(expresión)

El argumento expresión requerido, debe ser un tipo de datos Variant de VarType vbError.

Comentarios

Los valores de error se crean al convertir números reales a valores de error utilizando la función CVErr. La función IsError se utiliza para determinar si una expresión numérica representa un error. La función IsError devuelve True si el argumento expresión indica un error; en caso contrario, devuelve False. La función IsError solamente devuelve información significativa para variables de tipo Variant de VarType vbError.


IsMissing (Función)

Devuelve un valor de tipo Boolean que indica si un argumento opcional se ha transferido a un procedimiento.

Sintaxis

IsMissing(nombreargumento)

El argumento nombreargumento contiene el nombre de un argumento de procedimiento Variant opcional.

Comentarios

Utilice la función IsMissing para detectar si los argumentos opcionales se transfirieron en la llamada al procedimiento. La función IsMissing devuelve True si no se transfirieron valores para el argumento especificado; en caso contrario, devuelve False. Si la función IsMissing devuelve True para un argumento, utilizar ese argumento ausente en otro código puede provocar un error definido por el usuario. Si la función IsMissing se utiliza en un argumento ParamArray, siempre devuelve False. Para detectar un argumento ParamArray vacío, compruebe si el límiter superior de la matriz es menor que el límite inferior.


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)

El argumento expresión requerido, es un tipo de datos Variant que contiene una expresión numérica o una expresión de cadena.

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.


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)

El argumento expresión requerido, es un tipo de datos Variant que contiene una expresión numérica o una expresión de tipo cadena.

Comentarios

La función IsNumeric devuelve True si la expresión completa se reconoce como un número; en otro caso, devuelve False.

La función IsNumeric devuelve False si expresión es una expresión de fecha.


IsObject (Función)

Devuelve un valor de tipo Boolean que indica si un identificador representa una variable de tipo Object.

Sintaxis

IsObject(identificador)

El argumento obligatorio identificador  es un nombre de variable.

Comentarios

La función IsObject es útil solamente para determinar si un tipo de datos Variant es de VarType vbObject. Esto podría suceder si Variant actualmente hace referencia (o una vez hizo referencia) a un objeto o si contiene Nothing.

La función IsObject devuelve True si identificador es una variable declarada de tipo Object o cualquier tipo de clase válida, o si identificador es un un tipo de datos Variant de VarType vbObject o un objeto definido por el usuario; en cualquier otro caso, devuelve False. La función IsObject devuelve True incluso si la variable ha sido configurada como Nothing.

Utilice el tratamiento de errores para asegurarse de que una referencia a un objeto es válida. Puede utilizar la función IsNothing para determinar si una referencia a un objeto ha sido configurada como Nothing.


TypeName (Función)

Devuelve una cadena (String) que proporciona información acerca de una variable.

Sintaxis

TypeName(nombrevariable)

El argumento nombrevariable requerido, es un tipo de datos Variant que contiene cualquier variable excepto una variable de un tipo definido por el usuario.

Comentarios

La cadena devuelta por la función TypeName puede ser cualquiera de las siguientes:

Cadena devuelta	La variable contiene
tipo de objeto	Un objeto cuyo tipo es tipoobjeto
Byte	Un valor byte
Integer	Un entero
Long	Un entero largo
Single	Un número de punto flotante de precisión simple
Double	Un número de punto flotante de precisión doble
Currency	Un valor de moneda
Decimal	Un valor decimal
Date	Un valor fecha
String	Una cadena
Boolean	Un valor booleano
Error	Un valor de error
Empty	No inicializado
Null	Datos no válidos
Object	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()".


VarType (Función)

Devuelve un entero (Integer) que indica el subtipo de una variable.

Sintaxis

VarType(nombrevariable)

El argumento nombrevariable requerido, es un tipo Variant que contiene cualquier variable excepto una variable de un tipo definido por el usuario.

Valores devueltos

Constante	Valor	Descripción
vbEmpty	0	Empty (no inicializado)
vbNull	1	Null (datos no válidos)
vbInteger	2	Un entero
vbLong	3	Un entero largo
vbSingle	4	Un número de coma flotante de precisión simple
vbDouble	5	Un número de coma flotante de precisión doble
vbCurrency	6	Valor moneda
vbDate	7	Valor fecha
vbString	8	Cadena
vbObject	9	Objeto
vbError	10	Valor error
vbBoolean	11	Valor booleano
vbVariant	12	Variant (utilizada solamente con matrices de variantes)
vbDataObject	13	Un objeto de acceso a datos
vbDecimal	14	Valor decimal
vbByte	17	Valor de byte
vbArray	8192	Matriz
Nota   Estas constantes están especificadas por Visual Basic para Aplicaciones. Los nombres se puede utilizar en cualquier posición en su código en lugar de los valores actuales.

Comentarios

La función VarType nunca devuelve por sí misma el valor para vbArray. Siempre se agrega a algún otro valor para indicar una matriz de un tipo particular. La constante vbVariant solamente se devuelve junto con vbArray para indicar que el argumento de la función VarType es una matriz del tipo Variant. Por ejemplo, el valor devuelto por una matriz de enteros se calcula como vbInteger + vbArray, o 8194. Si un objeto tiene una propiedad predeterminada, VarType (objeto) devuelve el tipo de la propiedad predeterminada del objeto.


Empty

La palabra clave Empty se utiliza como un subtipo Variant. Indica que una variable no está inicializada con un valor.


False

La palabra clave False tiene un valor igual a 0.


Me

La palabra clave Me se comporta como una variable declarada de forma implícita. Está disponible automáticamente para todos los procedimientos en un módulo de clase. Cuando una clase puede tener más de una instancia, Me proporciona una forma de referirse a una instancia específica de la clase donde se está ejecutando el código. El uso de Me es especialmente útil cuando se desea pasar información sobre la instancia que se está ejecutando actualmente a un procedimiento de otro módulo. Por ejemplo, suponga que tiene el procedimiento siguiente en un módulo:

Sub CambiaColorFormulario (NombreFormulario As Form)

NombreFormulario.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

End Sub

Puede llamar a este procedimiento y pasar la instancia actual de la clase Form como un argumento utilizando la siguiente instrucción:

CambiaColorFormulario Me


Nothing

La palabra clave Nothing se utiliza para desvincular una variable objeto de un objeto real. Utilice la instrucción Set para asignar Nothing a una variable objeto. Por ejemplo:

Set MiObjeto = Nothing

Varias variables objeto pueden referirse al mismo objeto real. Cuando Nothing se asigna a una variable objeto, la variable no se referirá ya al objeto real. Cuando varias variables objeto se refieren a un mismo objeto, los recursos de memoria y del sistema asociados con el objeto sólo se liberan después de que todas ellas se han establecido como Nothing, ya sea explícitamente mediante Set, o implícitamente después de que la última variable objeto establecida como Nothing salga del alcance.


Null

La palabra clave Null se utiliza como un subtipo Variant. Indica que una variable no tiene datos válidos.


True

La palabra clave True tiene un valor igual a -1.


MacID (Función)

Se utiliza solamente en Macintosh para convertir una constante de cuatro caracteres en un valor que pueden utilizar por Dir, Kill, Shell y AppActivate.

Sintaxis

MacID(constante)

El argumento requerido constante consiste en cuatro caracteres utilizados para especificar un tipo de recurso, un tipo de archivo, la firma de una aplicación o un Evento Apple. Por ejemplo, TEXT, OBIN, MSWD (Microsoft Word), XCEL (Microsoft Excel), etc.

Comentarios

MacID se utiliza con Dir y Kill para especificar un tipo de archivo de Macintosh. Como Macintosh no acepta a los caracteres * y ? como comodines, puede utilizar una constante de cuatro caracteres en vez de identificar grupos de archivos. Por ejemplo, en la siguiente instrucción se devuelven archivos de tipo TEXTO que se encuentran en la carpeta actual:

Dir("AlgunaRuta", MacID("TEXT"))

MacID se utiliza con Shell y AppActivate para especificar una aplicación que utiliza una firma exclusiva de esa aplicación.


MacScript (Función)

Ejecuta una secuencia de comandos de AppleScript y devuelve un valor devuelto por la secuencia de comandos, si existe.

Sintaxis

MacScript secuencia_comandos

El argumento secuencia_comandos es una expresión de cadena. La expresión de cadena puede ser una serie de comandos AppleScript, o puede especificar el nombre de una secuencia de comandos AppleScript o un archivo de secuencia de comandos.

Comentarios

Es posible crear secuencias de comandos de múltiples líneas si inserta caracteres de retorno de carro (Chr(13)).


MacScript (Ejemplo de la función)
Ejemplo de la función MacScript

Este ejemplo utiliza la función MacScript para abrir el cuadro de diálogo Elegir archivo (el diálogo de archivo estándar de Macintosh). Se devuelve la ruta de acceso del archivo elegido por el usuario. Si es adecuado, la especificación de la ruta de acceso está precedida por el tipo de archivo.

LaRuta$ = Macscript("ElegirArchivo")


Date (Instrucción para Apple Power Macintosh)

Para Macintosh, fecha debe estar comprendida entre el 1 de enero de 1904 y el 5 de febrero de 2040.


Call (Instrucción para Apple Power Macintosh)

Se pueden utilizar ByVal y ByRef con la instrucción Call cuando se realiza una llamada a un recurso de código Macintosh.


Shell (Función para Apple Power Macintosh)

La sintaxis de la función Shell tiene estos argumentos con nombre:

Parte	Descripción
pathname	En Macintosh, puede utilizar la función MacID para especificar una abreviatura de una aplicación en lugar de su nombre. El siguiente ejemplo utiliza la abreviatura para Microsoft Word:
	Shell MacID("MSWD")
windowstyle	En Macintosh (System 7.0 o posterior), windowstyle sólo determina si la aplicación obtiene o no el enfoque cuando se está ejecutando.
La constante vbHide no es aplicable en plataformas Apple Macintosh.


Declare (Instrucción para Apple Power Macintosh)

En Power Macintosh, la sintaxis de la instrucción Declare es la misma que en Windows, excepto que se puede utilizar la palabra clave CDecl para indicar que el procedimiento utiliza orden de argumento, nomenclatura y convenciones de llamadas de lenguaje C:

[Public | Private ] Declare Function nombre [CDecl] Lib "nombrebiblioteca" [Alias "alias" ] [([listaarg])] [As tipo]

La palabra clave Alias indica que el procedimiento se llama en un recurso de código Macintosh. Esto es útil cuando el nombre de procedimiento externo coincide con una palabra clave.

Utilice el alias para especificar el tipo de recurso de código siguiente:

"[tiporecurso]$[nombrerecurso]"

El tiporecurso es una constante válida de cuatro caracteres. Si se omite, el tiporecurso predeterminado es CODE. El nombrerecurso es el nombre de procedimiento en el recurso de código. Si se omite nombrerecurso, se supone que es el mismo que nombre.

En Power Macintosh, la instrucción Declare admite llamadas en código nativo sólo para fragmentos de código. Se admiten llamadas en recursos de código, pero sólo en el modo de emulación 68000.

Cuando se utiliza en Power Macintosh, la sintaxis de la instrucción Declare es como sigue:

Declare Function MiFunción Lib "unidad:carpeta del sistema:extensiones:MiFragmentodeCódigo" Alias "MiFunción" () As Long

Para fragmentos de código y recursos de código, se puede especificar la ruta de acceso parcial o completade la cláusula Lib. Si la cláusula Lib especificada es ambigua, se resuelve del siguiente modo:

•	Si el archivo contiene un recurso 'cfrg', se trata como un fragmento de código.

•	Si el archivo no contiene un recurso 'cfrg', se trata como un archivo que contiene recursos de código.

Esto permite la creación de fragmentos de código "fat", esto es, archivos que contienen fragmentos de código y recursos de código 68000. Cuando ejecuta Visual Basic for Applications en un Macintosh 68000 se utiliza el recurso de código. Cuando lo ejecuta en Power Macintosh, se utiliza el fragmento de código nativo.

Se puede tener acceso al cuadro de herramientas Macintosh en Power Macintosh utilizando una declaración en el fragmento de código del sistema.


ChDir (Instrucción para Apple Power Macintosh)

En Power Macintosh, la unidad de disco predeterminada siempre cambia a la unidad de disco especificada en rutaacesso. Las especificaciones de la ruta de acceso completa comienzan con el nombre de volumen y las rutas de acceso relativas comienzan con dos puntos (:). ChDir resuelve cualquier alias especifica en la ruta de acceso:

ChDir "UnidadMac:Tmp"	' En Macintosh.

Observe que cuando realiza cambios de directorio relativo, se utilizan diferentes símbolos en Microsoft Windows y en Macintosh:

ChDir ".."	' Sube un directorio en Microsoft Windows.

ChDir "::"	' Sube un directorio en Macintosh.


Dir (Función para Apple Power Macintosh)

En Microsoft Windows, Dir admite la utilización de comodines de múltiples caracteres (*) y de un carácter (?) para especificar varios archivos. En Macintosh, estos caracteres se tratan como caracteres de nombre de archivo válidos y no se puede utilizar como comodines para especificar varios archivos.

Ya que Macintosh no admite los comodines, utilice el tipo de archivo para identificar grupos de archivos. Puede utilizar la función MacID para especificar el tipo de archivo en lugar de utilizar los nombres de archivo. Por ejemplo, la siguiente instrucción devuelve el nombre del primer archivo tipo TEXTO en la carpeta actual:

Dir("Algunaruta", MacID("TEXTO"))

Para repetirlo sobre todos los archivos de una carpeta, especifique una cadena vacía:

Dir("")

Si utiliza la función MacID con Dir en Microsoft Windows, se produce un error.

Cualquier valor de atributo mayor que 256 se considera un valor MacID.

Las constantes siguientes no están disponibles en Macintosh:

Constant	Value	Description
vbSystem	4	Archivo del sistema
vbVolume	8	Etiqueta de volumen
La siguiente constante sólo está disponible en Macintosh:

Constant	Value	Description
vbAlias	64	El nombre de archivo especificado es un alias.


GetAttr (Función para Apple Power Macintosh)

Las constantes siguientes no están disponibles en Macintosh:

Constant	Value	Description
vbSystem	4	Archivo del sistema
vbArchive	32	El archivo ha cambiado desde la última copia de seguridad.
La siguiente constante sólo está disponible en Macintosh:

Constant	Value	Description
vbAlias	64	El nombre de archivo especificado es un alias.


Kill (Instrucción para Apple Power Macintosh)

En Microsoft Windows, Kill admite la utilización de comodines de múltiples caracteres (*) y de un carácter (?) para especificar varios archivos. En Macintosh, estos caracteres se tratan como caracteres de nombre de archivo válidos y no se puede utilizar como comodines para especificar varios archivos.

Ya que Macintosh no admite los comodines, utilice el tipo de archivo para identificar grupos de archivos. Puede utilizar la función MacID para especificar el tipo de archivo en lugar de utilizar los nombres de archivo. Por ejemplo, la siguiente instrucción devuelve el nombre del primer archivo tipo TEXTO en la carpeta actual.

Kill MacID("TEXT")

Si utiliza la función MacID con Kill en Microsoft Windows, se produce un error.


SetAttr (Instrucción para Apple Power Macintosh)

Las constantes siguientes no están disponibles en Macintosh:

Constant	Value	Description
vbSystem	4	Archivo del sistema
vbArchive	32	El archivo ha cambiado desde la última copia de seguridad.
La siguiente constante sólo está disponible en Macintosh

Constant	Value	Description
vbAlias	64	El nombre de archivo especificado es un alias.


Dir, GetAttr y SetAttr (Constantes para Apple Power Macintosh)

Las constantes siguientes no están disponibles en Macintosh:

Constant	Value	Description
vbSystem	4	Archivo del sistema
vbVolume	8	Etiqueta de volumen
vbArchive	32	El archivo ha cambiado desde la última copia de seguridad.
La siguiente constante sólo está disponible en Macintosh

Constant	Value	Description
vbAlias	64	El nombre de archivo especificado es un alias.


Constantes StrConv (Apple Power Macintosh)

Las constantes siguientes no están disponibles en Macintosh:

Constant	Value	Description
vbUnicode***	64***	Convierte la cadena a Unicode utilizando la página de códigos predeterminada del sistema. Especificar este bit en Macintosh o sistemas Windows de 16 bits produce un error en tiempo de ejecución.
vbFromUnicode***	128***	Convierte la cadena de Unicode a la página de códigos predeterminada del sistema. Especificar este bit en Macintosh o sistemas Windows de 16 bits produce un error en tiempo de ejecución


ChDrive (Instrucción para Apple Power Macintosh)

En Macintosh, ChDrive cambia la carpeta actual a la carpeta raíz de la unidad de disco especificada.


CurDir (Función para Apple Power Macintosh)

El argumento opcional unidaddisco es una expresión de cadena que especifica una unidad de disco existente. CurDir ignora cualquier unidaddisco especificada y simplemente devuelve la ruta de acceso de la unidad de disco actual.


RGB (Función para Apple Power Macintosh)

Los valores de color RGB devueltos por esta función no son compatibles con los que utiliza el sistema operativo Macintosh. Se pueden utilizar en el contexto de las aplicaciones Macintosh, pero no se deben utilizar cuando se comunican cambios de color directamente al sistema operativo Macintosh.


Like (Operador para Apple Power Macintosh)

En Macintosh, el orden de clasificación se determina por el juego de caracteres.


Option Compare (Instrucción para Apple Power Macintosh)

En Macintosh, el orden de clasificación se determina por el juego de caracteres.


Biblioteca de objetos no registrada (Apple Power Macintosh)

Elimine la carpeta Macintosh Preferences y reinicie su aplicación.


Abs (Ejemplo de la función)
Ejemplo de la función Abs

En este ejemplo se utiliza la función Abs para calcular el valor absoluto de un número.

Dim MyNumber

MyNumber = Abs(50.3)	' Devuelve 50,3.

MyNumber = Abs(-50.3)	' Devuelve 50,3.


Atn (Ejemplo de la función)
Ejemplo de la función Atn

En este ejemplo se utiliza la función Atn para calcular el valor de pi.

Dim pi

pi = 4 * Atn(1)	' Calcula el valor de pi.


Cos (Ejemplo de la función)
Ejemplo de la función Cos

En este ejemplo se utiliza la función Cos para devolver el coseno de un ángulo.

Dim MyAngle, MySecant

MyAngle = 1.3	' Define un ángulo en radianes.

MySecant = 1 / Cos(MyAngle)	' Calcula la secante.


Exp (Ejemplo de la función)
Ejemplo de la función Exp

En este ejemplo se utiliza la función Exp para devolver e elevado a una potencia.

Dim MyAngle, MyHSin

' Define un ángulo en radianes.

MyAngle = 1.3

' Calcula el seno hiperbólico.

MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2


Int Function y Fix (Ejemplo de las funciones)
Ejemplo de las funciones Int Function y Fix

En este ejemplo se ilustra cómo las funciones Int y Fix devuelven la parte entera de un número. En el caso de un argumento de número negativo, la función Int devuelve el primer entero negativo menor o igual al número; mientras que la función Fix devuelve el primer entero negativo mayor o igual que el número.

Dim MyNumber

MyNumber = Int(99.8)	' Devuelve 99.

MyNumber = Fix(99.2)	' Devuelve 99.

MyNumber = Int(-99.8)	' Devuelve -100.

MyNumber = Fix(-99.8)	' Devuelve -99.

MyNumber = Int(-99.2)	' Devuelve -100.

MyNumber = Fix(-99.2)	' Devuelve -99.


Log (Ejemplo de la función)
Ejemplo de la función Log

En este ejemplo se utiliza la función Log para devolver el logaritmo natural de un número.

Dim MyAngle, MyLog

' Define un ángulo en radianes.

MyAngle = 1.3

' Calcula el seno hiperbólico inverso.

MyLog = Log(MyAngle + Sqr(MyAngle * MyAngle + 1))


Randomize (Ejemplo de la instrucción)
Ejemplo de la instrucción Randomize

En este ejemplo se utiliza la instrucción Randomize para inicializar el generador de números aleatorios. Debido que se omite el argumento del número, Randomize utiliza el valor devuelto de la función Timer como el nuevo valor semilla.

Dim MyValue

Randomize	' Inicializa el generador de números aleatorios.

MyValue = Int((6 * Rnd) + 1)	' Genera un valor aleatorio entre 1 y 6.


Rnd (Ejemplo de la función)
Ejemplo de la función Rnd

En este ejemplo se utiliza la función Rnd para generar un valor entero aleatorio del 1 al 6.

Dim MyValue

MyValue = Int((6 * Rnd) + 1)	' Genera un valor aleatorio entre 1 y 6.


Sgn (Ejemplo de la función)
Ejemplo de la función Sgn

En este ejemplo se utiliza la función Sgn para determinar el signo de un número.

Dim MyVar1, MyVar2, MyVar3, MySign

MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0

MySign = Sgn(MyVar1)	' Devuelve 1.

MySign = Sgn(MyVar2)	' Devuelve -1.

MySign = Sgn(MyVar3)	' Devuelve 0.


Sin (Ejemplo de la función)
Ejemplo de la función Sin

En este ejemplo se utiliza la función Sin para devolver el seno de un ángulo.

Dim MyAngle, MyCosecant

MyAngle = 1.3	' Se define un ángulo en radianes.

MyCosecant = 1 / Sin(MyAngle)	' Se calcula la cosecante.


Sqr (Ejemplo de la función)
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 MySqr

MySqr = Sqr(4)	' Devuelve 2.

MySqr = Sqr(23)	' Devuelve 4,79583152331272.

MySqr = Sqr(0)	' Devuelve 0.

MySqr = Sqr(-4)	' Genera un error de ejecución.


Tan (Ejemplo de la función)
Ejemplo de la función Tan

En este ejemplo se utiliza la función Tan para devolver la tangente de un ángulo.

Dim MyAngle, MyCotangent

MyAngle = 1.3	' Define un ángulo en radianes.

MyCotangent = 1 / Tan(MyAngle)	' Define un ángulo en radianes.


Funciones matemáticas

Abs (Función)

Atn (Función)

Cos (Función)

Exp (Función)

Fix (Función)

Int (Función)

Log (Función)

Rnd (Función)

Sgn (Función)

Sin (Función)

Sqr (Función)

Tan (Función)

Funciones matemáticas derivadas


Abs (Función)

Devuelve un valor del mismo tipo que el que se pasó como parámetro y que especifica el valor absoluto de un número.

Sintaxis

Abs(número)

El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, la función devolverá Null; si es una variable no inicializada, devolverá cero.

Comentarios

El valor absoluto de un número es su magnitud sin signo. Por ejemplo, ABS(-1) y ABS(1) devuelven 1.


Atn (Función)

Devuelve un tipo Double que especifica el arcotangente de un número.

Sintaxis

Atn(número)

El argumento número es un tipo Double o cualquier expresión numérica válida.

Comentarios

La función Atn toma la razón de dos lados de un triángulo rectángulo (número) y devuelve el ángulo correspondiente en radianes. La razón es la longitud del lado opuesto al ángulo dividida por la longitud del lado adyacente al ángulo.

El ángulo del resultado es -pi/2 a pi/2 radianes.

Para convertir grados en radianes, multiplique los grados por PI/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.

Nota   Atn es la función trigonométrica inversa de Tan, que toma un ángulo y su argumento y devuelve la razón de dos lados de un triángulo rectángulo. No confunda con la cotangente, que es el inverso de la tangente (1/tangente).


Cos (Función)

Devuelve un tipo Double que especifica el coseno de un ángulo.

Sintaxis

Cos(número)

El argumento número es un tipo Double o cualquier expresión numérica válida que expresa un ángulo en radianes.

Comentarios

La función Cos toma un ángulo y devuelve la razón de dos lados de un triángulo rectángulo. La razón es la longitud del lado adyacente al ángulo dividida por la longitud de la hipotenusa.

El resultado está dentro del intervalo -1 a 1.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.


Exp (Función)

Devuelve un tipo Double que especifica e (la base de los logaritmos naturales) elevado a una potencia.

Sintaxis

Exp(número)

El argumento número es un tipo Double o cualquier expresión numérica válida.

Comentarios

Si el valor de número es mayor que 709.782712893, se produce un error. El valor de la constante e es 2.718282 aproximadamente.

Nota   La función Exp complementa la acción de la función Log y a veces se llama antilogaritmo.


Int, Fix (Funciones)

Devuelve un valor del mismo tipo que el que se pasó como parámetro y que contiene la parte entera de un número.

Sintaxis

Int(número)

Fix(número)

El argumento número es un tipo Double o cualquier expresión numérica válida. Si número contiene Null, la función devolverá Null.

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))


Log (Función)

Devuelve un tipo Double que especifica el logaritmo natural de un número.

Sintaxis

Log(número)

El argumento número es un tipo Double o cualquier expresión numérica válida mayor que cero.

Comentarios

El logaritmo natural es el logaritmo en base e. El valor de la constante e es 2.718282 aproximadamente.

Puede calcular logaritmos en base-n para cualquier número x dividiendo el logaritmo natural de x por el logaritmo natural de n de la siguiente manera:

Logn(x) = Log(x) / Log(n)

El ejemplo siguiente ilustra una función personalizada (Function) que calcula logaritmos en base 10:

Static Function Log10(X)

Log10 = Log(X) / Log(10#)

End Function


Randomize (Instrucción)

Inicializa el generador de números aleatorios.

Sintaxis

Randomize [número]

El argumento opcional número es un tipo Variant o cualquier expresión numérica válida.

Comentarios

La instrucción Randomize utiliza número para inicializar el generador de números aleatorios de la función Rnd y le asigna un nuevo valor de semilla. Si omite número, el valor devuelto por el reloj del sistema se usa como el nuevo valor de semilla.

Si no utiliza la instrucción Randomize, la función Rnd (sin argumentos) utiliza el mismo número como valor de semilla la primera vez que se la invoca, usando después como valor de semilla el último número generado.

Nota   Para repetir secuencias de números aleatorios, llame a la función Rnd con un argumento negativo antes de utilizar la instrucció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.


Rnd (Función)

Devuelve un tipo Single que contiene un número aleatorio.

Sintaxis

Rnd[(número)]

El argumento opcional número es un tipo Single o cualquier expresión numérica válida.

Valores devueltos

Si number 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.


Sgn (Función)

Devuelve un tipo Variant (Integer) que indica el signo de un número.

Sintaxis

Sgn(número)

El argumento número puede ser cualquier expresión numérica válida.

Valores devueltos

Si number es	Sgn devuelve
Mayor que cero	1
Igual a cero	0
Menor que cero	-1
Comentarios

El signo del argumento número determina el valor devuelto por la función Sgn.


Sin (Función)

Devuelve un tipo Double que especifica el seno de un ángulo.

Sintaxis

Sin(número)

El argumento número es un tipo Double o cualquier expresión numérica válida que expresa un ángulo en radianes.

Comentarios

La función Sin toma un ángulo y devuelve la razón de dos lados de un triángulo rectángulo. La razón es la longitud del lado opuesto al ángulo dividido por la longitud de la hipotenusa.

El resultado entra dentro del intervalo -1 a 1.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.


Sqr (Función)

Devuelve un tipo Double que especifica la raíz cuadrada de un número.

Sintaxis

Sqr(número)

El número argumento es un tipo Double o cualquier expresión numérica válida mayor o igual a cero.


Tan (Función)

Devuelve un tipo Double que especifica la tangente de un ángulo.

Sintaxis

Tan(número)

El argumento número es un tipo Double o cualquier expresión numérica válida que expresa un ángulo en radianes.

Comentarios

La función Tan toma un ángulo y devuelve la razón de dos lados de un triángulo rectángulo. La razón es la longitud del lado opuesto al ángulo, dividida por la longitud del lado adyacente al ángulo.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.


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)


Add (Ejemplo del método)
Ejemplo del método Add

En este ejemplo se utiliza el método Add para agregar objetos Inst (instancias de una clase llamada Clase1 que contienen una variable de tipo Public llamada NomInstancia) a una colección denominada MisClases. Para ver el funcionamiento, elija el comando Módulo de clase del menú Insertar y declare una variable pública llamada NomInstancia a nivel del módulo de Clase1 (escriba Public NomInstancia) Esta variable contendrá el nombre de cada instancia. Deje el nombre predeterminado Clase1. Copie y pegue el código siguiente en el procedimiento de evento Form_Load:

Dim MyClasses As New Collection	' Crea un objeto Collection.

Dim Num As Integer	' Contador de claves individuales.

Dim Msg

Dim TheName	' Marcador de posición de los nombres que ' introduce el usuario

Do

Dim Inst As New Class1	' Crea nueva instancia de Clase1.

Num = Num + 1	' Incrementa Num, y obtiene nombre.

Msg = " Escriba un nombre para el objeto." & Chr(13) _

 & " Presione Cancelar para ver los nombres de la colección."

TheName = InputBox(Msg, "Dé nombre a los elementos de la colección ")

Inst.InstanceName = TheName	' Pone el nombre en la instancia.

' Si el usuario escribe un nombre, lo agrega a la 	' colección.

If Inst.InstanceName <> "" Then

' Agrega el objeto con nombre a la colección.

MyClasses.Add item := Inst, key := CStr(Num)

End If

' Borra la referencia actual para preparar la siguiente.

Set Inst = Nothing

Loop Until TheName = ""

For Each x In MyClasses

MsgBox x.instancename, , "Nombre de la instancia "

Next


Clear (Ejemplo del método)
Ejemplo del método Clear

Este ejemplo utiliza el método Clear del objeto Err para restablecer las propiedades numéricas del objeto Err a cero y las propiedades de la cadena a cadenas de longitud cero. Si Clear es omitido del siguiente código, se mostrará un cuadro de diálogo con un mensaje de error en cada paso por el bucle (después de que ocurra un error) de lo contrario se generará un error cada vez que ejecute el cálculo. Puede recorrer el código paso a paso para ver el efecto.

Dim Result(10) As Integer	' Declara la matriz de los

' elementos a desbordar fácilmente.

Dim indx

On Error Resume Next	' Omite el error.

Do Until indx = 10

' Genera un error ocasional o almacena el resultado 	' si no hay error.

Result(indx) = Rnd * indx * 20000

If Err.Number <> 0 Then

MsgBox Err, , "Error generado: ", Err.HelpFile, Err.HelpContext

Err.Clear	' Borra las propiedades del objeto Err.

End If

indx = indx + 1

Loop


Item (Ejemplo del método)
Ejemplo del método Item

En este ejemplo se utiliza el método Item para recuperar una referencia a un objeto de una colección. Si Fecha_nacim es un objeto Collection, el código siguiente recupera en él referencias a los objetos que representan las fechas de nacimiento de Cristina Martínez y Juan Martínez, utilizando como argumentos índice “MartinezCristina” y “MartinezJuan”. Observe que la primera llamada especifica explícitamente el método Item, pero la segunda no lo hace. Ambas llamadas funcionan, ya que es el método predeterminado de los objetos Collection. Las referencias asignadas a MartinezCristinaFN y MartinezJuanFN (con Set), pueden utilizarse para acceder a los métodos y propiedades de los objetos especificados. Para ejecutar este código, cree la colección y rellénela al menos con los dos miembros utilizados en el ejemplo.

Dim SmithBillBD As Object

Dim SmithAdamBD As Object

Dim Birthdays

Set SmithBillBD = Birthdays.Item("MartínezCristina")

Set SmithAdamBD = Birthdays("MartínezJuan")


Print (Ejemplo del método)
Ejemplo del método Print

En este ejemplo se utiliza el método Print para mostrar el valor de la variable MiVar MiVar en el Panel interactivo de la Ventana de depuración. Observe que el método Print Print sólo es aplicable a los objetos que pueden mostrar texto.

Dim MyVar

MyVar = "Léame en el Panel interactivo."

Debug.Print MyVar


Raise (Ejemplo del método)
Ejemplo del método Raise

Este ejemplo utiliza el método Raise del objeto Err para generar un error con un objeto Automation escrito en Visual Basic. Utilice el tipo de programación Id MiProy.MiObjeto.

Const MiContenxId = 1010407	' Define una constante para la Identificación del contexto.

Function TestNomb(ActualNomb, NueNomb)

If Instr(NueNomb, "bob") Then	' Comprueba la validación del nuevo nombre.

' Aumenta la excepción

Err.Raise vbObjectError + 27, "MiProy.MiObjeto", _

"No se permite el nombre ""bob""","c:\MiProy\MiAyuda.Hlp", _

MiContextId

End If

End Function


Remove (Ejemplo del método)
Ejemplo del método Remove

En este ejemplo se ilustra el uso del método Remove para quitar objetos de un objeto Collection, MisClases. El código siguiente quita el objeto con índice 1 en cada iteración del bucle.

Dim Num, MisClases

For Num = 1 To MisClases.Count

MisClases.Remove 1	' Quita el primer objeto en cada bucle,

' hasta que no 	quedan objetos

' en la colección.

Next Num


Add (Método)

Agrega un miembro a un objeto Collection.

Sintaxis

objeto.Add item, key, before, after

La sintaxis del método Add consta del calificador de objeto y los argumentos con nombre siguientes:

Parte	Descripción
objeto	Requerido. Una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.
item	Requerido. Una expresión de cualquier tipo que especifica el miembro que se va a agregar a la colección.
key	Opcional. Una expresión de cadena única que especifica una cadena clave para utilizarla en lugar de un índice posicional al tener acceso a un miembro de la colección.
before	Opcional. Expresión que especifica una posición relativa en la colección. El miembro a agregar se colocará en la colección antes del miembro identificado por el argumento argumento before. Si es una expresión numérica, before debe ser un número entre 1 y el valor de la propiedad Count de la colección. Si es una expresión de cadena, before debe corresponder al argumento key especificado al agregar a la colección el miembro al que se hace referencia. Es posible especificar posiciones con before o con after, pero no con ambos.
after	Opcional. Expresión que especifica una posición relativa en la colección. El miembro que se va a agregar se colocará en la colección después del miembro identificado por el argumento after. Si es numérico, after debe ser un número entre 1 y el valor de la propiedad Count de la colección. Si es una cadena, after debe corresponder al argumento key especificado al agregar a la colección el miembro al que se hace referencia. Es posible especificar posiciones con before o con after, pero no con ambos.
Comentarios

Siempre que el argumento before o after sea una expresión de cadena o numérica, se debe referir a un miembro existente de la colección; de lo contrario ocurrirá un error.

También ocurre un error si una key especificada duplica la key de un miembro existente de la colección.


Clear (Método)

Borra todas las propiedades establecidas del objeto Err.

Sintaxis

objeto.Clear

El objeto es siempre el objeto Err.

Comentarios

Use Clear para borrar explícitamente el objeto Err después de controlar un error, por ejemplo, cuando ha establecido el tratamiento diferido de un error con On Error Resume Next. Se llama automáticamente al método Clear después de ejecutar cualquiera de estas instrucciones:

•	Cualquier tipo de instrucción Resume

•	Exit Sub, Exit Function, Exit Property

•	Cualquier instrucción On Error

Nota   La estructura On Error Resume Next es preferible a On Error GoTo al controlar errores generados durante el acceso a otros objetos. Comprobar Err después de cada interacción con un objeto elimina la ambigüedad sobre a qué objeto se tiene acceso mediante código. Puede saber qué objeto ha puesto el error en Err.Number, así como qué objeto ha generado el error (el objeto especificado en Err.Source).


Item (Método)

Devuelve un miembro específico de un objeto Collection al indicar su posición o su clave.

Sintaxis

objeto.Item(índice)

La sintaxis del método Item consta del calificador de objeto y el argumento siguientes:

Parte	Descripción
objeto	Requerido. Una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.
índice	Requerido. Una expresión que especifica la posición de un miembro de la colección. Si es una expresión numérica, índice debe ser un número entre 1 y el valor de la propiedad Count de la colección. Si es una expresión de cadena, índice debe corresponder al valor especificado en el argumento key al agregar a la colección el miembro al que se hace referencia.
Comentarios

Si el valor indicado como índice no coincide con ningún miembro existente de la colección, se producirá un error.

El método Item es el predeterminado de las colecciones. Por tanto, las siguientes líneas de código son equivalentes:

Print MiColección(1)

Print MiColección.Item(1)


Print (Método)

Imprime texto en el panel Inmediato de la ventana Depuración.

Sintaxis

objeto.Print [listasalida]

La sintaxis del método Print consta del calificador de objeto y el argumento siguientes:

Parte	Descripción
objeto	Opcional. Una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.
listasalida	Opcional. Expresión o lista de expresiones que se van a imprimir. Si se omite, se imprimirá una línea en blanco.
El argumento listasalida tiene la sintaxis y los componentes siguientes:

{Spc(n) | Tab(n)} expresión, posicióncarácter

Parte	Descripción
Spc(n)	Opcional. Se utiliza para insertar caracteres de espacio en la salida, donde n es el número de espacios que se vana insertar.
Tab(n)	Opcional. Se utiliza para situar el punto de inserción en un número de columna absoluto, donde n es el número de columna. Utilice Tab sin argumentos para situar el punto de inserción al principio de la siguiente zona de impresión.
expresión	Opcional. Expresión numérica o expresión de cadena que se va a imprimir.
posicióncarácter	Opcional. Especifica el punto de inserción del carácter siguiente. Utilice un punto y coma (;) para situar el punto de inserción inmediatamente a continuación del último carácter mostrado. Utilice Tab(n) para situar el punto de inserción en un número de columna absoluto, o Tab sin argumentos para situarlo al principio de la siguiente zona de impresión. Si se omite posicióncarácter, el carácter siguiente se imprimirá en la línea siguiente.
Comentarios

Las expresiones múltiples pueden separarse con un espacio o con un punto y coma.

Todos los datos impresos en el panel Inmediato tienen el formato adecuado según el separador decimal correspondiente a la configuración regional establecida en su sistema. Las palabras clave se muestran en el idioma correspondiente a la aplicación host.

Para los datos de tipo Boolean se imprime Verdadero o Falso. Las palabras clave True y False se traducen como corresponda a la configuración regional especificada en la aplicación host.

Los datos de tipo Date se escriben con el formato de fecha corta estándar que reconoce el sistema. Cuando el componente de fecha o de hora falta os es cero, sólo se escribirá el dato que se proporcione.

No se escribirá nada si los datos de listasalida son Empty. Sin embargo, si listasalida es Null, en la salida se indicará Nulo. De nuevo, la palabra clave Null se traduce en la salida como corresponda.

Para los datos de error, la salida es Error códigoError. La palabra clave Error se traduce en la salida como corresponda.

Es necesario objeto si el método se usa fuera de un módulo que tenga un espacio de presentación predeterminado. Por ejemplo, sucede un error si se llama al método desde un módulo estándar sin especificar un objeto, pero si se llama desde un módulo de formulario, listasalida se muestra en el formulario.

Nota   Puesto que el método Print imprime normalmente con caracteres de espacio proporcional, es importante recordar que no hay relación alguna entre el número de caracteres impresos y el número de columnas de ancho fijo que ocupan tales caracteres. Por ejemplo, una letra ancha, como “W", ocupa más de una columna de ancho fijo, mientras que una letra estrecha, como “I", ocupa menos. Para tener en cuenta los casos en los que se utilizan caracteres con un ancho mayor que la media, deberá asegurarse de que las columnas de las tablas se encuentren lo bastante lejos unas de otras. Como alternativa, puede utilizar en la impresión una fuente de ancho fijo (como Courier) para hacer que cada carácter utilice sólo una columna.


Raise (Método)

Genera un error en tiempo de ejecución.

Sintaxis

objeto.Raise number, source, description, helpfile, helpcontext

El método Raise tiene el calificador de objeto y los argumentos con nombre siguientes:

Argumento	Descripción
objeto	Requerido. Siempre el objeto Err.
number	Requerido. Entero de tipo Long que identifica la naturaleza del error. Los errores de Visual Basic (tanto los definidos por Visual Basic como los definidos por el usuario) se encuentran entre 0 y 65535. Al establecer en la propiedad Number su propio código de error en un módulo de clase, agrega su código de error a la constante vbObjectError. Por ejemplo, para generar el número de error 1050, asigne vbObjectError + 1050 a la propiedad Number.
source	Opcional. Expresión de cadena que indica el objeto o la aplicación que generó el error. Al establecer esta propiedad para un objeto, use el formato proyecto.clase. Si no especifica nada, se utilizará el identificador programático del proyecto de Visual Basic actual.
description	Opcional. Expresión de cadena que describe el error. Si no se especifica, se examina el valor de Number. Si se corresponde con un código de error en tiempo de ejecución de Visual Basic, se utiliza para Description la cadena que devolvería la función Error. Si no hay correspondencia con ningún error de Visual Basic, en Number se utiliza “Error definido por la aplicación o el objeto".
helpfile	Opcional. Ruta reconocida del archivo de Ayuda de Microsoft Windows en el que se encuentra la información sobre el error. Si no se especifica, Visual Basic utilizará la unidad, ruta y nombre reconocidos del archivo de Ayuda de Visual Basic.
helpcontext	Opcional. Identificador de contexto que especifica el tema del archivo indicado en HelpFile que contiene la información de ayuda del error. Si se omite, se utilizará el identificador de contexto del archivo de Ayuda de Visual Basic correspondiente al valor de la propiedad Number, si tal identificador existe.
Comentarios

Todos los argumentos son opcionales, excepto number. Sin embargo, si utiliza Raise sin especificar algunos argumentos, y los valores de las propiedades del objeto Err no se han borrado, dichos valores se conservarán para el error actual.

Raise se utiliza para generar errores en tiempo de ejecución y puede usarse en lugar de la instrucción Error. Raise es útil para generar errores al escribir módulos de clase, ya que el objeto Err proporciona más información de la que ofrecen los errores generados con la instrucción Error. Por ejemplo, con el método Raise puede especificarse el origen del error en la propiedad Source, puede invocar Ayuda en pantalla sobre el error, etc.


Remove (Método)

Quita un miembro de un objeto Collection.

Sintaxis

objeto.Remove índice

La sintaxis del método Remove cuenta con el calificador de objeto y los argumentos siguientes:

Parte	Descripción
objeto	Requerido. Una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.
índice	Requerido. Una expresión que especifica la posición de un miembro de la colección. Si se trata de una expresión numérica, índice debe estar comprendido entre 1 y el valor de la propiedad Count de la colección. Si es una expresión de cadena, índice debe corresponder al valor del argumento key especificado al agregar a la colección el miembro al que se hace referencia.
Comentarios

Si el valor indicado como índice no coincide con ningún miembro existente en la colección, se produce un error.


AppActivate (Ejemplo de la instrucción)
Ejemplo de la instrucción AppActivate

En este ejemplo se ilustran los distintos usos de la instrucción AppActivate para activar una ventana de una aplicación. Las instrucciones Shell suponen que las aplicaciones están en las rutas especificadas. En Macintosh, se puede utilizar la función MacID para especificar la identidad de la aplicación, en lugar del nombre de ésta. La instrucción AppActivate está disponible para el sistema operativo de Macintosh System 7.0 o posterior.

Dim MyAppID, ReturnValue

' En Microsoft Windows:

AppActivate "Microsoft Word"	' Se activa Microsoft

' Word.

' AppActivate puede también utilizar el valor devuelto ' por la función Shell.

MyAppID = Shell("C:\WORD\WINWORD.EXE", 1)' Se ejecuta Microsoft Word.

AppActivate MyAppID	' Se activa Microsoft

' Word.

' También se puede utilizar el valor devuelto por la función Shell.

ReturnValue = Shell("c:\EXCEL\EXCEL.EXE",1)' Se ejecuta Microsoft Excel.

AppActivate ReturnValue	' Se activa Microsoft

' Excel.


Beep (Ejemplo de la instrucción)
Ejemplo de la instrucción Beep

En este ejemplo se utiliza la instrucción Beep para emitir tres sonidos consecutivos por el altavoz del PC.

Dim I

For I = 1 To 3	' Realiza un bucle 3 veces.

Beep	' Emite un tono.

Next I


Command (Ejemplo de la función)
Ejemplo de la función Command

Este ejemplo utiliza la función Command para obtener los argumentos de la línea de comandos en una función que los devuelva en una matriz contenedora Variant.

Function ObtenerLíneaComando(Optional MaxArgs)

'Declara las variables.

Dim C, LíneaComando, LonLínComando, ArgIn, I, NúmArgs

'Ver si MaxArgs está.

If IsMissing(MaxArgs) Then MaxArgs = 10

'Crea una matriz del tamaño correcto.

ReDim ArgArray(MaxArgs)

NúmArgs = 0: ArgIn = False

'Obtiene los argumentos de la línea de comandos.

LíneaComando = Command()

LonLínComando = Len(LíneaComando)

'Recorre la línea de comando carácter a carácter

'a la vez.

For I = 1 To LonLínComando

C = Mid(LínComando, I, 1)

'Comprueba espacio o tabulación.

If (C <> " " And C <> vbTab) Then

'Ningún espacio o tabulación.

'Comprueba si está en el argumento.

If Not ArgIn Then

'Empieza el nuevo argumento.

'Comprueba para más argumentos.

If NúmArgs = MaxArgs Then Exit For

NúmArgs = NúmArgs + 1

ArgIn = True

End If

'Agrega el carácter al argumento actual.

ArgArray(NúmArgs) = ArgArray(NúmArgs) + C

Else

'Encontró un espacio o tabulador.

'Establece ArgIn a False.

ArgIn = False

End If

Next I

'Redimensiona la matriz lo suficiente para contener los argumentos.

ReDim Preserve ArgArray(NúmArgs)

'Devuelve la matriz en nombre de la función.

ObtenerLíneaComando = ArgArray()

End Function


InputBox (Ejemplo de la función)
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 elige Aceptar o presiona ENTRAR. Si el usuario elige 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)


MsgBox (Ejemplo de la función)
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


SendKeys (Ejemplo de la instrucción)
Ejemplo del instrucción SendKeys

En este ejemplo se utiliza la función Shell para ejecutar la aplicación Calculadora incluida en Microsoft Windows; luego se utiliza la instrucción SendKeys para enviar pulsaciones de teclas para sumar algunos números y finalmente se termina la aplicación Calculadora. La instrucción SendKeys no está disponible en Macintosh. (Para ver el ejemplo, péguelo en un procedimiento y a continuación, ejecute el procedimiento. Puesto que AppActivate cambia el enfoque a la aplicación Calculadora, no puede avanzar paso a paso por el código).

Dim ReturnValue, I

ReturnValue = Shell("CALC.EXE", 1)	' Ejecuta la Calculadora.

AppActivate ReturnValue 	' Activa la Calculadora.

For I = 1 To 100	' Establece un bucle contador.

SendKeys I & "{+}", True	' Envía pulsaciones a la Calculadora

Next I	' para sumar cada valor de I.

SendKeys "=", True	' Obtiene el total general.

SendKeys "%{F4}", True	' Envía ALT+F4 para cerrar la Calculadora.


AppActivate (Instrucción)

Activa una ventana de aplicación.

Sintaxis

AppActivate title[, wait]

La sintaxis de la instrucción AppActivate consta de estos argumentos con nombre:

Parte	Descripción
title	Requerido. Expresión de cadena que especifica el título de la barra de título de la ventana de aplicación que desea activar. Además, es posible utilizar el Id de tarea devuelto por la función Shell en lugar del argumento title para activar una aplicación.
wait	Opcional. Valor Boolean que especifica si la aplicación que hace la llamada tiene el enfoque antes de activar otra. Si especifica False (predeterminado), se activa inmediatamente la aplicación especificada, aunque la aplicación que hace la llamada no tenga el enfoque. Si se especifica True, la aplicación que hace la llamada espera hasta que tenga el enfoque y luego activa la aplicación especificada.
Comentarios

La instrucción AppActivate cambia el enfoque a la aplicación o ventana especificada, pero no la maximiza o minimiza. El enfoque se desplaza de la ventana de aplicación activada cuando el usuario ejecuta alguna acción que cambia el enfoque o que cierra la ventana. Se utiliza la función Shell para iniciar una aplicación y establecer el estilo de la ventana.

Para determinar qué aplicación se va a activar, se compara title con la cadena de título de cada aplicación que hay en ejecución. Si no se encuentra una correspondencia exacta, se activa la aplicación cuya cadena título comience por title. Si hay más de una instancia de la aplicación cuyo nombre es title, se activa cualquiera de ellas, de forma arbitraria.


Beep (Instrucción)

Emite un sonido por el altavoz del equipo.

Sintaxis

Beep

Comentarios

La frecuencia y duración del sonido que se emite depende del hardware y el software del sistema, que puede variar de un equipo a otro.


Command (Función)

Devuelve la parte del argumento de la línea de comando utililizada para ejecutar Microsoft Visual Basic o un programa ejecutable desarrollado con Visual Basic.

Sintaxis

Command

Comentarios

Cuando Visual Basic es ejecutado desde la línea de comando, una parte de la línea de comando que sigue a /cmd es pasada al programa como el argumento de la línea de comando. En el siguiente ejemplo, argslíneacomando representa la información del argumento devuelto por la función Command.

VB /cmd argslíneacomando

Para aplicaciones desarrolladas con Visual Basic y compiladas para obtener un archivo .exe, Command devuelve unos argumentos que aparecen después del nombre de la aplicación en la línea de comandos. Por ejemplo:

MiApl argslíneacomando

Para encontrar cómo los argumentos de la línea de comando pueden ser cambiados en la interfaz de usuario de la aplicación que está utilizando, busque el la Ayuda "argumentos de la línea de comandos."


InputBox (Función)

Muestra un mensaje en un cuadro de diálogo, espera que el usuario escriba un texto o haga clic en un botón y devuelve un tipo String con el contenido del cuadro de texto.

Sintaxis

InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context])

La sintaxis de la función InputBox consta de estos argumentos con nombre:

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 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.


MsgBox (Función)

Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un tipo Integer correspondiente al botón elegido por el usuario.

Sintaxis

MsgBox(prompt[, buttons][, title][, helpfile, context])

La sintaxis de la función MsgBox consta de estos argumentos con nombre:

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

El argumento buttons tiene estos 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.
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 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.


SendKeys (Instrucción)

Envía una o más pulsaciones de teclas a la ventana activa, como si se hubieran presionado desde el teclado.

Sintaxis

SendKeys string[, wait]

La sintaxis de la instrucción SendKeys consta de estos argumentos con nombre:

Parte	Descripción
string	Requerido. Expresión de cadena que especifica las pulsaciones de teclas que se van a enviar.
wait	Opcional. Valor Boolean que indica el modo de espera. Si este valor es False (predeterminado), se devuelve el control al procedimiento inmediatamente después de enviar las pulsaciones. Si es True, se procesan las pulsaciones antes de devolver el control al procedimiento.
Comentarios

Cada tecla está representada por uno o más caracteres. Para especificar un único carácter del teclado, se utiliza el carácter propiamente dicho. Por ejemplo, para representar la letra A, utilice "A" como string. Si se desea representar más de un carácter, agregue cada carácter adicional al que lo precede. Para representar las letras A, B y C, utilice "ABC" para string.

El signo más (+), el símbolo de intercalación (^), el símbolo de porcentaje (%), la tilde (~) y los paréntesis ( ) tienen significados especiales para SendKeys. Para especificar uno de estos caracteres, debe incluirlo entre llaves. Por ejemplo, para especificar el signo más, utilice {+}. Los corchetes ([ ]) no tienen un significado especial para SendKeys, pero debe escribirlos entre llaves porque, en otras aplicaciones, lo tienen y eso puede tener importancia cuando se produce un intercambio dinámico de datos (DDE). Para especificar llaves, utilice {{} y {}}.

Para especificar caracteres que no se muestran al presionar una tecla (como por ejemplo ENTRAR o TAB) y teclas que representan acciones, en lugar de caracteres, se utilizan los siguientes códigos:

Tecla	Código
RETROCESO	{BACKSPACE}, {BS}o {BKSP}
INTER	{BREAK}
BLOQ MAYÚS	{CAPSLOCK}
SUPR	{DELETE} o {DEL}
FLECHA ABAJO	{DOWN}
FIN	{END}
ENTRAR	{ENTER}o ~
ESC	{ESC}
AYUDA	{HELP}
INICIO	{HOME}
INSERT	{INSERT} o {INS}
FLECHA IZQUIERDA	{LEFT}
BLOQ NÚM	{NUMLOCK}
RE PÁG	{PGDN}
AV PÁG	{PGUP}
IMPR PANT	{PRTSC}
FLECHA DERECHA	{RIGHT}
BLOQ DESPL	{SCROLLLOCK}
TAB	{TAB}
FLECHA ARRIBA	{UP}
F1	{F1}
F2	{F2}
F3	{F3}
F4	{F4}
F5	{F5}
F6	{F6}
F7	{F7}
F8	{F8}
F9	{F9}
F10	{F10}
F11	{F11}
F12	{F12}
F13	{F13}
F14	{F14}
F15	{F15}
F16	{F16}
Para especificar teclas con cualquier combinación de las teclas MAYÚS, CTRL y ALT, introduzca delante del código de la tecla uno o más de los siguientes códigos:

Tecla	Código
MAYÚS	+
CTRL (CONTROL)	^
ALT	%
Para especificar que se debe mantener presionada una combinación cualquiera de las teclas MAYÚS, CTRL y ALT mientras se presionan otras teclas, ponga entre paréntesis el código relativo a esas teclas. Por ejemplo, para especificar que se debe mantener presionada MAYÚS mientras se presionan las teclas E y C, utilice "+(EC)". Para especificar que se debe mantener presionada MAYÚS mientras se presiona la tecla E y que luego se debe presionar C, sin presionar MAYÚS, utilice "+EC".

Para especificar pulsaciones repetidas de teclas, utilice el formato {tecla número}. Debe dejar un espacio en blanco entre tecla y número. Por ejemplo, {LEFT 42} significa que se debe presionar la tecla FLECHA IZQUIERDA 42 veces; {h 10} significa que se debe presionar la tecla h 10 veces.

Nota   No puede utilizar SendKeys para enviar pulsaciones de teclas a aplicaciones que no estén diseñadas para funcionar con Microsoft Windows. SendKeys puede enviar también la pulsación de la tecla IMPR PANT (PRTSC) a cualquier aplicación.


Juego de caracteres (0–127)

0	•	32	[espacio]	64	@	96	`
1	•	33	!	65	A	97	a
2	•	34	"	66	B	98	b
3	•	35	#	67	C	99	c
4	•	36	$	68	D	100	d
5	•	37	%	69	E	101	e
6	•	38	&	70	F	102	f
7	•	39	'	71	G	103	g
8	* *	40	(	72	H	104	h
9	* *	41	)	73	I	105	i
10	* *	42	*	74	J	106	j
11	•	43	+	75	K	107	k
12	•	44	,	76	L	108	l
13	* *	45	-	77	M	109	m
14	•	46	.	78	N	110	n
15	•	47	/	79	O	111	o
16	•	48	0	80	P	112	p
17	•	49	1	81	Q	113	q
18	•	50	2	82	R	114	r
19	•	51	3	83	S	115	s
20	•	52	4	84	T	116	t
21	•	53	5	85	U	117	u
22	•	54	6	86	V	118	v
23	•	55	7	87	W	119	w
24	•	56	8	88	X	120	x
25	•	57	9	89	Y	121	y
26	•	58	:	90	Z	122	z
27	•	59	;	91	[	123	{
28	•	60	<	92	\	124	|
29	•	61	=	93	]	125	}
30	•	62	>	94	^	126	~
31	•	63	?	95	_	127	•
•	Microsoft Windows no admite estos caracteres.

* *	Los valores 8, 9, 10 y 13 se convierten a retroceso, tabulador, avance de línea y retorno de carro, respectivamente. No tienen ninguna representación gráfica, pero dependiendo de la aplicación, pueden influir en la presentación visual del texto.


IMEStatus (Función)

Devuelve un tipo Integer que especifica el modo actual del Editor de método de entrada (Input Method Editor o IME) de Microsoft Windows; sólo disponible en las versiones del Lejano Oriente.

Sintaxis

IMEStatus

Valores devueltos

Los valores devueltos para la configuración regional japonesa son los siguientes:

Constante	Valor	Descripción
vbIMENoOP	0	No hay IME instalado
vbIMEOn	1	IME activo
vbIMEOff	2	IME inactivo
vbIMEDisable	3	IME deshabilitado
vbIMEHiragana	4	Caracteres Hiragana de doble byte (DBC)
vbIMEKatakanaDbl	5	Katakana (DBC)
vbIMEKatakanaSng	6	Caracteres Katakana de un solo byte (SBC)
vbIMEAlphaDbl	7	DBC alfanumérico
vbIMEAlphaSng	8	SBC alfanumérico
Los valores devueltos para la configuración regional china (tradicional y simplificada) son los siguientes:

Constante	Valor	Descripción
vbIMENoOP	0	No hay IME instalado
vbIMEOn	1	IME activo
vbIMEOff	2	IME inactivo
Para la configuración regional coreana, los cinco primeros bits devueltos se establecen de la siguiente forma:

Bit	Valor	Descripción	Valor	Descripción
0	0	No hay IME instalado	1	IME instalado
1	0	IME inhabilitado	1	IME habilitado
2	0	IME modo inglés	1	Modo Hangeul
3	0	Modo Banja (SB)	1	Modo Junja (DB)
4	0	Modo normal	1	Modo de conversión Hanja


Imposible ejecutar código en modo de ruptura
Imposible ejecutar código en modo de interrupción

El modo de interrupción se produce cuando se suspende la ejecución del código. Este error tiene las siguientes causas y soluciones:

•	Ha intentado ejecutar código desde el cuadro de diálogo Macro pero Visual Basic ya está ejecutando código, aunque esté interrumpido en modo de interrupción.

Continúe ejecutando el código actual o termine su ejecución antes de ejecutar el código del cuadro de diálogo Macro. Puede haber entrado en modo de interrupción sin saberlo, por ejemplo si se produce un error de sintaxis o error en tiempo de ejecución en su código. Puede corregir el error y elegir Continuar, en lugar de volver al cuadro de diálogo Macro y reiniciarla.

Para obtener más información, seleccione el elemento y presione F1.


Imposible llamar a una función friend de un objeto que no sea una instancia de una clase
Imposible llamar a un procedimiento friend de un objeto que no tiene una instancia de la clase definida (Error 97)

Un procedimiento Friend puede llamarse desde módulos que estén fuera de la clase, pero son parte del proyecto donde está definida la clase. Este error tiene las siguientes causas y soluciones:

•	Intentó llamar al procedimiento Friend de una clase, pero aunque la variable de referencia es del tipo adecuado, señala a una instancia que no es una instancia de la clase.

Por ejemplo, esto se puede producir si hay dos clases, claseics  y clasey (que implementa clasey), pero se equivocó al asignar la instancia de clasey a la instancia de claseics.

Para obtener más información, seleccione el elemento y presione F1.


Imposible salir del modo de diseño porque no se puede crear el control
Imposible salir del modo de diseño porque no se pudo crear el control.

Antes de que pueda salir del modo de diseño, debe crear las instancias de todos los objetos. Este error tiene las siguientes causas y soluciones:

•	No se puede crear el control especificado en el cuadro de dialogo del mensaje de error.

El estado ejecutable sólo se puede conseguir después de que se creen instancias de todos los objetos y estén conectado de forma apropiada. Asegúrese de que los archivos que necesitan los controles están disponibles antes de intentarlo de nuevo.

Para obtener más información, seleccione el elemento y presione F1.


El objeto no origina eventos de automatización
El objeto no es origen de eventos de Automatización

Un objeto debe proporcionar una interfaz de origen predeterminada para que pueda escribir procedimientos de eventos para esos eventos. Este error tiene las siguientes causas y soluciones:

•	Ha intentado escribir un procedimiento de evento para un evento de un objeto, pero ese evento no está disponible fuera del objeto.

Compruebe la documentación del objeto. Debe existir alguna forma menos directa para tratar con el evento que está interesado.

Para obtener más información, seleccione el elemento  y presione F1.


Operación no permitida en DLL
Operación no permitida en una DLL

En Visual Basic no son legales todas las instrucciones con una biblioteca de vínculos dinámicos (DLL). Este error tiene las siguientes causas y soluciones:

•	Ha intentado crear una DLL desde una clase que contiene una instrucción que no se puede ejecutar desde una DLL.

Compruebe sus clases en las instrucciones que no puedan ejecutarse en una DLL, por ejemplo: End. Elimine estas instrucciones.

Para obtener más información, seleccione el elemento y presione F1.


Definición de tipo Enum externo no válida
Enum externo no válido

Un Enum es un tipo de datos que puede utilizarse para crear grupos de constantes manifiestas relacionadas (llamadas enumeradas). Este error tiene las siguientes causas y soluciones:

•	Utilizó End Enum en un lugar donde no era parte de una definición Enum.

Compruebe el texto que puede estar entre el cuerpo de la definición Enum y el End Enum.

Para obtener más información, seleccione el elemento y presione F1.


Este documento se abrió con Macros deshabilitadas. Si desea Habilitar macros debe cerrar y volver a abrir el documento.
Este documento se abrió con la opción Macros desactivada.

Un aplicación host puede activar o desactivar macros. Este error tiene las siguientes causas y soluciones:

•	Ha abierto el documento con la opción Macros desactivadas.

Cierre el documento y vuelva a abrirlo eligiendo Desactivar macros.

Para obtener más información, seleccione el elemento y presione F1.


El proyecto actual no hace referencia a la biblioteca que contiene este símbolo, predeterminado lo que el símbolo no está defin
No se está haciendo referencia en el proyecto actual a la biblioteca que contiene este símbolo, por lo tanto el símbolo no está definido. ¿Desea agregar una referencia a la biblioteca que lo contiene ahora?

La información de tipos y objetos está contenida en bibliotecas. Este error tiene las siguientes causas y soluciones:

•	Una definición de este símbolo se encuentra en una biblioteca de tipos.

Si desea definir el símbolo de la biblioteca mencionada, haga clic en Aceptar para agregar la referencia a la biblioteca.

Para obtener más información, seleccione el elemento y presione F1.


El objeto no tienen un método Property Let
El objeto no tiene un procedimiento Property Let

No se puede asignar un valor a una propiedad hasta que tenga expuesta un método Property Let. Este error tiene las siguientes causas y soluciones:

•	Ha intentado asignar un valor a una propiedad que no tiene expuesto un método Property Let.

No puede asignar directamente un valor a esta propiedad. Si crea la clase, puede modificar la interfaz exponiendo un método Property Let. Por otra parte, compruebe la documentación de los componentes para determinar si hay un método indirecto para asignar el valor.

Para obtener más información, seleccione el elemento y presione F1.


No hay Ayuda disponible

No todos los errores están asociados con temas de ayuda. Este error tiene las siguientes causas y soluciones:

•	Se ha generado un error para el que no existe tema de ayuda.

Compruebe el archivo Leame. Muchas veces, a través de este archivo se pueden encontrar errores posteriores.

Para obtener más información, seleccione el elemento  y presione F1.


Imposible desactivar eventos de objeto porque el objeto ya está desencadenando el número máximo de eventos que admite
Imposible activar los eventos del objeto, puesto que ya tiene activos eventos con el número máximo admitido de recipientes de eventos. (Error 96)

Cada objeto especifica el número máximo de recipientes simultáneos que pueden activar eventos. Este error tiene las siguientes causas y soluciones:

•	Ha intentado utilizar Set en una variable WithEvents de un control de un formulario.

En este caso no puede utilizar Set en una variable WithEvents , ya que está limitado el número de recipientes para estos eventos.

Para obtener más información, seleccione el elemento y presione F1.


Imposible encontrar el punto de entrada a DLL ~ en ~
Imposible encontrar el punto de entrada de la DLL ~ en ~

Un punto de entrada es el nombre de un procedimiento DLL (o el valor ordinal que representa el procedimiento). Este error tiene las siguientes causas y soluciones:

•	Una biblioteca de tipos que describe de forma incorrecta el punto de entrada, por tener incorrecto el nombre o por especificar el ordinal de forma incorrecta.

Contacte con su distribuidor para conseguir una biblioteca de tipos corregida.

Para obtener más información, seleccione el elemento y presione F1.


Imposible ejecutar el programa especificado

Cuando crea código nativo ejecutable, es necesario ejecutar algunos programas adicionales. Este error tiene las siguientes causas y soluciones:

•	La memoria o los recursos del sistema no fueron suficientes para ejecutar el generador de código o el vinculador.

Cierre el mayor número de aplicaciones posibles para liberar memoria y otros recursos del sistema.

•	Visual Basic no se instaló correctamente.

Vuelva a instalar Visual Basic.

Para obtener más información, seleccione el elemento y presione F1.


Recursos duplicados con el mismo tipo y nombre
Recurso duplicado con el mismo tipo y nombre

Un archivo de recursos de Windows contiene habitualmente mapas de bits, cadenas de texto y otros datos parecidos utilizados por la aplicación. Este error tiene las siguientes causas y soluciones:

•	El archivo de recursos de Windows que está intentando utilizar en el proyecto contiene dos o más recursos con el mismo tipo y nombre o el archivo contiene un recurso que Visual Basic crea automáticamente.

Utilice otro archivo de recursos o vuelva a crear el recurso no válido y elimine uno de los recursos duplicados.

Para obtener más información, seleccione el elemento y presione F1.


Activate, Deactivate (Eventos)

El evento Activate se produce cuando un objeto pasa a ser la ventana activa. El evento Deactivate se produce cuando un objeto ya no es la ventana activa.

Sintaxis

Private Sub objeto_Activate()

Private Sub objeto_Deactivate()

El marcador de posición objeto representa una expresión de objeto que que da como resultado un objeto incluido en la lista Aplicable a.

Comentarios

Un objeto puede pasar a activo utiolizando el método Show en código.

El evento Activate se puede producir sólo cuando un objeto es visible. Un UserForm cargado con Load no es visible a menos que utilice el método Show.

Los eventos Activate y Deactivate se producen sólo cuando mueve el enfoque dentro de una aplicación. Mover el enfoque a o desde un objeto en otra aplicación no activa ningún evento.

El evento Deactivate no se produce cuando descarga un objeto.


Initialize (Evento)

Se produce después de que se carga un objeto, pero antes de que se muestre.

Sintaxis

Private Sub object_Initialize()

El marcador de posición objeto representa una expresión de objeto que que da como resultado un objeto incluido en la lista Aplicable a.

Comentarios

El evento Initialize se utiliza normalmente para prepararse a utilizar una aplicación o un objeto UserForm. Se asignan unos valores iniciales a las variables y se pueden mover o cambiar el tamaño de los controles apar adecuarlos a los datos de inicialización.


QueryClose (Evento)

Se produce antes de que se cierra un objeto UserForm.

Sintaxis

Private Sub UserForm_QueryClose(cancelar As Integer, modocerrar As Integer)

La sintaxis del evento QueryClose consta de las siguientes partes:

Parte	Descripción
cancelar	Un entero. Establecer este argumento a cualquier valor distinto de 0 detiene el evento QueryClose en todos los formularios de usuario cargados y evita que se cierre el UserForm y la aplicación.
modocerrar	Un valor o una constante que indica la causa del evento QueryClose.
Valores devueltos

El argumento modocerrar devuelve los siguientes valores:

Constante	Valor	Descripción
vbFormControlMenu	0	El usuario ha elegido el comando Close del menú Control en el UserForm.
vbFormCode	1	Se llamó a la instrucción Unload desde código.
vbAppWindows	2	Se termina la actual sesión del entorno operativo de Windows.
vbAppTaskManager	3	El Administrador de tareas de Windows está cerrando la aplicación.
Estas constantes están enumeradas en la biblioteca de objetos en el Examinador de objetos de Visual Basic for Applications. Observe que también se especifica vbFormMDIForm en el Examinador de objetos, pero todavía no está admitido.

Comentarios

Este evento se utiliza normalmente para asegurarse que no hay tareas no finalizadas en los formularios de usuario incluidos en una aplicación antes de que se cierre. Por ejemplo, si un usuario no ha guardado datos nuevos en un UserForm, la aplicación puede comunicar al usuario que guarde los datos.

Cuando se cierra una aplicación, puede utilizar el procedimiento de evento QueryClose para establecer la propiedad Cancel a True, deteniendo el procesode cierre.


Resize (Evento)

Se produce cuando un objeto se muestra primero o cuando el estado de la ventana de un objeto cambia, por ejemplo, cuando se minimiza o restaura un objeto UserForm.

Sintaxis

Private Sub UserForm_Resize()

Private Sub objeto_Resize(alto As Single, ancho As Single)

La sintaxis del evento Resize consta de las siguientes partes:

Parte	Descripción
objeto	Una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.
alto	Número que especifica el nuevo alto del formulario del usuario.
ancho	Número que especifica el nuevo ancho del formulario del usuario.
Comentarios

Utilice el procedimiento de evento Resize para mover o cambiar el tamaño de controles cuando se cambia el tamaño del objeto UserForm primario. También puede utilizar este procedimiento de evento para volver a calcular variables o propiedades.


Terminate (Evento)

Se produce cuando se quitan de memoria todas las referencias a una instancia de un objeto estableciendo todas las variables que hacen referencia al objeto a Nothing o cuando la última referencia al objeto sale del alcance.

Sintaxis

Private Sub objeto_Terminate( )

El marcador de posición objeto representa una expresión de objeto que que da como resultado un objeto incluido en la lista Aplicable a.

Comentarios

El evento Terminate se produce después de que se descarga el objeto. El evento Terminate no se activa si se quitan de memoria las instancias del UserForm o la clase porque la aplicación finaliza de forma anormal. Por ejemplo, si la aplicación llama a la instrucción End antes de quitar de memoria todas las instancias existentes de la clase o del UserForm, el evento Terminate no se activa para esa clase o UserForm.


Activate y Deactivate (Ejemplo de los eventos)
Ejemplo de los eventos Activate y Deactivate

El siguiente código utiliza dos UserForms: UserForm1 y UserForm2. Copie estos procedimientos en el módulo UserForm1, después agregue UserForm2. Se crea el título UserForm1’s en el procedimiento de evento Activate. Cuando el usuario hace clic en el área de cliente de UserForm1, se carga UserForm2 y se muestra, desencadenando el evento Deactivate de UserForm1, el cambio en los títulos.

' Evento Activate para UserForm1

Private Sub UserForm_Activate()

    UserForm1.Caption = "Haga clic en mi área de cliente"

End Sub

' Evento Click para UserForm1

Private Sub UserForm_Click()

    Load UserForm2

    UserForm2.StartUpPosition = 3

    UserForm2.Show

End Sub

' Evento Deactivate para UserForm1

Private Sub UserForm_Deactivate()

    UserForm1.Caption = "¡Sólo he perdido el enfoque!"

    UserForm2.Caption = "El enfoque sólo ha dejado UserForm1 y viene hacia mí"

End Sub


Initialize (Ejemplo del evento)
Ejemplo del evento Initialize

El siguiente ejemplo supone que hay dos UserForms en un programa. En el evento Initialize de UserForm1, se carga UserForm2 y se muestra. Cuando el usuario hace clic en UserForm2, está oculto y aparece UserForm1. Cuando hace clic en UserForm1, se vuelve a mostrar UserForm2.

' Este es el procedimiento de evento Initialize para ' ' UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Este es el evento Click de UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Este es el evento Click para UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


QueryClose (Ejemplo del evento)
Ejemplo del evento QueryClose

El siguiente código obliga al usuario a hacer clic en el área de cliente del UserForm para cerrarlo. Si el usuario intenta utilizar el cuadro Cerrar de la barra de título, se establece el parámetro Cerrar a un valor distinto de cero, evitando la finalización. Sin embargo, si el usuario ha hecho clic en el área de cliente, ModoCerrar tyiene el valor 1 y se completa Unload Me.

Private Sub UserForm_Activate()

    UserForm1.Caption = "¡Debe hacer clic aquí para Click terminar!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, ModoCerrar As Integer)

    'Evita que el usuario cierre con el cuadro Cerrar de la barra de título.

    If ModoCerrar <> 1 Then Cancel = 1

    UserForm1.Caption = "¡El cuadro Cerrar no funciona! ¡Haga clic aquí!"

End Sub


Resize (Ejemplo del evento)
Ejemplo del evento Resize

El siguiente ejemplo utiliza los eventos Activate y Click para mostrar la activación del evento Resize del UserForm. Cuando el usuario hace clic en el área de cliente del formulario, ésta aumenta o se comprime y se especifica una nueva altura en la barra de título. Observe que se utiliza la propiedad Tag para almacenar la altura inicial del UserForm.

' Evento Activate para UserForm1

Private Sub UserForm_Activate()

UserForm1.Caption = "¡Haga clic aquí para hacerme más alto!"

Tag = Height	' Guarda la altura inicial.

End Sub

' Evento Click para UserForm1

Private Sub UserForm_Click()

Dim NuevaAltura As Single

NuevaAltura = Height

' Si el formulario es pequeño, lo hace más alto.

If NuevaAltura = Val(Tag) Then

Height = Val(Tag) * 2

Else

' Si el formulario es alto, lo hace máspequeño.

Height = Val(Tag)

End If

End Sub

' Evento Resize para UserForm1

Private Sub UserForm_Resize()

UserForm1.Caption = "Nueva altura: " & Height & "  " & "¡Haga clic aquí para cambiar mi tamaño!"

End Sub


Terminate (Ejemplo del evento)
Ejemplo del evento Terminate

Los siguientes procedimientos de evento hacen que un UserForm emita un sonido durante unos segundos después de que el usuario haga clic en el área de cliente para cerrar el formulario.

Private Sub UserForm_Activate()

    UserForm1.Caption = "¡Haga clic aquí para cerrarme!"

End Sub

Private Sub UserForm_Click()

  Unload Me

End Sub

Private Sub UserForm_Terminate()

    Dim Count As Integer

    For Count = 1 To 100

        Beep

    Next

End Sub


Hide (Método)

Oculta un objeto, pero no lo descarga.

Sintaxis

objeto.Hide

El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a. Si se omite objeto, se supone que el UserForm con el enfoque es el objeto.

Comentarios

Cuando un objeto está oculto, se quita de la pantalla i la propiedad Visible se establece a False. El usuario no tiene acceso a los controles de un objeto oculto, pero están disponibles por programa para la aplicación que se está ejecutando, para otros procesos que se pueden comunicar con la aplicación mediante intercambio dinámico de datos (DDE) o Automatización y para eventos de control Timer.

Cuando un UserForm está oculto, el usuario no puede interactuar con la aplicación hasta que todo el código en el procedimiento de evento que ocultó el UserForm haya finalizado la ejecución.

Si el UserForm no está cargado cuando se llama al método Hide, el método Hide carga el UserForm pero no lo muestra.


Load (Instrucción)

Carga un objeto, pero no lo muestra.

Sintaxis

Load objeto

El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.

Comentarios

Cuando se carga un objeto, se coloca en memoria, pero no es visible. Utilice el método Show para hacer visible el objeto. Hasta que un objeto no es visible, un usuario no puede interactuar con él. Se produce manipular el objeto por programa en el procedimiento de evento Initialize.


PrintForm (Método)

Envía una imagen bit a bit de un objeto UserForm a la impresora.

Sintaxis

objeto.PrintForm

El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a. Si se omite objeto, se asume que objeto es el UserForm que tiene el enfoque .

Comentarios

PrintForm imprime todos los objetos visibles y los mapas de bits del objeto UserForm . PrintForm también imprime los gráficos agregados a un objeto UserForm.

La impresora utilizada por PrintForm es la determinada por los valores del Panel de control del sistema operativo.


Show (Método)

Muestra un objeto UserForm.

Sintaxis

[objeto.]Show

El objeto opcional es una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a. Si se omite objeto, se supone que objeto es el UserForm asociado con el módulo UserForm activo.

Comentarios

Si el objeto especificado no está cargado cuando se llama al método Show, Visual Basic automáticamente lo carga.

Un UserForm siempre es modal; por tanto, el usuario debe responder antes de utilziar cualquier otra parte de la aplicación. No se ejecuta el código subsiguiente hasta que se oculta o descarga el UserForm.

Aunque están deshabilitados formularios en la aplicación cuando se muestra un UserForm, las otras aplicaciones no lo están.


Unload (Instrucción)

Quita un objeto de memoria.

Sintaxis

Unload objeto

El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a.

Comentarios

Cuando se descarga un objeto, se quita de memoria y se recupera toda la memoria asociada con el objeto. Hasta que se coloca de nuevo en memoria utilizando la instrucción Load, un usuario no puede interactuar con un objeto y el objeto no se puede manipular por programa.


WhatsThisMode (Método)

Hace que el puntero del mouse cambie al puntero Qué es esto y prepara la aplicación para mostrar Ayuda en el objeto seleccionado.

Sintaxis

objeto.WhatsThisMode

El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto incluido en la lista Aplicable a. Si se omite objeto, se supone que el UserForm con el enfoque es el objeto.

Comentarios

Al ejecutar el método WhatsThisMode se coloca la aplicación en el mismo estado que al hacer clic en el botón Qué es esto de la barra de título. El puntero del mouse cambia al puntero Qué es esto. Cuando el usuario hace clic en un objeto, se utiliza la propiedad WhatsThisHelpID del objeto al que se hizo clic para llamar a la Ayuda contextual.


Hide (Ejemplo del método)
Ejemplo del método Hide

El siguiente ejemplo utiliza dos UserForms en un programa. En el evento Initialize de UserForm1, se carga y se muestra UserForm2. Cuando el usuario hace clic en UserForm2, éste se oculta y aparece UserForm1. Cuando se hace clic en UserForm1, se muestra de nuevo UserForm2.

' Procedimiento del evento Initialize de UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Evento Click de UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Evento Click de UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Load (Ejemplo de la instrucción)
Ejemplo de la instrucción Load

En este ejemplo, se carga UserForm2 en el evento Initialize de UserForm1. Realizando clics subsiguientes sobre UserForm2 se descubre UserForm1.

' Procedimiento del evento Initialize de UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Evento Click de UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Evento Click de UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


PrintForm (Ejemplo del método)
Ejemplo del método PrintForm

En el siguiente ejemplo, se imprime el área de cliente del formulario cuando el usuario hace clic sobre él.

' Evento Click de UserForm1

Private Sub UserForm_Click()

UserForm1.PrintForm

End Sub


Show (Ejemplo del método)
Ejemplo del método Show

El siguiente ejemplo utiliza dos UserForms en su programa. En el evento Initialize de UserForm1, se carga y se muestra UserForm2. Cuando el usuario hace clic en UserForm2, éste se oculta y aparece UserForm1. Cuando se hace clic en UserForm1, se muestra de nuevo UserForm2.

' Procedimiento del evento Initialize de UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Evento Click para UserForm2

Private Sub UserForm_Click()

UserForm2.Hide

End Sub

' Evento Click de UserForm1

Private Sub UserForm_Click()

UserForm2.Show

End Sub


Unload (Ejemplo de la instrucción)
Ejemplo de la instrucción Unload

El siguiente ejemplo utiliza dos UserForms en su programa. En el evento Initialize de UserForm1, se carga y se muestra UserForm2. Cuando el usuario hace clic en UserForm2, éste se descarga y aparece UserForm1. Cuando se hace clic en UserForm1, éste se vuelve a descargar.

' Procedure del evento Initialize de UserForm1

Private Sub UserForm_Initialize()

Load UserForm2

UserForm2.Show

End Sub

' Evento Click para UserForm2

Private Sub UserForm_Click()

Unload UserForm2

End Sub

' Evento Click de UserForm1

Private Sub UserForm_Click()

Unload UserForm1

End Sub


WhatsThisMode (Ejemplo del método)
Ejemplo del método WhatsThisMode

El siguiente ejemplo cambia el puntero del mouse al puntero ¿Qué es esto? (signo de interrogación) cuando el usuario hace clic en el UserForm. Si ninguna de las propiedades WhatsThisHelp o WhatsThisButton están establecidas a True en la ventana Propiedades, la siguiente llamada no tendrán efecto.

Private Sub UserForm_Click()

' Cambia el puntero del mouse al signo de interrogación ' ¿Qué es esto?.

WhatsThisMode

End Sub


UserForm Object, UserForms (Colección)

Un objeto UserForm es una ventana o cuadro de diálogo que conforma una parte del interfaza de usuario de una aplicación.

La colección UserForms es una colección cuyos elementos representan cada UserForm cargado en una aplicación. La colección UserForms tiene una propiedad Count, una propiedad Item y un método Add. Count especifica el número de elementos en la colección; Item (el miembro predeterminado) especifica un miembro de la colección específico y Add coloca un nuevo elemento UserForm en la colección.

Sintaxis

UserForm

UserForms[.Item](índice)

El marcador de posición índice representa un entero entre 0 y UserForms.Count – 1. Item es el miembro predeterminado de la colección UserForms y no se necesita especificar.

Comentarios

Puede utilizar la colección UserForms para pasar a través de todos los formularios de usuario cargados en una aplicación. Se identifica con una variable intrínseca global llamada UserForms. Puede transferir UserForms(índice) a una función cuyo argumento está especificado como una clase UserForm.

Los formularios de usuario tienen propiedades que determinan la apariencia, como posición, tamaño y color; y aspectos de su comportamiento.

Los formularios de usuario también pueden responder a eventos iniciados por un usuario o activados por el sistema. Por ejemplo, puede escribir código en el procedimiento de evento Initialize del UserForm para inicializar variables a nivel de módulo antes de mostrar el UserForm.

Además de propiedades y eventos, puede utilizar métodos para manipular formularios de usuario utilizando código. Por ejemplo, puede utilizar el método Move para cambiar la ubicación y tamaño de un UserForm.

Cuando diseña formularios de usuario, establezca la propiedad BorderStyle para definir bordes, y establezca la propiedad Caption para colocar texto e la barra de título. En código, puede utilizar los métodos Hide y Show para hacer invisible o visible un UserForm en tiempo de ejecución.

UserForm es un tipo de datos Object. Puede declarar variables como de tipo UserForm antes de colocarlas en una instancia de un tipo de UserForm declarado en tiempo de diseño. De modo parecido, puede transferir un argumento a un procedimiento como de tipo UserForm. Puede crear instancias múltiples de formularios de usuario en código utilizando la palabra clave New en instrucciones Dim, Set y Static.

Puede tener acceso a la colección de controles en un UserForm utilizando la colección Controls. Por ejemplo, para ocultar todos los controles en un UserForm, utilice un código parecido al siguiente:

For Each Control in UserForm1.Controls

Control.Visible = False

Next Control


Calendar (Propiedad)

Devuelve o establece un valor que especifica el tipo de calendario a utilizar en el proyecto.

Puede utilizar dos valores para Calendar:

Parámetro	Valor	Descripción
vbCalGreg	0	Utiliza el calendario gregoriano (predeterminado).
vbCalHijri	1	Utiliza el calendario Hijri.
Comentarios

Sólo puede establecer la propiedad Calendar por programa. Por ejemplo, para utilizar el calendario Hijri, utilice:

Calendar = vbCalHijri


StartUpPosition (Propiedad)

Devuelve o establece un valor que especifica la posición de un UserForm cuando aparece por primera vez.

Puede utilizar uno de los cuatro valores siguientes para StartUpPosition:

Parámetro	Valor	Descripción
Manual	0	No se especifica valor inicial.
CenterOwner	1	Centrado en el elemento al que pertenece el UserForm.
CenterScreen	2	Centrado en la pantalla.
Windows Default	3	Colocado en la esquina superior izquierda de la pantalla.
Comentarios

Puede establecer la propiedad StartUpPosition por programa o desde la ventana Propiedades.


WhatsThisButton (Propiedad)

Devuelve un valor Boolean que determina si el botón What's This aparece en la barra de título de un objeto UserForm. Esta propiedad es de sólo lectura en tiempo de ejecución.

Comentarios

Los valores de la propiedad WhatsThisButton son:

Valor	Descripción
True	Muestra el botón¿Qué es esto?.
False	(Predeterminado) No muestra el botón ¿Qué es esto?.
Comentarios

La propiedad WhatsThisHelp debe ser True para que la propiedad WhatsThisButton pueda ser True.


WhatsThisHelp (Propiedad)
WhatsThisHelp Property

Devuelve un valor Boolean que determina si la Ayuda contextual utiliza la ventana desplegable proporcionada por la Ayuda de Windows 95 Help o la ventana Ayuda principal. Esta propiedad es de sólo lectura en tiempo de ejecución..

Comentarios

Los valores de la propiedad WhatsThisHelp son:

Valor	Descripción
True	La aplicación utiliza una de las técnicas de acceso ¿Qué es esto? para iniciar la Ayuda de Windows y cargar un tema identificado por la propiedad WhatsThisHelpID.
False	(Predeterminado) La aplicación utiliza la tecla F1 para iniciar la Ayuda de Windows y cargar el tema identificado por la propiedad HelpContextID.
Comentarios

Hay dos técnicas de acceso para proporcionar Ayuda ¿Qué es esto? en una aplicación. La propiedad WhatsThisHelp se debe establecer a True para que funcione una de estas técnicas.

•	Proporcionar un botón ¿Qué es esto? en la barra de título del UserForm utilizando la propiedad WhatsThisButton. El puntero del mouse cambia al estado ¿Qué es esto? (una flecha con un símbolo de interrogación). El tema mostrado se identifica por la propiedad WhatsThisHelpID del control en el usuario hizo clic.

•	Llamar al método WhatsThisMode de un UserForm. Esto produce el mismo comportamiento que hacer clic en el botón ¿Qué es esto? sin utilizar un botón. Por ejemplo, puede llamar a este método desde un comando en un menú en la barra de menús de la aplicación.


StartUpPosition (Ejemplo de la propiedad)
Ejemplo de la propiedad StartUpPosition

El siguiente ejemplo utiliza la instrucción Load y el método Show en el evento Click de UserForm1 para cargar UserForm2 con la propiedad StartUpPosition con el valor 3 (la posición predeterminado de Windows). Después el método Show hace visible UserForm2.

Private Sub UserForm_Click()

Load UserForm2

UserForm2.StartUpPosition = 3

UserForm2.Show

End Sub


Keyword Not Found
Palabra clave no encontrada

La palabra clave you que ha seleccionado no se ha podido encontrar en la Ayuda de Visual Basic. Puede que haya escrito incorrectamente la palabra clave, que haya seleccionado mucho o poco texto o que se haya pedido ayuda sobre una palabra que no es una palabra clave válida de Visual Basic.

La palabra de la que desea ayuda puede estar contenida en una biblioteca de objetos que no está incluida en las referencias. Asegúrese de que las referencias están establecidas con la biblioteca de objetos apropiada en todos los objetos utilizados en su código.

La forma más sencilla de obtener ayuda sobre una palabra clave específica es colocar el punto de inserción en cualquier lugar dentro de la palabra clave sobre la que desea ayuda y presionar F1. No tiene que seleccionar la palabra clave. De hecho, si selecciona sólo un aparte de la palabra clave, o más de una palabra, la Ayuda no encontrará lo que está buscando.

El tema de la propiedad Value se muestra al presionar F1 con el punto de inserción entre "a" y "l" en la palabra clave Value como se muestra en el siguiente ejemplo.

Worksheets(1).Range ("A2").value=3.14159

Para utilizar el cuadro de diálogo de búsqueda incorporado en la Ayuda, haga clic en Contenido del menú Ayuda


Collection (Examinador de objetos)

El módulo Collection contiene los procedimientos utilizados para realizar operaciones en el objeto Collection. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'Collection'.

2	Haga clic en el botón [image].


ColorConstants (Examinador de objetos)

El módulo Color Constants contiene las constantes de color predefinidas. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'ColorConstants'.

2	Haga clic en el botón [image].


Constants (Examinador de objetos)

El módulo Constants contiene diversas constantes. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'Constants'.

2	Haga clic en el botón [image].


Conversion (Examinador de objetos)

El módulo Conversion contiene los procedimientos utilizados para realizar varias operaciones de conversión. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'Conversion'.

2	Haga clic en el botón [image].

Nota   Cuando utilice variables de tipo Variant, no son necesarias las conversiones de tipo de datos explícita.


DateTime (Examinador de objetos)

El módulo DateTime contiene los procedimientos y propiedades utilizadas en operaciones de fecha y hora. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento o propiedad particular

1	Seleccione el procedimiento de la lista de Miembros de 'DateTime'.

2	Haga clic en el [image].


ErrObject (Examinador de objetos)

El módulo ErrObject contiene las propiedades y los procedimientos utilizadas para identificar y controlar errores en tiempo de ejecución utilizando el objeto Err. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento o propiedad particular

1	Seleccione la propiedad o procedimiento de la lista de Miembros de 'ErrObject'.

2	Haga clic en el botón [image].


FileSystem (Examinador de objetos)

El módulo FileSystem contiene los procedimientos utilizados para realizar operaciones que afecten a archivo, directorio o carpeta y del sistema. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'FileSystem'.

2	Haga clic en el botón [image].


Financial (Examinador de objetos)

El módulo Financial contiene los procedimientos utilizados para realizar operaciones financieras. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'Financial'.

2	Haga clic en el botón [image].


Global (Examinador de objetos)

El módulo Global contiene los procedimientos y las propiedades utilizados para realizar operaciones en el objeto UserForm. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento o propiedad particular

1	Seleccione el procedimiento de la lista de Miembros de 'Global'.

2	Haga clic en el botón [image].


Information (Examinador de objetos)

El módulo Information contiene los procedimientos utilizados para devolver, probar o comprobar información. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'Information'.

2	Haga clic en el botón [image].


Interaction (Examinador de objetos)

El módulo Interaction contiene los procedimientos utilizados para interactuar con objetos, aplicaciones y sistemas. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'Interaction'.

2	Haga clic en el botón [image].


KeycodeConstants (Examinador de objetos)

El módulo KeyCodeConstants contiene las constantes de código de tecla predefinidas que se pueden utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'KeyCodeConstants'.

2	Haga clic en el botón [image].


Math (Examinador de objetos)

El módulo Math contiene los procedimientos utilizados para realizar operaciones matemáticas. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'Math'.

2	Haga clic en el botón [image].


String (Examinador de objetos)

El módulo String contiene los procedimientos utilizados para realizar operaciones de cadena.  Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione el procedimiento de la lista de Miembros de 'String'.

2	Haga clic en el botón [image].


SystemColorConstants (Examinador de objetos)

El módulo System ColorConstants contiene las constantes que identifican varias partes de la interfaz gráfica del usuario. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'SystemColorConstants'.

2	Haga clic en el botón [image].


VbAppWinStyle (Examinador de objetos)

La enumeración VbAppWinStyle contiene las constantes utilizadas por la función Shell para controlar el estilo de una ventana de aplicación. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbAppWinStyle'.

2	Haga clic en el botón [image].


VbCalendar (Examinador de objetos)

La enumeración VbCalendar contiene las constantes utilizadas para determianr el tipo de calendario utilizado por Visual Basic. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbCalendar'.

2	Haga clic en el botón [image].


VbCompareMethod (Examinador de objetos)

La enumeración VbCompareMethod contiene las constantes utilizadas para determinar la forma en que se comparan las cadenas cuando se utilizan las funciones Instr y StrComp. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbCompareMethod'.

2	Haga clic en el botón [image].


VbDayOfWeek (Examinador de objetos)

La enumeración VbDayOfWeek contiene las constantes utilizadas para identificar los días específicos de la semana cuando se utilizan las funciones DateDiff, DatePart y Weekday. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbDayOfWeek'.

2	Haga clic en el botón [image].


VbFileAttribute (Examinador de objetos)

La enumeración VbFileAttribute contiene las constantes utilizadas para identificar los atributos de archivo utilizados en las funciones Dir, GetAttr y SetAttr. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbFileAttribute'.

2	Haga clic en el botón [image].


VbFirstWeekOfYear (Examinador de objetos)

La enumeración VbFirstWeekOfYear contiene las constantes utilizadas para identificar cómo se determina la primera semana de un año cuando se utilizan las funciones DateDiff y DatePart. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbFirstWeekOfYear'.

2	Haga clic en el botón [image].


VbIMEStatus (Examinador de objetos)

Sólo disponible en versiones del Lejano Oriente, la enumeración VbIMEStatus contiene las constantes utilizadas para identificar el Input Method Editor (IME) cuando se utiliza la función IMEStatus. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbIMEStatus'.

2	Haga clic en el botón [image].


VbMsgBoxResult (Examinador de objetos)

La enumeración VbMsgBoxResult contiene las constantes utilizadas para identificar qué botones se presionaron en un cuadro de mensaje que se mostró al utilizar la función MsgBox. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbMsgBoxResult'.

2	Haga clic en el botón [image].


VbMsgBoxStyle (Examinador de objetos)

La enumeración VbMsgBoxStyle contiene las constantes utilizadas para establecer el comportamiento de un cuadro de mensaje, junto con los símbolos y botones que aparecen en él, que se mostró al utilizar la función MsgBox. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbMsgBoxStyle'.

2	Haga clic en el botón [image].


VbQueryClose (Examinador de objetos)

La enumeración VbQueryClose contiene las constantes utilizadas para identificar qué causó que se produjera el evento QueryClose. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbQueryClose'.

2	Haga clic en el botón [image].


VbStrConv (Examinador de objetos)

La enumeración VbStrConv contiene las constantes utilizadas para identificar el tipo de conversión de cadena a realizar por la función StrConv. Estas constantes se puede utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbStrConv'.

2	Haga clic en el botón [image].


VbVarType (Examinador de objetos)

La enumeración VbVarType contiene las constantes utilizadas para identificar los varios tipos de datos que puede contener un tipo de datos Variant. Estas constantes coinciden con los valores devueltos de la función VarType y se pueden utilizar en cualquier parte del código.

Obtener Ayuda en un procedimiento particular

1	Seleccione la constante de la lista de Miembros de 'VbVarType'.

2	Haga clic en el botón [image].


Collection (Ejemplo del objeto)
Ejemplo del objeto Collection

En este ejemplo se crea un objeto Collection (MisClases) y luego se crea un cuadro de diálogo en el que los usuarios pueden agregar objetos a la colección. Para ver cómo funciona, elija el comando Módulo de clase en el menú Insertar y declare una variable pública llamada NombreInstancia al nivel del módulo de Clase1 (escriba Public NombreInstancia). Esta variable guardará los nombres de cada instancia. Deje el nombre predeterminado Clase1. Copie y pegue el código siguiente en la sección General de otro módulo, y luego inícielo con la instrucción DenominadorClase desde otro procedimiento. (Este ejemplo sólo funcionará con aplicaciones principales que admitan clases)

Sub DenominadorClase()

Dim MisClases As New Collection	' Crea un objeto Collection.

Dim Num	' Contador de claves individuales.

Dim Msj As String	' Variable para cadena de petición.

Dim ElNombre, MiObjeto, NombreLista	' Variables de información.

Do

Dim Inst As New Clase1	' Crea nueva instancia de Clase1.

Num = Num + 1	' Incrementa Num, y obtiene un nombre.

Msj = "Escriba un nombre para el objeto." & Chr(13) _

 & "Presione Cancelar para ver los nombres de la colección."

ElNombre = InputBox(Msj, "Nombre los elementos de la colección ")

Inst.NombreInstancia = ElNombre	' Nombrar la instancia del objeto.

' Si se ha especificado un nombre, lo agrega a la colección.

If Inst.NombreInstancia <> "" Then

' Agrega el objeto con nombre a la colección.

MisClases.Add item := Inst, key := CStr(Num)

End If

' Borra la referencia actual para preparar la siguiente.

Set Inst = Nothing

Loop Until ElNombre = ""

For Each MiObjeto In MisClases	' Crea lista de nombres.

NombreLista = NombreLista & MiObjeto.NombreInstancia & Chr(13)

Next MiObjeto

' Muestra la lista de nombres en un cuadro de mensaje.

MsgBox NombreLista, , "Nombres de instancias de la colección MisClases "

For Num = 1 To MisClases.Count	' Quita un nombre de la colección.

MisClases.Remove 1	' Como las colecciones se reindexan

' automáticamente, se quita el

Next	' primer miembro en cada iteración.

End Sub


Err (Ejemplo del objeto)
Ejemplo del objeto Err

Este ejemplo utiliza las propiedades del objeto Err en la construcción de un cuadro de diálogo de mensaje de error. Observe que si utiliza primero el método Clear, cuando genera un error Visual Basic con el método Raise, si utiliza primero el método Clear, los valores predeterminados de Visual Basic pasan a ser las propiedades del objeto Err.

Dim Msj

' Si se produce un error, construir el mensaje de error

On Error Resume Next	' Inicializa el controlador de error.

Err.Clear

Err.Raise 6	' Genera un error de "Desbordamiento".

' Comprueba el error, después muestra un mensaje.

If Err.Number <> 0 Then

Msj = "Error # " & Str(Err.Number) & " fue generado por " _

& Err.Source & Chr(13) & Err.Description

MsgBox Msj, , "Error", Err.Helpfile, Err.HelpContext

End If


Collection (Objeto)

Un objeto Collection es un conjunto ordenado de elementos a los que se puede hacer referencia como una unidad.

Comentarios

El objeto Collection permite hacer referencia de forma sencilla a un grupo de elementos relacionados como un único objeto. Los elementos o miembros de una colección sólo tienen que estar relacionados por el hecho de existir en la colección. Los miembros de una colección no tienen que compartir el mismo tipo de dato.

Los objetos Collection se pueden crear de la misma forma que el resto de los objetos. Por ejemplo:

Dim X As New Collection

Una vez creado un objeto Collection, se le pueden agregar miembros con el método Add y quitárselos con el método Remove. Pueden obtenerse miembros específicos del objeto Collection con el método Item,y hacer una iteración sobre la colección completa con la instrucción For Each ... Next.


Debug (Objeto)

El objeto Debug envía la salida a la ventana Depuración en tiempo de ejecución.


Err (Objeto)

Contiene información sobre errores en tiempo de ejecución.

Comentarios

Las propiedades del objeto Err las establece quien genera el error: Visual Basic, un objeto o el programador en Visual Basic.

La propiedad predeterminada del objeto Err es Number. Como la propiedad predeterminada puede representarse con el nombre de objeto Err, no es necesario modificar el código anterior escrito usando la función Err o la instrucción Err.

Cuando se produce un errores en tiempo de ejecución, las propiedades del objeto Err se llenan con información que identifica al error de forma única y que puede utilizarse para procesarlo. Para generar un error en tiempo de ejecución en el código, utilice el método Raise.

Las propiedades del objeto Err se restablecen a cero o a cadenas de longitud cero ("") tras cualquier forma de las instrucciones Resume u On Error, así como después de las instrucciones Exit Sub, Exit Function o Exit Property de una rutina de tratamiento de errores. También puede utilizarse el método Clear para restablecer explícitamente Err.

Utilice el método Raise, en lugar de la instrucción Error, para generar errores en tiempo de ejecución en un módulo de clase. La decisión de utilizar o no el método Raise en otro código dependerá de la cantidad de información que se desee proporcionar. En el código que utiliza instrucciones Error en lugar del método Raise para generar errores, las propiedades del objeto Err recibirán los siguientes valores predeterminados al ejecutarse Error:

Propiedad	Valor
Number	Valor especificado como argumento de la instrucción Error. Puede ser cualquier número de error válido.
Source	Nombre del proyecto actual de Visual Basic.
Description	Cadena correspondiente a la que devuelve la función Error para el valor especificado en Number, si existe tal cadena. Si la cadena no existe, Description contiene el texto “Error definido por la aplicación o el objeto".
HelpFile	Unidad, ruta y nombre de archivo completos del archivo de Ayuda de Visual Basic.
HelpContext	Identificador de contexto del archivo de Ayuda de Visual Basic para el error correspondiente a la propiedad Number.
LastDLLError	Solamente es válido en los sistemas operativos Microsoft Windows de 32 bits; contiene el código de error de sistema de la última llamada a una biblioteca de vínculos dinámicos (DLL). La propiedad LastDLLError es de sólo lectura.
No es necesario modificar el código existente que utiliza el objeto Err y la instrucción Error. Sin embargo, si se mezcla el objeto Err con la instrucción Error, se pueden producir consecuencias no deseadas. Por ejemplo, aunque rellene las propiedades del objeto Err, se restablecerán a los valores predeterminados indicados en la tabla anterior en cuanto se ejecute la instrucción Error. Aunque puede continuar utilizando la instrucción Error para generar errores en tiempo de ejecución en Visual Basic, el motivo principal de que se mantenga es la compatibilidad con el código existente. Utilice en su lugar el objeto Err, y los métodos Raise y Clear para los errores de sistema y, en el código nuevo, especialmente en los módulos de clase.

Err es un objeto intrínseco con alcance global. No es necesario crear una instancia del mismo en el código.


^ (Ejemplo del operado)
Ejemplo del operador ^

En estos ejemplos se utiliza el operador ^ para elevar un número a la potencia de un exponente.

Dim MiValor

MiValor = 2 ^ 2	' Devuelve 4.

MiValor = 3 ^ 3 ^ 3	' Devuelve 19683.

MiValor = (-5) ^ 3	' Devuelve -125.


+ (Ejemplo del operador)
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).


- (Ejemplo del operador)
Ejemplo del operador -

En estos ejemplos se utiliza el operador - para calcular la diferencia entre dos números.

Dim MiResultado

MiResultado = 4 - 2	' Devuelve 2.

MiResultado = 459.35 - 334.90' Devuelve 124.45.


* (Ejemplo del operador)
Ejemplo del operador *

En estos ejemplos se utiliza el operador * para multiplicar dos números.

Dim MiValor

MiValor = 2 * 2	' Devuelve 4.

MiValor = 459.35 * 334.90 	' Devuelve 153836.315.


/ (Ejemplo del operador)
Ejemplo del operador /

En estos ejemplos se utiliza el operador / para ejecutar divisiones en coma flotante.

Dim MiValor

MiValor = 10 / 4	' Devuelve 2.5.

MiValor = 10 / 3	' Devuelve 3.333333.


\ (Ejemplo del operador)
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.


Mod (Ejemplo del operador)
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.


& (Ejemplo del operador)
Ejemplo del operador &

En estos ejemplos se utiliza el operador & para forzar la concatenación de cadenas de caracteres.

Dim MyStr

MyStr = "Hola" & " mundo"	' Devuelve "Hola mundo".

MyStr = "Prueba " & 123 & " Prueba"	' Devuelve "Prueba 123 Prueba".


Operadores de comparación (Ejemplo)
Ejemplo de operadores de comparación

En estos ejemplos se muestran distintos usos de los operadores de comparación, los cuales se emplean para comparar expresiones.

Dim MiResultado, Var1, Var2

MiResultado = (45 < 35)	' Devuelve False.

MiResultado = (45 = 45)	' Devuelve True.

MiResultado = (4 <> 3)	' Devuelve True.

MiResultado = ("5" > "4")	' Devuelve True.

Var1 = "5": Var2 = 4	' Inicializa las variables.

MiResultado = (Var1 > Var2)	' Devuelve True.

Var1 = 5: Var2 = Empty

MiResultado = (Var1 > Var2)	' Devuelve True.

Var1 = 0: Var2 = Empty

MiResultado = (Var1 = Var2)	' Devuelve True.


And (Ejemplo del operador)
Ejemplo del operador And

En estos ejemplos se utiliza el operador And para ejecutar una conjunción lógica con dos expresiones.

Dim A, B, C, D, MiPrueba

A = 10: B = 8: C = 6: D = Null	' Inicializa las variables.

MiPrueba = A > B And B > C	' Devuelve True.

MiPrueba = B > A And B > C	' Devuelve False.

MiPrueba = A > B And B > D	' Devuelve Null.

MiPrueba = A And B	' Devuelve 8 (comparación bit a bit).


Eqv (Ejemplo del operador)
Ejemplo del operador Eqv

En estos ejemplos se utiliza el operador Eqv para ejecutar una equivalencia lógica con dos expresiones.

Dim A, B, C, D, MiPrueba

A = 10: B = 8: C = 6: D = Null	' Inicializa variable.

MiPrueba = A > B Eqv B > C	' Devuelve True.

MiPrueba = B > A Eqv B > C	' Devuelve False.

MiPrueba = A > B Eqv B > D	' Devuelve Null.

MiPrueba = A Eqv B	' Devuelve -3 (comparación bit por bit).


Imp (Ejemplo del operador)
Ejemplo del operador Imp

En estos ejemplos se utiliza el operador Imp para ejecutar una implicación lógica con dos expresiones.

Dim A, B, C, D, MiPrueba

A = 10: B = 8: C = 6: D = Null	' Inicializa variables.

MiPrueba = A > B Imp B > C	' Devuelve True.

MiPrueba = A > B Imp C > B	' Devuelve False.

MiPrueba = B > A Imp C > B	' Devuelve True.

MiPrueba = B > A Imp C > D	' Devuelve True.

MiPrueba = C > D Imp B > A	' Devuelve Null.

MiPrueba = B Imp A	' Devuelve -1 (comparación bit por bit).


Not (Ejemplo del operador)
Ejemplo del operador Not

En estos ejemplos se utiliza el operador Not para ejecutar la negación lógica de una expresión.

Dim A, B, C, D, MiPrueba

A = 10: B = 8: C = 6: D = Null	' Inicializa variables.

MiPrueba = Not(A > B)	' Devuelve False.

MiPrueba = Not(B > A)	' Devuelve True.

MiPrueba = Not(C > D)	' Devuelve Null.

MiPrueba = Not A	' Devuelve -11 (comparación bit por bit).


Or (Ejemplo del operador)
Ejemplo del operador Or

En estos ejemplos se utiliza el operador Or para ejecutar una disyunción lógica con dos expresiones.

Dim A, B, C, D, MiPrueba

A = 10: B = 8: C = 6: D = Null	' Inicializa variables.

MiPrueba = A > B Or B > C	' Devuelve True.

MiPrueba = B > A Or B > C	' Devuelve True.

MiPrueba = A > B Or B > D	' Devuelve True.

MiPrueba = B > D Or B > A	' Devuelve Null.

MiPrueba = A Or B	' Devuelve 10 (comparación bit por bit).


Xor (Ejemplo del operador)
Ejemplo del operador Xor

En este ejemplo se utiliza el operador Xor para ejecutar una exclusión lógica sobre dos expresiones.

Dim A, B, C, D, MiPrueba

A = 10: B = 8: C = 6: D = Null	' Inicializa variables.

MiPrueba = A > B Xor B > C	' Devuelve False.

MiPrueba = B > A Xor B > C	' Devuelve True.

MiPrueba = B > A Xor C > B	' Devuelve False.

MiPrueba = B > D Xor A > B	' Devuelve Null.

MiPrueba = A Xor B	' Devuelve 2 (comparación bit a bit).


Like (Ejemplo del operador)
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.


Is (Ejemplo del operador)
Ejemplo del operador Is

En estos ejemplos se utiliza el operador Is para comparar dos referencias de objeto. Todas las variables de objeto utilizadas aquí son nombres genéricos incluidos solamente con el objeto de ilustrar el ejemplo.

Dim MiObjeto, SuObjeto, EsteObjeto, OtroObjeto, AquelObjeto, MiPrueba

Set SuObjeto = MiObjeto	' Asigna referencias de objeto.

Set EsteObjeto = MiObjeto

Set AquelObjeto = OtroObjeto

MiPrueba = SuObjeto Is EsteObjeto	' Devuelve True.

MiPrueba = AquelObjeto Is EsteObjeto	' Devuelve False.

' Asume MiObjeto <> OtroObjeto

MiPrueba = MiObjeto Is AquelObjeto	' Devuelve False.


Resumen de los operadores

Operadores	Descripción
Operadores aritméticos	Operadores utilizados para ejecutar cálculos matemáticos.
Operadores de comparación	Operadores utilizados para efectuar comparaciones.
Operadores de concatenación	Operadores utilizados para combinar cadenas de caracteres.
Operadores lógicos	Operadores usados para realizar operaciones lógicas.


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.


Operadores aritméticos

Operador ^

Operador *

Operador /

Operador \

Operador Mod

Operador +

Operador -


Operadores de concatenación

Operador &

Operador +


Operadores lógicos

Operador And

Operador Eqv

Operador Imp

Operador Not

Operador Or

Operador Xor


^ (Operador)

Se utiliza para elevar un número a la potencia del exponente.

Sintaxis

resultado = número^exponente

La sintaxis del operador ^ consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
número	Obligatorio; cualquier expresión numérica.
exponente	Obligatorio; cualquier expresión numérica.
Comentarios

Un número puede ser negativo sólo si exponente es un entero. Cuando se efectúa más de una exponenciación en una única expresión, el operador ^ se resuelve en el orden en que esté, de izquierda a derecha.

Generalmente, el tipo de dato del resultado es un Double o un Variant que contiene un Double. Sin embargo, si número o exponente es una expresión Null resultado es también Null.


+ (Operador)

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	Obligatorio; cualquier variable numérica.
Expresión1	Obligatorio; cualquier expresión.
expresión2	Obligatorio; 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
Ambas expresiones son tipos de datos numéricos (Byte, Boolean, Integer, Long, Single, Double, Date, Currency o Decimal)	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 result 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 variantque 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.


- (Operador)

Se utiliza para hallar la diferencia entre dos números o para indicar el valor negativo de una expresión numérica.

Sintaxis 1

resultado = número1-número2

Sintaxis 2

–número

La sintaxis del operador – consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
número	Obligatorio; cualquier expresión numérica.
número1	Obligatorio; cualquier expresión numérica.
número2	Obligatorio; cualquier expresión numérica.
Comentarios

En la sintaxis 1, – es el operador de substracción aritmética utilizado para hallar la diferencia entre dos números. En la sintaxis 2, – se utiliza como el operador de negación unaria para indicar el valor negativo de una expresión.

El tipo de dato de resultado es generalmente el de la expresión más exacta. El orden de precisión, de menos exacto a más exacto, es Byte, Integer, Long, Single, Double, Currency y Decimal. Este orden tiene las siguientes excepciones:

Si	El result
Es una substracción de un tipo Single y un tipo Long,	se convierte a tipo Double.
El tipo de dato de resultado es un tipo variant Long, Single o Date que se sale del intervalo válido,	se convierte a un Variant que contiene un tipo Double.
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.
La substracción implica a un tipo Date y cualquier otro tipo de dato,	es un tipo Date.
La substracción implica dos expresiones tipo Date,	es un tipo Double.
Si una o ambas de las expresiones son de tipo Null, el tipo de datos del resultado es Null. Si una expresión es del tipo Empty, se considera como si fuera 0.

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.


* (Operador)

Se utiliza para multiplicar dos números.

Sintaxis

resultado = número1*número2

La sintaxis del operador * consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
número1	Obligatorio; cualquier expresión numérica.
número2	Obligatorio; cualquier expresión numérica.
Comentarios

El tipo de dato del resultado es generalmente el de la expression más exacta. 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 result
La multiplicación implica un tipo  Single y un tipo Long,	se convierte a un tipo Double.
El tipo de dato de resultado es un tipo variant Long, Single o Date que se sale del intervalo válido,	se convierte a un Variant que contiene un tipo Double.
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.
Si una o ambas de las expresiones son de tipo Null, el tipo de datos del resultado es Null. Si una expresión es del tipo Empty, se considera como 0.

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.


/ (Operador)

Se utiliza para dividir dos números y obtener un resultado de signo flotante.

Sintaxis

resultado = número1/número2

La sintaxis del operador / consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
número1	Obligatorio; cualquier expresión numérica.
número2	Obligatorio; cualquier expresión numérica.
Comentarios

El tipo de dato de resultado es normalmente un Double tipo variant o un tipo Double. Esta regla tiene las siguientes excepciones:

Si	El result es
Ambas expresiones son expresiones de tipo Byte, Integer o Single,	un tipo Single a menos que salga de su intervalo válido, en cuyo caso se produce un error.
Ambas expresiones son Byte, Integer o Single tipo variant,	un tipo Single a menos que salga de su intervalo válido; en este caso resultado es un tipo Variant que contiene un tipo Double.
La división contiene un tipo Decimal y cualquier otro tipo de dato,	un tipo Decimal.
Si una o ambas de las expresiones son de tipo Null, el tipo de datos del resultado es Null. Si una expresión es del tipo Empty, se considera 0


\ (Operador)

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	Obligatorio; cualquier variable numérica.
número1	Obligatorio; cualquier expresión numérica.
número2	Obligatorio; 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.


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	Obligatorio; cualquier variable numérica.
número1	Obligatorio; cualquier expresión numérica.
número2	Obligatorio; 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.


& (Operador)

Se utiliza para forzar la concatenación de las cadenas de dos expresiones.

Sintaxis

resultado = expresión1 & expresión2

La sintaxis del operador & consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable tipo String o Variant.
expresión1	Obligatorio; cualquier expresión.
expresión2	Obligatorio; cualquier expresión.
Comentarios

Si una expresión no es una cadena de caracteres, se convierte en un tipo String tipo variant. El tipo de dato del resultado es String si ambas expresiones son expresiones de cadena; de lo contrario, el resultado es una String tipo variant. Si ambas expresiones son Null, el resultado es también Null. Sin embargo, si sólo una expresión es Null, esa expresión se considera como una cadena de longitud cero ("") al concatenarse con la otra expresión. Cualquier expresión Empty se considera también una cadena de longitud cero.


Operadores de comparación

Se utilizan para comparar expresiones.

Sintaxis

resultado = expresión1 operadorcomparación expresión2

resultado = objeto1 Is objeto2

resultado = cadena Like patrón

Los operadores de comparación constan de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
expresión	Obligatorio; cualquier expresión.
operadorcomparación	Obligatorio; cualquier operador de comparación.
objeto	Obligatorio; cualquier nombre de objeto.
cadena	Obligatorio; cualquier expresión de cadena.
patrón	Obligatorio; cualquier expresión de cadena o intervalo de caracteres.
Comentarios

Esta tabla contiene una lista de los operadores de comparación y de las condiciones que determinan si el resultado es True, False o Null:

Operador	True si	False si	Null si
< (Menor que)	expresión1 < expresión2	expresión1 >= expresión2	expresión1 o expresión2 = Null
<= (Menor o igual que)	expresión1 <= expresión2	expresión1 > expresión2	expresión1 o expresión2 = Null
> (Mayor que)	expresión1 > expresión2	expresión1 <= expresión2	expresión1 o expresión2 = Null
>= (Mayor o igual que)	expresión1 >= expresión2	expresión1 < expresión2	expresión1 o expresión2 = Null
= (Igual a)	expresión1 = expresión2	expresión1 <> expresión2	expresión1 o expresión2 = Null
<> (Distinto de)	expresión1 <> expresión2	expresión1 = expresión2	expresión1 o expresión2 = Null
Nota   Los operadores Is y Like tienen funciones de comparación específicas que difieren de las de los operadores incluidos en la siguiente tabla.

Cuando se comparan dos expresiones, puede ser difícil determinar si éstas se comparan como números o como cadenas de caracteres. En la siguiente tabla se muestra el modo en que se comparan expresiones y cuál es el resultado cuando cualquiera de las expresiones no es del tipo Variant:

Si	Entonces
Ambas expresiones son de tipos de datos numéricos (Byte, Boolean, Integer, Long, Single, Double, Date, Currency o Decimal)	Se efectúa una comparación numérica.
Ambas expresiones son de tipo String	Se efectúa una comparación de cadenas.
Una expresión es de tipo de datos numérico y la otra es un tipo Variant que es, o puede ser, un número	Se efectúa una comparación numérica.
Una expresión es de tipo de datos numérico y la otra es un tipo Variant de cadena de caracteres que no se puede convertir en un número	Provoca un error de Error de tipos.
Una expresión es de tipo String y la otra es cualquier tipo Variant, con excepción de Null	Se efectúa una comparación de cadenas.
Una expresión es Empty y la otra es del tipo de datos numérico	Se efectúa una comparación numérica, usando 0 como la expresión Empty.
Una expresión es Empty y la otra es del tipo String	Se efectúa una comparación de cadenas, utilizando una cadena de caracteres de longitud cero ("") como la expresión Empty.
Si tanto expresión1 como expresión2 son del tipo Variant, el tipo subyacente de las mismas es el que determina la manera en que se comparan. En la siguiente tabla se muestra el modo en que se comparan las expresiones y cuál es el resultado de la operación de acuerdo con el tipo subyacente de Variant:

Si	Entonces
Ambas expresiones tipo Variant son numéricas	Se efectúa una comparación numérica.
Ambas expresiones tipo Variant son cadenas de caracteres	Se efectúa una comparación de cadenas.
Una expresión tipo Variant es numérica y la otra es una cadena de caracteres	La expresión numérica es menor que la expresión de cadena.
Una expresión tipo Variant es Empty y la otra es numérica	Se efectúa una comparación numérica, usando 0 como la expresión Empty.
Una expresión tipo Variant es Empty y la otra es una cadena de caracteres	Se efectúa una comparación de cadenas, utilizando una cadena de caracteres de longitud cero ("") como la expresión Empty.
Ambas expresiones tipo Variant son Empty	Las expresiones son iguales.
Cuando se compara un tipo Single con un tipo Double, éste se redondea al grado de precisión del tipo Single.

Si una expresión tipo Currency se compara con una de tipo Single o Double, ésta se convierte al tipo Currency. De igual forma, cuando un tipo Decimal se compara con un tipo Single o Double, el tipo Single o el Double se convierten a tipo Decimal. Para el tipo Currency, cualquier valor fraccionario menor que 0,0001 se pierde; para el tipo Decimal, cualquier valor fraccionario menor que 1E-28 se pierde y puede ocurrir un error de desbordamiento. Perder valores fraccionarios puede hacer que dos valores se comparen como iguales cuando en realidad no lo son.


And (Operador)

Se utiliza para efectuar una conjunción lógica de dos expresiones.

Sintaxis

resultado = expresión1 And expresión2

La sintaxis del operador And consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
expresión1	Obligatorio; cualquier expresión.
expresión2	Obligatorio; cualquier expresión.
Comentarios

Si y sólo si ambas expresiones se evalúan como True, el resultado es True. Si cualquiera de las expresiones es False, el resultado es False. La siguiente tabla ilustra cómo se determina el resultado:

Si expression1 es	Y expression2 es	El resultado es
True	True	True
True	False	False
True	Null	Null
False	True	False
False	False	False
False	Null	False
Null	True	Null
Null	False	False
Null	Null	Null
El operador And ejecuta también una comparación bit a bit para identificar los bits de dos expresiones numéricas que tienen la misma posición y establece el bit correspondiente en el resultado según la siguiente tabla de decisión lógica:

Si el bit en expression1 es	Y el bit en expression2 es	El resultado es
0	0	0
0	1	0
1	0	0
1	1	1


Eqv (Operador)

Se utiliza para efectuar una equivalencia lógica de dos expresiones.

Sintaxis

resultado = expresión1 Eqv expresión2

La sintaxis del operador Eqv consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
Expresión1	Obligatorio; cualquier expresión.
Expresión2	Obligatorio; cualquier expresión.
Comentarios

Si cualquiera de las expresiones es de tipo Null, el resultado es también Null. Si ninguna de las expresiones es Null, el resultado se determina según la siguiente tabla:

Si expression1 es	Y expression2 es	El resultado es
True	True	True
True	False	False
False	True	False
False	False	True
El operador Eqv ejecuta una comparación bit a bit para identificar los bits de dos expresiones numéricas que tienen la misma posición y establece el bit correspondiente en el resultado según la siguiente tabla de decisión lógica:

Si bit en expression1 es	Y bit en expression2 es	El resultado es
0	0	1
0	1	0
1	0	0
1	1	1


Imp (Operador)

Se utiliza para efectuar una implicación lógica de dos expresiones.

Sintaxis

resultado = expresión1 Imp expresión2

La sintaxis del operador Imp consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
expresión1	Obligatorio; cualquier expresión.
expresión2	Obligatorio; cualquier expresión.
Comentarios

La siguiente tabla ilustra cómo se determina el resultado:

Si expression1 es	Y expression2 es	El resultado es
True	True	True
True	False	False
True	Null	Null
False	True	True
False	False	True
False	Null	True
Null	True	True
Null	False	Null
Null	Null	Null
El operador Imp ejecuta una comparación bit a bit para identificar los bits de dos expresiones numéricas que tienen la misma posición y establece el bit correspondiente en el resultado según la siguiente tabla de decisión lógica:

Si bit en expression1 es	Si bit en expression2 es	El resultado es
0	0	1
0	1	1
1	0	0
1	1	1


Not (Operador)

Se utiliza para ejecutar una negación lógica sobre una expresión.

Sintaxis

resultado = Not expresión

La sintaxis del operador Not consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
expresión	Obligatorio; cualquier expresión.
Comentarios

La siguiente tabla muestra cómo se determina el resultado:

Si expresión es	Entonces resultado es
True	False
False	True
Null	Null
Además, el operador Not invierte los valores de bit de cualquier variable y establece el bit correspondiente en resultado, de acuerdo con la siguiente tabla de decisión lógica:

Si el bit en expression es	Entonces el bit en resultado es
0	1
1	0


Or (Operador)

Se utiliza para ejecutar una disyunción lógica sobre dos expresiones.

Sintaxis

resultado = expresión1 Or expresión2

La sintaxis del operador Or consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
expresión1	Obligatorio; cualquier expresión.
expresión2	Obligatorio; cualquier expresión.
Comentarios

Si cualquiera de las expresiones, o ambas, es True, el resultado es True. La siguiente tabla indica cómo se determina el resultado:

Si expression1 es	Y expression2 es	El resultado es
True	True	True
True	False	True
True	Null	True
False	True	True
False	False	False
False	Null	Null
Null	True	True
Null	False	Null
Null	Null	Null
El operador Or ejecuta una comparación bit a bit para identificar los bits de dos expresiones numéricas que tienen la misma posición y establece el bit correspondiente en el resultado según la siguiente tabla de decisión lógica:

Si bit en expression1 es	Si bit en expression2 es	El resultado es
0	0	0
0	1	1
1	0	1
1	1	1


Xor (Operador)

Se utiliza para realizar una exclusión lógica entre dos expresiones.

Sintaxis

[resultado =] expresión1 Xor expresión2

La sintaxis del operador Xor consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
expresión1	Obligatorio; cualquier expresión.
expresión2	Obligatorio; cualquier expresión.
Comentarios

Si una y sólo una de las expresiones es True, el resultado es True. Sin embargo, si cualquiera de las expresiones es Null, el resultado es también Null. Cuando ninguna de las expresiones es Null, el resultado se determina de acuerdo con la siguiente tabla:

Si expression1 es	Y expression2 es	El resultado es
True	True	False
True	False	True
False	True	True
False	False	False
El operador Xor funciona como operador lógico y bit a bit. Ejecuta una comparación bit a bit para identificar los bits de dos expresiones utilizando lógina de O exlusivo para obtener el resultado, según la siguiente tabla de decisión lógica:

Si bit en expression1 es	Si bit en expression2 es	El resultado es
0	0	0
0	1	1
1	0	1
1	1	0


Is (Operador)

Se utiliza para comparar dos variables de referencia de objeto.

Sintaxis

resultado = objeto1 Is objeto2

La sintaxis del operador Is consta de las siguientes partes:

Parte	Descripción
resultado	Obligatorio; cualquier variable numérica.
objeto1	Obligatorio; cualquier nombre de objeto.
objeto2	Obligatorio; cualquier nombre de objeto.
Comentarios

Si tanto objeto1 como objeto2 se refieren al mismo objeto, el resultado es True; si no, el resultado es False. Hay varias maneras de hacer que dos variables se refieran al mismo objeto.

En el siguiente ejemplo, se ha definido A de modo que se refiera al mismo objeto que B:

Set A = B

En el siguiente ejemplo se hace que A y B se refieran al mismo objeto que C:

Set A = C

Set B = C


Like (Operador)

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	Obligatorio; cualquier variable numérica.
cadena	Obligatorio; cualquier expresión de cadena.
patrón	Obligatorio; 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 criterio de ordenación derivado de las representaciones binarias internas de los caracteres. En Microsoft Windows, el criterio de ordenación depende de la página de código. En el siguiente ejemplo se ilustra un criterio de ordenación binaria típico:

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text da como resultado comparaciones de cadenas basadas en el criterio de ordenación 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 criterio de ordenación.

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.


Count (Ejemplo de la propiedad)
Ejemplo de la propiedad Count

En este ejemplo se utiliza la propiedad Count del objeto Collection para especificar el número de iteraciones necesarias para quitar todos los elementos de la colección denominada MisClases. Cuando las colecciones están indexadas numéricamente, la base predeterminada es 1. Como las colecciones se vuelven a indexar automáticamente cuando se les quita un miembro, en el código siguiente se quita el primer miembro en cada iteración.

Dim Num, MisClases

For Num = 1 To MisClases.Count	' Quita un nombre de la colección.

MisClases.Remove 1	' El índice numérico predeterminado

Next	' de las colecciones empieza por 1.


Description (Ejemplo de la propiedad)
Ejemplo de la propiedad Description

Este ejemplo asigna un mensaje definido por el usuario a la propiedad Description del objeto Err.

Err.Description = "Imposible tener acceso a un objeto necesario " _

& "para esta operación."


HelpContext (Ejemplo de la propiedad)
Ejemplo de la propiedad HelpContext

Este ejemplo utiliza la propiedad HelpContext del objeto Err para mostrar el tema de Ayuda de Visual Basic para el error Desbordamiento.

Dim Msj

Err.Clear

On Error Resume Next

Err.Raise 6 ' Genera el error "Desbordamiento".

If Err.Number <> 0 Then

Msj = "Presione F1 o haga clic en Ayuda para ver " & Err.HelpFile & " el tema del " & _

" siguiente HelpContext: " & Err.HelpContext

MsgBox Msj, , "Error: " & Err.Description, Err.HelpFile, _

Err.HelpContext

End If


HelpFile (Ejemplo de la propiedad)
Ejemplo de la propiedad HelpFile

Este ejemplo utiliza la propiedad HelpFile del objeto Err para iniciar el sistema de Ayuda de Microsoft Windows. De manera predeterminada, la propiedad HelpFile contiene el nombre del archivo de Ayuda de Visual Basic.

Dim Msj

Err.Clear

On Error Resume Next	' Suprime errores durante demostración.

Err.Raise 6	' Genera el error "Desbordamiento".

Msj = " Presione F1 o haga clic en Ayuda para ver " & Err.HelpFile & _

" el tema relativo a este error "

MsgBox Msj, , "Error: " & Err.Description,Err.HelpFile, Err.HelpContext


LastDLLError (Ejemplo de la propiedad)
Ejemplo de la propiedad LastDLLError

Cuando se pega en un módulo UserForm, el siguiente código genera un intento de realizar una llamada a una función DLL. La llamada falla porque el argumento que se transfiere (un puntero nulo) genera un error y ningún evento SQL se puede cancelar si no se está ejecutando. El código a continuación de la llamada comprueba el valor devuelto por la misma, y después imprime la propiedad LastDLLError de objeto Err para mostrar el código de error.

 Private Declare Function SQLCancel Lib "ODBC32.dll" _

 (ByVal hstmt As Long) As Integer

Private Sub UserForm_Click()

Dim ValDev

' Realiza una llamada con un argumento no válido.

ValDev = SQLCancel(myhandle&)

' Comprueba un código de error SQL.

If ValDev = -2 Then

' Muestra la información del código.

MsgBox "El código de error es :" & Err.LastDllError

    End If

End Sub


Number (Ejemplo de la propiedad)
Ejemplo de la propiedad Number

El primer ejemplo muestra un uso típico de la propiedad Number en una rutina de control de errores. El segundo ejemplo examina la propiedad Number del objeto Err para determinar si un objeto de Automatización OLE definió el error devuelto o si se asignó a un error definido por Visual Basic. Observe que la constante vbObjectError es un número negativo muy grande que el objeto agrega a su propio código de error para indicar que el error ha sido definido por el servidor. Por tanto, al restarlo de Err.Number se quita del resultado. Si el error es definido por el objeto, el número base se deja en MiError, que se muestra en un cuadro de mensaje junto con el origen del error. Si Err.Number representa un error de Visual Basic, entonces se muestra en el cuadro de mensaje el número de error de Visual Basic.

' Uso típico de la propiedad Number

Sub test()

On Error GoTo out

Dim x, y

x = 1 / y	' Crea un error de división por cero

Exit Sub

salida:

MsgBox Err.Number

MsgBox Err.Description

' Comprueba el error de división por cero

If Err.Number = 11 Then

y = y + 1

End If

Resume

End Sub

' Uso de la propiedad Number con un error de un objeto

' de Automatización

Dim MiError, Msj

' Primero, quita la constante agregada por el objeto para indicar uno

' de sus propios errores.

MiError = Err.Number - vbObjectError

' Si resta la constante vbObjectError, y el número está todavía en el

' intervalo 0-65.535, es un código de error definido por el objeto.

If MiError > 0 And MiError < 65535 Then

Msj = " El objeto al que tuvo acceso asignó este número al error: " _

 	& MiError & ". El error que lo originó fue: " _

& Err.Source & ". Presione F1 para ver el tema de ayuda."

' De lo contrario, es un número de error de Visual Basic.

Else

Msj = "Este error (# " & Err.Number & ") es un número de error de Visual Basic" & _

". Presione el botón de Ayuda o F1 para ver el tema de Ayuda de " _

& " este error."

End If

MsgBox Msj, , "Error de objeto", Err.HelpFile, Err.HelpContext


Source (Ejemplo de la propiedad)
Ejemplo de la propiedad Source

Este ejemplo asigna la Id. mediante programa de un objeto de Automatización creado en Visual Basic a la variable MiIdObjeto, y a continuación la asigna a la propiedad Source del objeto Err cuando genera un error con el método Raise. Al controlar errores, no debe utilizar la propiedad Source (ni ninguna propiedad de Err distinta de Number) mediante programa. El único uso válido de las propiedades distintas de Number es mostrar gran cantidad de información a un usuario final cuando no se puede manejar un error. El ejemplo asume que App y MiClase son referencias válidas.

Dim MiClase, MiIdObjeto, MiArchivoAyuda, MiContextoAyuda

' Un objeto del tipo MiClase genera un error y rellena todas las

' propiedades del objeto Err, incluyendo Source, que recibe MiIdObjeto

' que es una combinación de la propiedad Title del objeto App y de la

' propiedad Name del objeto MiClase.

MiIdObjeto = App.Title & "." & MiClase.Name

Err.Raise	Number := vbObjectError + 894, Source := MiIdObjeto, _

Description := "Imposible completar la tarea ", _

HelpFile := MiArchivoAyuda, HelpContext := MiContextoAyuda


Count (Propiedad)

Devuelve un tipo Long (entero largo) que contiene el número de objetos de una colección. Sólo lectura.


Description (Propiedad)

Devuelve o establece una expresión de cadena que contiene una cadena descriptiva asociada a un error. Lectura/escritura.

Para el objeto Err, devuelve o establece una cadena descriptiva asociada a un error.

Comentarios

La propiedad Description contiene una breve descripción del error. Puede utilizar esta propiedad para notificar al usuario un error que usted no puede o no desea tratar. Al generar un error definido por el usuario, asigne una breve descripción del mismo a esta propiedad. Si no se rellena Description y el valor de Number corresponde a un error en tiempo de ejecución de Visual Basic, la cadena que devuelve la función Error se coloca en Description cuando se genera el error.


HelpContext (Propiedad de Visual Basic for Applications)
HelpContext (Propiedad)

Devuelve o establece una expresión de cadena que contiene el identificador de contexto de un tema para un archivo de Ayuda de Microsoft Windows. Lectura/escritura.

Comentarios

La propiedad HelpContext se usa para mostrar automáticamente el tema de Ayuda especificado en la propiedad HelpFile. Si HelpFile y HelpContext están vacías, se comprobará el valor de Number. Si Number corresponde a un valor de error en tiempo de ejecución de Visual Basic, se usa el identificador de contexto para el error de Visual Basic. Si el valor de Number no corresponde a un error de Visual Basic, se mostrará la pantalla de índice del archivo de Ayuda de Visual Basic.

Nota   En su aplicación debe incluir rutinas de tratamiento de los errores más comunes. Al programar con un objeto, puede utilizar la información que proporciona el archivo de Ayuda para mejorar la calidad del tratamiento de los errores o para mostrar un mensaje significativo para el usuario si el error no es recuperable.


HelpFile (Propiedad)

Devuelve o establece una expresión de cadena con una ruta completa de un archivo de Ayuda de Microsoft Windows. Lectura/escritura.

Comentarios

Cuando se especifica un archivo de Ayuda en HelpFile, se le llama automáticamente cuando el usuario hace clic el botón Ayuda (o presiona la tecla F1) del cuadro de diálogo del mensaje de error. Si la propiedad HelpContext contiene un identificador de contexto válido para el archivo especificado, se mostrará automáticamente el tema correspondiente. Si no se especifica nada en HelpFile, aparecerá el archivo de Ayuda de Visual Basic.

Nota   En su aplicación debe incluir rutinas de tratamiento de los errores más comunes. Al programar con un objeto, puede utilizar la información que proporciona el archivo de Ayuda para mejorar la calidad del tratamiento de los errores o para mostrar un mensaje significativo para el usuario si el error no es recuperable.


LastDLLError (Propiedad)

Devuelve un código de error de sistema producido por una llamada a una biblioteca de vínculos dinámicos (DLL). Sólo lectura.

Comentarios

La propiedad LastDLLError se aplica sólo a llamadas a DLL realizadas desde código de Visual Basic. Normalmente, cuando se realizan llamadas de este tipo, la función llamada devuelve un código que indica el éxito o el fallo de la operación y se rellena la propiedad LastDLLError. Consulte la documentación de las funciones de la DLL para determinar qué valores de retorno indican el éxito o el fallo. Siembre que se devuelva el código de fallo, la aplicación de Visual Basic deberá comprobar inmediatamente la propiedad LastDLLError. Cuando se establece la propiedad LastDLLError no se genera ninguna excepción.


Number (Propiedad)

Devuelve o establece un valor numérico que especifica un error. Number es la propiedad predeterminada del objeto Err. Lectura/escritura.

Comentarios

Al devolver un error definido por el usuario desde un objeto, establezca Err.Number agregando el número que ha seleccionado como código de error a la constante vbObjectError. Por ejemplo, puede utilizar la línea siguiente para devolver el número 1051 como código de error:

Err.Raise Number := vbObjectError + 1051, Source:= "AlgunaClase"


Source (Propiedad)

Devuelve o establece una expresión de cadena que especifica el nombre del objeto o la aplicación que generó el error. Lectura/escritura.

Comentarios

La propiedad Source especifica una expresión de cadena que representa al objeto que generó el error; la expresión es normalmente el nombre de clase o el identificador programático del objeto. Puede utilizar Source para proporcionar información al usuario cuando el código no pueda tratar un error generado en un objeto al que se ha tenido acceso. Por ejemplo, si se tiene acceso a Microsoft Excel y éste genera un error División por cero, Microsoft Excel establecerá en Err.Number su código de error correspondiente y Excel.Application en Source.

Al generar un error en el código, Source será el identificador programático de la aplicación. Para módulos de clase, Source debe contener un nombre con el formato proyecto.clase. Cuando se produce un error inesperado en su código, la propiedad Source se rellena automáticamente. Para los errores en módulos estándar, Source contiene el nombre de proyecto. Para los errores en un módulo de clase, Source contiene un nombre con el formato proyecto.clase.


DeleteSetting (Ejemplo de la instrucción)
Ejemplo de la instrucción DeleteSetting

En el ejemplo siguiente se utiliza primero la instrucción SaveSetting para incluir en el registro de configuración de Windows (o en el archivo .ini en las plataformas con Windows de 16 bits) entradas correspondientes a la aplicación MiApl, y luego se utiliza la instrucción DeleteSetting para eliminarlas. Al no especificarse el argumento clave, se eliminará toda la sección, incluyendo el nombre de sección y todas sus claves.

' Incluye algunos valores en el registro.

SaveSetting appname := "MiApl", section := "Inicio", _

            key := "Top", setting := 75

SaveSetting "MiApl","Inicio", "Izquierda", 50

' Elimina del registro la sección y todos sus valores.

DeleteSetting "MiApl", "Inicio"


GetAllSettings (Ejemplo de la función)
Ejemplo de la función GetAllSettings .

En este ejemplo se utiliza primero la instrucción SaveSetting para incluir en el registro de configuración de Windows (o en el archivo .ini en las plataformas con Windows de 16 bits) entradas correspondientes a la aplicación especificada como nombreapli, y luego se utiliza la función GetAllSettings para mostrar sus valores. Observe que los nombres de aplicación y los de sección no pueden obtenerse con GetAllSettings. . Por último, la instrucción DeleteSetting elimina las entradas de la aplicación.

' Variant para la matriz bidimensional que devuelve GetAllSettings.

' Entero para contador.

Dim MisValores As Variant, intSettings As Integer

' Incluye algunos valores en el registro de configuración.

SaveSetting appname := "MiApl", section := "Inicio", _

key := "Top", setting := 75

SaveSetting "MiApl","Inicio", "Izquierda", 50

' Recupera los valores.

MisValores = GetAllSettings(appname := "MiApl", section := "Inicio")

For intSettings = LBound(MisValores, 1) To UBound(MisValores, 1)

Debug.Print MisValores(intSettings, 0), MisValores(intSettings, 1)

Next intSettings

DeleteSetting "MiApl", "Inicio"


GetSetting (Ejemplo de la instrucción)
Ejemplo de la instrucción GetSetting .

En este ejemplo se utiliza primero la instrucción SaveSetting para incluir en el registro de configuración de Windows (o en el archivo .ini en las plataformas con Windows de 16 bits) entradas correspondientes a la aplicación especificada como nombreapli, y luego se utiliza la función GetSetting para mostrar uno de los valores. Al especificarse el argumento predeterminado, se garantiza que se devolverá algún valor. Observe que los nombres de sección no pueden recuperarse con GetSetting. Por último, la instrucción DeleteSetting elimina todas las entradas de la aplicación.

' Variant para la matriz bidimensional que devuelve GetAllSettings.

Dim MisValores As Variant

' Incluye algunos valores en el registro de configuración.

SaveSetting "MiApl","Inicio", "Top", 75

SaveSetting "MiApl","Inicio", "Izquierda", 50

Debug.Print GetSetting(appname := "MiApl", section := "Inicio", _

                       key := "Izquierda", default := "25")

DeleteSetting "MiApl", "Inicio"


SaveSetting (Ejemplo de la instrucción)
Ejemplo de la instrucción SaveSetting .

En este ejemplo se utiliza primero la instrucción SaveSetting para incluir en el registro de configuración de Windows (o en el archivo .ini en las plataformas con Windows de 16 bits) entradas correspondientes a la aplicación MiApl, y luego se utiliza la instrucción DeleteSetting para eliminarlas.

' Incluye algunos valores en el registro de configuración.

SaveSetting appname := "MiApl", section := "Inicio", _

            key := "Top", setting := 75

SaveSetting "MiApl","Inicio", "Izquierda", 50

' Elimina la entrada de la aplicación y todos los valores del registro.

DeleteSetting "MiApl", "Inicio"


DeleteSetting (Instrucción)

Elimina una sección o una clave de una entrada del registro de Windows.

Sintaxis

DeleteSetting nombre_aplicación, section[, key]

La sintaxis de la instrucción DeleteSetting tiene los siguientes argumentos con nombre:

Parte	Descripción
appname	Obligatorio. Expresión de tipo cadena que contiene el nombre de la aplicación o proyecto al que se aplica la sección o la clave.
Section	Obligatorio. Expresión de tipo cadena que contiene el nombre de la sección donde se encuentra la clave que se va a eliminar. Si sólo se indican appname y section, se eliminará la sección especificada junto con todas las claves relacionadas.
Key	Opcional. Expresión de tipo cadena que contiene el nombre de la clave a eliminar.
Comentarios

Si se especifican todos los argumentos, se eliminará la clave indicada. Sin embargo, la instrucción DeleteSetting no hace nada si la sección o la clave especificadas no existen.


GetAllSettings (Función)

Devuelve una lista de claves y sus valores respectivos (originalmente creados con SaveSetting) a partir de la entrada de una aplicación en el registro de Windows.

Sintaxis

GetAllSettings(appname, section)

La sintaxis de la función GetAllSettings tiene los siguientes argumentos con nombre:

Parte	Descripción
appname	Obligatorio. Expresión de tipo cadena que contiene el nombre de la aplicación o proyecto al que se aplica la clave.
section	Obligatorio. Expresión de tipo cadena que contiene el nombre de la sección cuyas claves se solicitan. La función GetAllSettings devuelve un valor de tipo Variant cuyo contenido es una matriz bidimensional con todas las claves de la sección especificada y sus valores correspondientes.
Comentarios

La función GetAllSettings devuelve un valor Variant no inicializado si no existen appname o section.


GetSetting (Función)

Devuelve el valor de una clave de la entrada de una aplicación en el registro.

Sintaxis

GetSetting(appname, section, key[, default])

La sintaxis de la función GetSetting tiene los siguientes argumentos con nombre:

Parte	Descripción
appname	Obligatorio. Expresión de tipo cadena que contiene el nombre de la aplicación o proyecto cuya clave se solicita.
section	Obligatorio. Expresión de tipo cadena que contiene el nombre de la sección donde se encuentra la clave.
key	Obligatorio. Expresión de tipo cadena que contiene el nombre de de la clave que se va a devolver.
default	Opcional. Expresión que contiene el valor que se va a devolver si no hay valor en la clave. Si se omite, se asume que default es una cadena de longitud cero ("").
Comentarios

Si alguno de los elementos indicados como argumentos de la función GetSetting no existe, devuelve el valor default.


SaveSetting (Instrucción)

Guarda o crea una entrada para una aplicación en el registro de configuración de Windows.

Sintaxis

SaveSetting appname, section, key, setting

La sintaxis de la instrucción SaveSetting tiene los siguientes argumentos con nombre:

Parte	Descripción
appname	Obligatorio. Expresión de tipo cadena que contiene el nombre de la aplicación o proyecto al que se aplica el valor.
section	Obligatorio. Expresión de tipo cadena que contiene el nombre de la sección donde se va a guardar la clave.
key	Obligatorio. Expresión de tipo cadena que contiene el nombre de la clave que se va a guardar.
setting	Obligatorio. Expresión que contiene el valor que se va a establecer en key.
Comentarios

Se produce un error si por algún motivo no se puede guardar el valor de la clave.


Chr (Ejemplo de la función)
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 %.


Format (Ejemplo de la función)
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".


Hex (Ejemplo de la función)
Ejemplo de la función Hex

En este ejemplo se utiliza la función Hex para devolver el valor hexadecimal de un número.

Dim MiHex

MiHex = Hex(5)	' Devuelve 5.

MiHex = Hex(10)	' Devuelve A.

MiHex = Hex(459)	' Devuelve 1CB.


InStr (Ejemplo de la función)
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.


LCase (Ejemplo de la función)
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".


Left (Ejemplo de la función)
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".


Len (Ejemplo de la función)
Ejemplo de la función Len

En este ejemplo se utiliza la función Len para devolver el número de caracteres en una cadena o el número de bytes requeridos para almacenar una variable. El bloque Type...End Type que define RegistroCliente debe ir precedido por la palabra clave Private si aparece en un módulo de clase. En un módulo estándar, una instrucción Type puede ser Public.

Type RegistroCliente	' Define un tipo definido por el usuario.

ID As Integer	' Incluye esta definición en

Name As String * 10	' un módulo estándar.

Address As String * 30

End Type

Dim Customer As RegistroCliente	' Declara variables.

Dim MiEntero As Integer, MyCur As Currency

Dim MiCadena, MiLong

MiCadena = "Hola a todos"	' Inicializa la cadenas.

MiLong = Len(MiEntero)	' Devuelve 2.

MiLong = Len(Customer)	' Devuelve 42.

MiLong = Len(MiCadena)	' Devuelve 11.

MiLong = Len(MyCur)	' Devuelve 8.


LSet (Ejemplo de la instrucción)
Ejemplo de la instrucción LSet

En este ejemplo se utiliza la instrucción LSet para alinear a la izquierda una cadena en una variable de cadena. Aunque LSet también sirve para copiar una variable de un tipo definido por el usuario en otra variable de otro tipo disntinto definido por el usuario, aunque compatible, esta práctica no es recomendable. Debido a las diversas implementaciones de las estructuras de datos entre plataformas, es imposible garantizar que este uso de LSet sea portable.

Dim MiCadena

MiCadena = "0123456789"	' Inicializa una cadena.

Lset MiCadena = "<-Izquierda"	' MiCadenaIng contiene "<-Izquierda    ".


LTrim, RTrim y Trim (Ejemplo de las funciones)
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->".


Mid (Ejemplo de la función)
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".


Mid (Ejemplo de la instrucción)
Ejemplo de la instrucción Mid

En este ejemplo se utiliza la instrucción Mid para reemplazar un número especificado de caracteres en una variable de cadena con caracteres de otra cadena.

Dim MiCadena

MiCadena = "El perro salta"	' Inicializa la cadena.

Mid(MiCadena, 4, 5) = "zorro"	' MiCadena = "El zorro salta".

Mid(MiCadena, 4) = "gallo"	' MiCadena = "El gallo salta".

Mid(MiCadena, 4) = "gallo saltó sobre"	' MiCadena = "El gallo saltó".

Mid(MiCadena, 4, 5) = "ciervo"	' MiCadena = "El cierv saltó".


Oct (Ejemplo de la función)
Ejemplo de la función Oct

En este ejemplo se utiliza la función Oct para devolver el valor octal  de un número.

Dim MiOct

MiOct = Oct(4)	' Devuelve 4.

MiOct = Oct(8)	' Devuelve 10.

MiOct = Oct(459)	' Devuelve 713.


Right (Ejemplo de la función)
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".


RSet (Ejemplo de la instrucción)
Ejemplo de la instrucción RSet

En este ejemplo se utiliza la instrucción RSet para alinear a la derecha una cadena en una variable de cadena de caracteres.

Dim MiCadena

MiCadena = "01234567890123"	' Inicializa una cadena.

Rset MiCadena = "Derecha->"	' MiCadena contiene "   Derecha->".


Space (Ejemplo de la función)
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"


Str (Ejemplo de la función)
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".


StrComp (Ejemplo de la función)
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.


String (Ejemplo de la función)
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, 42)	' Devuelve "*****".

MiCadena = String(10, "ABC")	' Devuelve "AAAAAAAAAA".


UCase (Ejemplo de la función)
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".


Chr (Función)

Devuelve un tipo String que contiene el carácter asociado con el código de carácter especificado.

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 65536.

Nota   La función ChrB se utiliza con datos de byte incluidos en un tipo String. En lugar de devolver un carácter, que puede ser de uno o de dos bytes, ChrB siempre devuelve un único byte. La función ChrW devuelve un tipo String que contiene el carácter Unicode excepto en plataformas donde no se admite Unicode, en cuyo caso, el comportamiento es idéntico al de la función Chr.


Format (Función)

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	Obligatorio. 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íadeñao	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 a	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.


Formatos numéricos con nombre (función Format)

La tabla siguiente identifica los nombres de los formatos numéricos predefinidos:

Nombre de formato	Descripción
General Number	Muestra el número tal y como es, sin separadores de millar.
Currency	Muestra el número con separador de millar, si es apropiado; muestra dos dígitos a la derecha del separador decimal. La salida se basa en la configuración regional del sistema.
Fixed	Muestra al menos un dígito a la izquierda y dos dígitos a la derecha del separador decimal.
Standard	Muestra el número con separador de millar, con al menos un dígito a la izquierda y dos dígitos a la derecha del separador decimal.
Percent	Muestra el número multiplicado por 100 con un signo de porcentaje (%)a la derecha; siempre muestra dos dígitos a la derecha del separador decimal.
Scientific	Utiliza la notación científica estándar.
Yes/No	Muestra No si el número es 0; de lo contrario, muestra Yes.
True/False	Muestra False si el número es 0; de lo contrario, muestra True.
On/Off	Muestra Offsi el número es 0; de lo contrario, muestra On.


Formatos numéricos definidos por el usuario (función Format)

La tabla siguiente identifica los caracteres que puede utilizar para crear formatos definidos por el usuario:

Carácter	Descripción
Ninguno	Muestra el número sin formato.
(0)	Marcador de posición de dígito. Muestra un dígito o un cero. Si la expresión tiene un dígito en la posición donde aparece el 0 en la cadena de formato, se muestra el dígito; de lo contrario, se muestra un cero en esa posición. Si el número tiene menos dígitos que ceros (a cualquier lado del separador decimal) en la expresión de formato, se muestran los ceros a la izquierda o a la derecha. Si el número tiene más dígitos a la derecha del separador decimal que ceros hay a la derecha del separador decimal en la expresión de formato, se redondea el número en tantos lugares decimales como ceros existan. Si el número tiene más dígitos a la izquierda del separador decimal que ceros hay a la izquierda del separador decimal en la expresión de formato, se muestran los dígitos adicionales sin modificación.
(#)	Marcador de posición de dígito. Muestra un dígito o nada. Si la expresión tiene un dígito en la posición donde aparece # en la cadena de formato, se muestra el dígito; de lo contrario, no se muestra nada en esa posición. Este símbolo funciona como el marcador de posición del dígito 0, excepto en que no se muestran los ceros a la izquierda o a la derecha si el número tiene los mismos o menos dígitos que caracteres # hay a cualquier lado del separador decimal en la expresión de formato.
(.)	Marcador de posición decimal. En algunas configuraciones regionales, se utiliza una coma como separador decimal. El marcador de posición decimal determina cuántos dígitos se muestran a la izquierda y a la derecha del separador decimal. Si la expresión de formato contiene sólo signos de número a la izquierda de este símbolo, los números menores de 1 comienzan con un separador decimal. Si se desea que siempre se muestre un cero a la izquierda en los números fraccionarios, utilice 0 como marcador de posición del primer dígito a la izquierda del separador decimal. El carácter real utilizado como marcador de posición decimal en la salida con formato depende del formato de número reconocido por el sistema.
(%)	Marcador de posición de porcentaje. La expresión se multiplica por 100. El carácter de porcentaje (%) se inserta en la posición donde aparece en la cadena de formato.
(,)	Separador de millar. En algunas configuraciones regionales, se utiliza un punto como separador de millar. El separador de millar separa los millares de las centenas en un número que tiene cuatro o más lugares a la izquierda del separador decimal. Se especifica el uso estándar del separador de millar si el formato contiene un separador de millar rodeado por los marcadores de posición de dígitos (0 o #). Dos separadores de millar adyacentes o un separador de millar inmediatamente a la izquierda del separador decimal (aunque no se especifique un decimal) significa "escalar el número dividiéndolo por 1000, redondeándolo si es necesario". Por ejemplo, puede utilizar la cadena de formato "##0,," para representar 100 millones como 100. Los números menores que un millón se muestran como 0. Dos separadores de millar adyacentes en cualquier posición diferente a la inmediatamente a la izquierda del separador decimal se consideran simplemente como señal de que se está usando un separador de millar. El carácter real utilizado como separador de millar en la salida con formato depende del formato de número reconocido por el sistema.
(:)	Separador de hora. En algunas configuraciones regionales se pueden utilizar otros caracteres para representar el separador de hora. El separador de hora separa horas, minutos y segundos cuando los valores de hora tienen formato. El carácter real utilizado como separador de hora en formato viene determinado por las configuraciones del sistema.
(/)	Separador de fecha. En algunas configuraciones regionales se pueden utilizar otros caracteres para representar el separador de fecha. El separado de fecha separa el día, el mes y el año cuando los valores de fecha tienen formato. El carácter real utilizado como separador de fecha en formato viene determinado por las configuraciones del sistema.
(E- E+ e- e+)	Formato de notación científica. Si la expresión de formato contiene al menos un marcador de posición de dígito(0 o #) a la derecha de E-, E+, e- o e+, el número se muestra en formato científico y se inserta E o e entre el número y su exponente. El número de marcadores de posición de dígito a la derecha determina el número de dígitos en el exponente. Utilice E- o e- para colocar un signo menos junto a los exponentes negativos y E+ o e+ para incluir un signo más junto a los exponentes positivos.
- + $ ( )	Muestra un carácter literal. Para mostrar un carácter diferente a los enumerados, escriba delante una barra inversa (\) o escríbalo entre comillas dobles (" ").
(\)	Muestra el carácter siguiente en la cadena de formato. Para mostrar un carácter que tiene un significado especial como un carácter literal, escriba delante barra inversa (\). La barra inversa propiamente dicha no se muestra. Utilizar la barra inversa es igual que poner entre comillas dobles el carácter siguiente. Para mostrar una barra inversa, utilice dos barras inversas (\\). Ejemplos de caracteres que no se pueden mostrar como caracteres literales son los caracteres de formato de fecha y de hora (a, c, d, h, m, n, p, q, s, t, w, y, / y :), los caracteres de formato numérico (#, 0, %, E, e, coma y punto) y los caracteres de formato de cadena (@, &, <, > y !).
("ABC")	Muestra la cadena que hay entre comillas dobles (" "). Para incluir una cadena con formato desde el código, debe utilizar Chr(34) para encerrar el texto (34 es el código de carácter para las comillas dobles (" ").


Diferentes formatos para valores numéricos diferentes (función Format)

Una expresión de formato definida por el usuario para números puede tener de una a cuatro secciones separadas por puntos y coma. Si el argumento formato contiene uno de los formatos numéricos con nombre, sólo se permite una sección.

Si utiliza	El resultado es
Una única sección	La expresión de formato se aplica a todos los valores.
Dos secciones	La primera sección se aplica a los valores positivos y ceros; la segunda a los valores negativos.
Tres secciones	La primera sección se aplica a los valores positivos; la segunda a los valores negativos y la tercera a los ceros.
Cuatro secciones	La primera sección se aplica a los valores positivos, la segunda a los valores negativos, la tercera a los ceros y la cuarta a los valores Null.
El ejemplo siguiente tiene dos secciones: en la primera se define el formato para los valores positivos y ceros; en la segunda se define el formato para los valores negativos.

"$#,##0;($#,##0)"

Si incluye puntos y coma sin nada entre ellos, la sección que falta se imprime utilizando el formato del valor positivo. Por ejemplo, en el formato siguiente se muestran valores positivos y negativos utilizando el formato de la primera sección y se muestra "Cero" si el valor es cero.

"$#,##0;;\C\e\r\o"


Expresiones de formatos numéricos definidas por el usuario
Expresiones de formatos numéricos definidas por el usuario (Ejemplo)

La tabla siguiente contiene algunos ejemplos de expresiones de formato para números. (Todos estos ejemplos asumen que la configuración regional de su sistema es Inglés-US. La primera columna contiene las cadenas de formato. Las otras columnas contienen los resultados que se obtienen si los datos con formato tienen el valor dado en los encabezados de columna.

Format (formato)	5 positivo	5 negativo	0,5 decimal	Null
Cadena de longitud cero("")	5	-5	0,5
0	5	-5	1
0,00	5,00	-5,00	0,50
#,##0	5	-5	1
#,##0.00;;;Nil	5,00	-5,00	0,50	Nil
$#,##0;($#,##0)	$5	($5)	$1
$#,##0.00;($#,##0.00)	$5,00	($5,00)	$0,50
0%	500%	-500%	50%
0.00%	500,00%	-500,00%	50,00%
0.00E+00	5,00E+00	-5,00E+00	5,00E-01
0.00E-00	5,00E00	-5,00E00	5,00E-01


Formatos de fecha/hora con nombre (función Format)

La tabla siguiente identifica los nombres de formato de fecha y hora predefinidos:

Nombre de formato	Descripción
General Date	Muestra una fecha y/u hora. Muestra una fecha y una hora para los números reales (por ejemplo, 4/3/93 05:34 PM); si no hay parte fraccionaria sólo se muestra la fecha (por ejemplo 3/4/93 ); si no hay parte entera sólo se muestra la hora (por ejemplo 05:34 PM). La presentación de la fecha viene determinada por las configuraciones del sistema.
Long Date	Muestra una fecha según el formato de fecha larga del sistema.
Medium Date	Muestra una fecha utilizando el formato apropiado de fecha mediana para el idioma seleccionado en su aplicación host.
Short Date	Muestra una fecha  utilizando el formato de fecha corta del sistema.
Long Time	Muestra la hora utilizando el formato de hora larga del sistema; incluye horas, minutos y segundos.
Medium Time	Muestra la hora en el formato de 12 horas utilizando horas y minutos y el designador AM y PM
Short Time	Muestra una hora utilizando el formato de 24 horas. Por ejemplo, 17:45.


Formatos de fecha/hora definidos por el usuario (función Format)

La tabla siguiente identifica los caracteres que puede utilizar para crear formatos de fecha/hora definidos por el usuario:

Carácter	Descripción
(:)	Separador de hora. En algunas configuraciones regionales, se pueden utilizar otros caracteres para representar el separador de hora. El separador de hora separa las horas, los minutos y los segundos cuando se da formato a los valores de hora. El carácter real que se utiliza como separador de hora en la salida con formato viene determinado por las configuraciones del sistema.
(/)	Separador de fecha. En algunas configuraciones regionales se pueden utilizar otros caracteres para representar el separador de fecha. El separador de fecha separa el día, el mes y el año cuando se da formato a los valores de fecha. El carácter real que se utiliza como separador de fecha en la salida con formato viene determinado por las configuraciones del sistema.
c	Muestra la fecha como ddddd y la hora como ttttt, en este orden. Sólo se muestra información de fecha si no hay parte fraccionaria en el número de serie de la fecha; sólo se muestra información de hora si no hay una parte entera.
d	Muestra el día como un número sin un cero a la izquierda (1 – 31).
dd	Muestra el día como un número con un cero a la izquierda (01 – 31).
ddd	Muestra el día como abreviatura (Dom – Sáb).
dddd	Muestra el día como nombre completo (Domingo – Sábado).
ddddd	Muestra la fecha como fecha completa (incluyendo el día, el mes y el año), con el formato de acuerdo a la configuración de formato de fecha corta del sistema. En Microsoft Windows, el formato predeterminado de fecha corta para Inglés-US es m/d/aa., aunque cambia según la configuración regional.
dddddd	Muestra un número de serie de fecha como fecha completa (incluyendo el día, el mes y el año), con el formato de acuerdo a la configuración de formato de fecha larga reconocido por el sistema. En Microsoft Windows, el formato predeterminado de fecha larga para Inglés-US es mmmm dd, aaaa, aunque cambia según la configuración regional.
w	Muestra el día de la semana como un número (1 para Domingo hasta 7 para Sábado).
ww	Muestra la semana del año como un número (1 – 54).
m	Muestra el mes como un número sin un cero a la izquierda (1 – 12). Si m sigue inmediatamente a h o hh, se muestra el minuto en lugar del mes.
mm	Muestra el mes como un número con un cero a la izquierda (01 – 12). Si m sigue inmediatamente a h o hh, se muestra el minuto en lugar del mes.
mmm	Muestra el mes como una abreviatura (Ene – Dic).
mmmm	Muestra el mes como nombre de mes completo (Enero –Diciembre).
q	Muestra el trimestre del año como un número (1 – 4).
y	Muestra el día del año como un número (1 – 366).
yy	Muestra el año como un número de dos dígitos (00 – 99).
yyyy	Muestra el año como un número de cuatro dígitos (100 – 9999).
h	Muestra la hora como un número sin ceros a la izquierda (0 – 23).
hh	Muestra la hora como un número con ceros a la izquierda (00 – 23).
n	Muestra el minuto como un número sin ceros a la izquierda (0 – 59).
nn	Muestra el minuto como un número con ceros a la izquierda (00 – 59).
s	Muestra el segundo como un número sin ceros a la izquierda (0 – 59).
ss	Muestra el segundo como un número con ceros a la izquierda (00 – 59).
t t t t t	Muestra una hora con formato completo (incluyendo hora, minutos y segundos), utilizando el separador de hora definido por el formato de hora reconocido por el sistema. Se muestra un cero a la izquierda si está seleccionada la opción de cero a la izquierda y la hora es antes de 10:00 AM o PM En Microsoft Windows, el formato predeterminado de hora es h:mm:ss.
AM/PM	Utilice el reloj de 12 horas para mostrar AM en mayúsculas con cualquier hora antes del mediodía; y mostrar PM en mayúsculas con cualquier hora entre el mediodía y 11:59 P.M.
am/pm	Utilice el reloj de 12 horas para mostrar am en minúsculas con cualquier hora antes del mediodía; y mostrar pm en minúsculas con cualquier hora entre el mediodía y 11:59 P.M.
A/P	Utilice el reloj de 12 horas para mostrar A en mayúsculas con cualquier hora antes del mediodía; y mostrar P en mayúsculas con cualquier hora entre el mediodía y 11:59 P.M.
a/p	Se utiliza el reloj de 12 horas y muestra A en minúsculas con cualquier hora antes del mediodía; muestra P en minúsculas con cualquier hora entre el mediodía y 11:59 P.M.
AMPM	Utiilice el reloj de 12 horas para mostrar el literal de cadena AM como lo defina el sistema con cualquier hora antes del mediodía; y mostrar el literal de cadena PM como lo defina el sistema con cualquier hora entre el mediodía y 11:59 P.M. AMPM puede estar en mayúsculas o en minúsculas, pero las mayúsculas o minúsculas en la cadena que resulta se corresponden con la cadena definida por las configuraciones del sistema. En Microsoft Windows, el formato predeterminado es AM/PM.


Formatos de fecha/hora definidos por el usuario
Formatos de fecha/hora definidos por el usuario (Ejemplo)

Los siguiente son ejemplos de formatos de fecha y hora definidos por el usuario para el 7 de diciembre de 1958:

Formato	Muestra
m/d/aa	12/7/58
d-mmm	7-Dic
d-mmmm-aa	7-Diciembre-58
d mmmm	7 Diciembre
mmmm aa	Diciembre 58
hh:mm AM/PM	08:50 PM
h:mm:ss a/p	8:50:35 p
h:mm	20:50
h:mm:ss	20:50:35
m/d/aa h:mm	12/7/58 20:50


Formatos de cadena definidos por el usuario (función Format)

Puede utilizar cualquiera de los siguientes caracteres para crear una expresión de formato para cadenas:

Carácter	Descripción
@	Marcador de posición de carácter. Muestra un carácter o un espacio en blanco. Si la cadena tiene un carácter en la posición donde aparece @ en la cadena de formato, éste se muestra; de lo contrario, se muestra un espacio en esa posición. Los marcadores de posición se llenan de derecha a izquierda, a menos que haya un carácter ! en la cadena de formato.
&	Marcador de posición de carácter. Muestra un carácter o nada. Si la cadena tiene un carácter en la posición donde aparece &, éste se muestra; de lo contrario, no se muestra nada. Los marcadores de posición se llenan de derecha a izquierda, a menos que haya un carácter ! en la cadena de formato.
<	Forzar minúscula. Muestra todos los caracteres en letra minúscula.
>	Forzar mayúscula. Muestra todos los caracteres en letra mayúscula.
!	Forzar llenar de izquierda a derecha los marcadores de posición. El valor predeterminado es llenar de derecha a izquierda.


Diferentes formatos para valores de cadena diferentes (función Format)

Una expresión de formato para cadenas puede tener una sección o dos secciones separadas por un punto y coma (;).

Si utiliza	El resultado es
Una única sección	El formato se aplica a todos los datos de la cadena.
Dos secciones	La primera sección se aplica a los datos de la cadena; la segunda a los valores Null y a las cadenas de longitud cero ("").


Hex (Función)

Devuelve un tipo String que representa el valor hexadecimal de un número.

Sintaxis

Hex(número)

El argumento número es cualquier expresión numérica o expresión de cadena válida.

Comentarios

Si número no es todavía un número entero, se redondea al número entero más cercano antes de evaluarse.

Si número es	La función Hex devuelve
Null	Null
Empty	Cero (0)
Cualquier otro número	Hasta ocho caracteres hexadecimales
Puede representar números hexadecimales directamente, anteponiendo &H. Por ejemplo, &H10 representa 16 decimal en notación hexadecimal.


InStr (Función)

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	Obligatorio. Expresión de cadena en la que se busca.
String2	Obligatorio. Expresión de cadena buscada.
Compare	Opcional. Especifica el tipo de comparación de cadena. El argumento compare se puede omitir, o puede ser 0, 1 ó 2. Especifique 0 (predeterminado) para realizar una comparación binaria. Especifique 1 para realizar una comparación de texto, sin distinguir entre mayúsculas y minúsculas. Sólo para Microsoft Access, especifique 2 para realizar una comparación basada en información contenida en su base de datos. Si compare es Null, se produce un error. Si se omite compare, el valor Option Compare determina el tipo de comparación.
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
Comentarios

La función InStrB se utiliza con los datos de byte contenidos en una cadena. En lugar de devolver la posición del carácter de la primera aparición de una cadena en otra, InStrB devuelve la posición del byte.


LCase (Función)

Devuelve un tipo String que se ha convertido a minúsculas.

Sintaxis

LCase(cadena)

El argumento cadena es cualquier expresión de cadena válida. Si string contiene Null, se devuelve Null.

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.


Left (Función)

Devuelve un tipo Variant (String) que contiene un número especificado de caracteres del lado izquierdo de una cadena.

Sintaxis

Left(string, length)

La sintaxis de la función Left tiene estos argumentos con nombre:

Parte	Descripción
string	Obligatorio. 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	Se requiere, 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.
Comentarios

Para determinar el número de caracteres en string, utilice la función Len.

Nota   Utilice la función LeftB con datos de byte contenidos en una cadena. En lugar de especificar el número de caracteres que se van a devolver, length especifica el número de bytes.


Len (Función)

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	Cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null.
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.
Comentarios

Se deben especificar uno (y sólo uno) de los dos argumentos posibles. Con tipos de datos definidos por el usuario, Len devuelve el tamaño como se escribirá en el archivo.

Nota   Utilice la función LenB con datos de byte incluidos en una cadena. En lugar de devolver el número de caracteres en una cadena, LenB devuelve el número de bytes utilizados para representar esa cadena. Con tipos de datos definidos por el usuario, LenB devuelve el tamaño en memoria, incluyendo cualquier relleno entre los elementos.

Nota   Puede que Len no sea capaz de determinar el número real requerido de bytes de almacenamiento cuando se utiliza con cadenas de longitud variable en tipos de datos definidos por el usuario.


LSet (Instrucción)

Alinea a la izquierda una cadena en una variable de cadena o copia una variable de un tipo de datos definido por el usuario a otra variable de un tipo de datos diferente definido por el usuario.

Sintaxis

LSet varcadena = cadena

LSet nombrevar1 = nombrevar2

La sintaxis de la instrucción LSet consta de las siguientes partes:

Parte	Descripción
varcadena	Obligatorio. Nombre de variable de cadena.
cadena	Obligatorio. Expresión de cadena que se va a alinear a la izquierda en varcadena.
nombrevar1	Obligatorio. Nombre de variable del tipo de datos definido por el usuario a la que se copia.
nombrevar2	Obligatorio. Nombre de variable del tipo de datos definido por el usuario desde la que se copia.
Comentarios

LSet reemplaza con espacios en blanco los caracteres sobrantes en varcadena.

Si cadena es más larga que varcadena, LSet coloca sólo los caracteres que están más a la izquierda, hasta la longitud de varcadena, en varcadena.

Advertencia   No se recomienda utilizar LSet para copiar una variable de un tipo de datos definido por el usuario a una variable de otro tipo de datos diferente definido por el usuario. Copiar datos de un tipo de datos en un espacio reservado para otro tipo de datos diferente puede ocasionar resultados imprevisibles.

Cuando copia una variable de un tipo de datos definido por el usuario a otro, simplemente se copian los datos binarios de una variable en el espacio de memoria de la otra, sin tener en cuenta los tipos de datos especificados para los elementos incluidos dentro de dicho espacio.


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)

El argumento cadena obligatorio es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null.


Mid (Función)

Devuelve un tipo Variant (String) que contiene un número especificado de caracteres de una cadena.

Sintaxis

Mid(string, start[, length])

La sintaxis de la función Mid tiene estos argumentos con nombre:

Parte	Descripción
string	Obligatorio. Expresión de cadena de la cual se devuelven los caracteres. Si string contiene Null, se devuelve Null.
start	Obligatorio; 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	Opcional, 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.

Nota   Utilice la función MidB con datos de byte incluidos en una cadena. En lugar de especificar el número de caracteres, los argumentos especifican el número de bytes.


Mid (Instrucción)

Reemplaza un número especificado de caracteres en una variable de tipo Variant (String) con caracteres de otra cadena.

Sintaxis

Mid(varcadena, inicio[, longitud]) = cadena

La sintaxis de la función Mid consta de las siguientes partes:

Parte	Descripción
varcadena	Obligatorio. Nombre de la variable de cadena que se va a modificar.
inicio	Se requiere; un tipo Variant (Long). Posición de carácter en varcadena donde empieza el texto que se va a reemplazar.
longitud	Opcional; un tipo Variant (Long). Número de caracteres que se va a reemplazar. Si se omite se utiliza toda la cadena.
cadena	Obligatorio. Expresión de cadena que reemplaza parte de varcadena.
Comentarios

El número de caracteres reemplazados es siempre menor o igual al número de caracteres en varcadena.

Nota   Utilice la instrucción MidB con datos de byte incluidos en una cadena. En la instrucción MidB, inicio especifica la posición de byte dentro de varcadena donde comienza la sustitución y longitud especifica el número de bytes que se va a reemplazar.


Oct (Función)

Devuelve un tipo Variant (String) que representa el valor octal de un número.

Sintaxis

Oct(número)

El argumento número necesario es cualquier expresión numérica o expresión de cadena válida.

Comentarios

Si número no es todavía un número entero, se redondea al número entero más cercano antes de evaluarse.

Si número es	La función Oct devuelve
Null	Null
Empty	Cero (0)
Cualquier otro número	Hasta 11 caracteres octales
Puede representar números octales directamente, anteponiendo &O. Por ejemplo, &O10 en la notación octal representa a 8 en base diez.


Right (Función)

Devuelve un tipo Variant (String) que contiene un número especificado de caracteres del lado derecho de una cadena.

Sintaxis

Right(string, lenght)

La sintaxis de la función Right tiene estos argumentos con nombre:

Parte	Descripción
string	Obligatorio. 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	Se requiere, 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.

Nota   Utilice la función RightB con datos de byte incluidos en una cadena. En lugar de especificar el número de caracteres para devolver, longitud especifica el número de bytes.


RSet (Instrucción)

Alinea a la derecha una cadena dentro de una variable de cadena.

Sintaxis

RSet varcadena = cadena

La sintaxis de la instrucción RSet consta de las siguientes partes:

Parte	Descripción
varcadena	Obligatorio. Nombre de una variable de cadena.
cadena	Obligatorio. Expresión de cadena que se va a alinear a la derecha en varcadena.
Comentarios

Si varcadena es más larga que cadena, RSet reemplaza cualquier carácter sobrante a la izquierda de varcadena con espacios en blanco, empezando desde el principio.

Nota   RSet no se puede utilizar con tipos de datos definidos por el usuario.


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.


Str (Función)

Devuelve en un tipo Variant (String) la representación de cadena de un número.

Sintaxis

Str(número)

El argumento número necesario es un tipo Long que contiene una expresión numérica válida.

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.


StrComp (Función)

Devuelve un tipo Variant (Integer) que indica el resultado de una comparación de cadena.

Sintaxis

StrComp(string1, string2[, compare])

La sintaxis de la función StrComp tiene estos argumentos con nombre:

Parte	Descripción
string1	Obligatorio. Cualquier expresión de cadena válida.
string2	Obligatorio. Cualquier expresión de cadena válida.
compare	Opcional. Especifica el tipo de comparación de cadena. Se puede omitir el argumento compare, o puede ser 0, 1 ó 2. Especifique 0 (predeterminado) para realizar una comparación binaria. Especifique 1 para realizar una comparación de texto. Sólo para Microsoft Access, especifique 2 para realizar una comparación basada en información contenida en su base de datos. Si compare es Null, se produce un error. Si se omite compare, el valor de Option Compare determina el tipo de comparación.
Valores devueltos

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


StrConv (Función)

Devuelve un tipo Variant (String) que se convierte como se especifica.

Sintaxis

StrConv(string, conversion)

La sintaxis de la función StrConv tiene estos argumentos con nombre:

Parte	Descripción
string	Obligatorio. Expresión de cadena que se va a convertir.
conversion	Obligatorio; un tipo Integer. La suma de los valores que especifica el tipo de conversión que se va a realizar.
Valores

Los valores del argumento conversion son:

Constant	Valor	Descripción
vbUpperCase	1	Convierte la cadena a caracteres en mayúscula.
vbLowerCase	2	Convierte la cadena a caracteres en minúscula.
vbProperCase	3	Convierte a mayúscula la primera letra de cada palabra de la cadena.
vbWide*	4*	Convierte los caracteres cortos (un único byte) de la cadena a caracteres anchos (doble byte).
vbNarrow*	8*	Convierte los caracteres anchos (doble byte) de la cadena a caracteres cortos (un único byte).
vbKatakana**	16**	Convierte los caracteres Hiragana de la cadena a caracteres Katakana.
vbHiragana**	32**	Convierte los caracteres Katakana de la cadena a caracteres Hiragana.
vbUnicode	64	Convierte la cadena a Unicode utilizando la página de códigos predeterminada del sistema.
vbFromUnicode	128	Convierte la cadena de Unicode a la página de códigos predeterminada del sistema.
*	Aplicable a las configuraciones regionales del Lejano Oriente.

**	Se aplica solamente a Japón.

Nota   Estas constantes están especificadas por Visual Basic for Applications. Como resultado, se pueden utilizar en cualquier parte de su código en lugar de los valores reales. La mayoría se pueden combinar, por ejemplo, vbUpperCase + vbWide, excepto cuando se excluyen mutuamente, por ejemplo, vbUnicode + vbFromUnicode. Las constantes vbWide, vbNarrow, vbKatakana y vbHiragana originan errores en tiempo de ejecución cuando utilizan configuraciones regionales donde no se aplican.

Los siguientes son separadores de palabras válidos para mayúsculas/minúsculas: Null (Chr$(0)), tabulador horizontal (Chr$(9)), avance de línea (Chr$(10)), tabulador vertical (Chr$(11)), avance de página (Chr$(12)), retorno de carro (Chr$(13)), espacio (SBCS) (Chr$(32)). El valor real de espacio varía por el país para DBCS.


String (Función)

Devuelve un tipo Variant (String) que contiene una cadena de caracteres que se repite de la longitud especificada.

Sintaxis

String(number, character)

La sintaxis de la función String tiene estos argumentos con nombre:

Parte	Descripción
number	Obligatorio; un tipo Long. Longitud de la cadena devuelta. Si número contiene Null, se devuelve Null.
character	Obligatorio; un tipo Variant. Código de carácter que especifica el carácter o la expresión de cadena cuyo primer carácter se utiliza para construir la cadena devuelta. Si character contiene Null, se devuelve Null.
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


UCase (Función)

Devuelve un tipo Variant (String) que contiene una cadena especificada que se ha convertido a mayúsculas.

Sintaxis

UCase(cadena)

El argumento cadena necesario es cualquier expresión de cadena válida. Si string contiene Null, se devuelve Null.

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.


Palabras clave por tarea

Categoría	Descripción
Matrices	Crear, definir y utilizar matrices.
Directivas del compilador	Controlar el comportamiento del compilador.
Flujo de control	Realizar bucles y controlar el flujo del procedimiento.
Conversión	Convertir números y tipos de datos.
Tipos de datos	Tipos de datos y subtipos Variant.
Fechas y horas	Convertir y utilizar expresiones de fecha y hora.
Directorios y archivos	Controlar el sistema de archivos y procesar archivos.
Errores	Interceptar y devolver valores de error.
Financieras	Realizar cálculos financieros.
Entrada y salida	Recibir una entrada y mostrar o imprimir el resultado.
Matemáticas	Realizar cálculos trigonométricos u otros cálculos matemáticos.
Diversas	Iniciar otras aplicaciones y procesar eventos.
Operadores	Comparar expresiones y otras operaciones.
Manipulación de cadenas	Manipular cadenas y datos de tipo String.
Variables y constantes	Declarar y definir variables y constantes.


Matrices, Resumen de palabras clave

Acción	Palabras clave
Comprobar una matriz.	IsArray
Crear una matriz.	Array
Cambiar el límite inferior predeterminado.	Option Base
Declarar e inicializar una matriz.	Dim, Private, Public, ReDim, Static
Encontrar los límites de una matriz.	LBound, UBound
Reinicializar una matriz.	Erase, ReDim


Objeto Collection, Resumen de palabras clave

Acción	Palabras clave
Crear un objeto Collection.	Collection
Agregar un objeto a una colección.	Add
Quitar un objeto de una colección.	Remove
Hacer referencia a un objeto de una colección.	Item


Directivas del compilador, Resumen de palabras clave

Acción	Palabras clave
Definir una constante del compilador.	#Const
Compilar bloques seleccionados de código.	#If...Then...#Else


Flujo de control, Resumen de palabras clave

Acción	Palabras clave
Bifurcar.	GoSub...Return, GoTo, On Error, On...GoSub, On...GoTo
Salir o hacer una pausa en la ejecución de un programa.	DoEvents, End, Exit, Stop
Realizar bucles.	Do...Loop, For...Next, For Each...Next, While...Wend, With
Tomar decisiones.	Choose, If...Then...Else, Select Case, Switch
Utilizar procedimientos.	Call, Function, Property Get, Property Let, Property Set, Sub


Conversión, Resumen de palabras clave

Acción	Palabras clave
Valor ANSI a cadena.	Chr
Cadena a minúsculas o a mayúsculas.	Format, LCase, UCase
Fecha a número de serie.	DateSerial, DateValue
Número decimal a otra base.	Hex, Oct
Número a cadena.	Format, Str
Un tipo de dato a otro.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Fecha a día, mes, día de la semana o año.	Day, Month, Weekday, Year
Hora a hora, minuto o segundo.	Hour, Minute, Second
Cadena a valor ASCII.	Asc
Cadena a número.	Val
Hora a número de serie.	TimeSerial, TimeValue


Tipos de datos, Resumen de palabras clave

Acción	Palabras clave
Convertir entre tipos de datos.	CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int
Establecer tipos de datos intrínsecos.	Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (predeterminado)
Comprobar los tipos de datos.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject


Fechas y horas, Resumen de palabras clave

Acción	Palabras clave
Obtener la fecha o la hora actuales.	Date, Now, Time
Realizar cálculos de fechas.	DateAdd, DateDiff, DatePart
Devolver una fecha.	DateSerial, DateValue
Devolver una hora.	TimeSerial, TimeValue
Establecer la fecha o la hora.	Date, Time
Medir el tiempo de un proceso.	Timer


Directorios y archivos, Resumen de palabras clave

Acción	Palabras clave
Cambiar el directorio o la carpeta.	ChDir
Cambiar la unidad.	ChDrive
Copiar un archivo.	FileCopy
Crear un directorio o una carpeta.	MkDir
Quitar un directorio o una carpeta.	RmDir
Cambiar el nombre de un archivo, un directorio o una carpeta.	Name
Devolver la ruta de acceso actual.	CurDir
Devolver la fecha y la hora del archivo.	FileDateTime
Devolver los atributos de un archivo, directorio o etiqueta.	GetAttr
Devolver el tamaño del archivo.	FileLen
Devolver el nombre del archivo o la etiqueta de volumen.	Dir
Establecer la información de atributo de un archivo.	SetAttr


Errores, Resumen de palabras clave

Acción	Palabras clave
Generar errores en tiempo de ejecución.	Clear, Error, Raise
Obtener mensajes de error.	Error
Proporcionar información del error.	Err
Devolver un tipo Variant de Error.	CVErr
Interceptar errores en tiempo de ejecución.	On Error, Resume
Comprobar el tipo.	IsError


Financieras, Resumen de palabras clave

Acción	Palabras clave
Calcular la depreciación.	DDB, SLN, SYD
Calcular el valor futuro.	FV
Calcular la tasa de interés.	Rate
Calcular la tasa interna de retorno.	IRR, MIRR
Calcular el número de pagos.	NPer
Calcular los pagos.	IPmt, Pmt, PPmt
Calcular el valor presente.	NPV, PV


Entrada y salida, Resumen de palabras clave

Acción	Palabras clave
Tener acceso o crear un archivo.	Open
Cerrar archivos.	Close, Reset
Controlar la apariencia del resultado.	Format, Print, Print #, Spc, Tab, Width #
Copiar un archivo.	FileCopy
Obtener información de un archivo.	EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek
Administrar archivos.	Dir, Kill, Lock, Unlock, Name
Leer un archivo.	Get, Input, Input #, Line Input #
Devolver el tamaño de un archivo.	FileLen
Establecer u obtener los atributos de un archivo.	FileAttr, GetAttr, SetAttr
Establecer la posición de lectura y escritura en un archivo.	Seek
Escribir en un archivo.	Print #, Put, Write #


Matemáticas, Resumen de palabras clave

Acción	Palabras clave
Derivar funciones trigonométricas.	Atn, Cos, Sin, Tan
Realizar cálculos generales.	Exp, Log, Sqr
Generar números aleatorios.	Randomize, Rnd
Obtener el valor absoluto.	Abs
Obtener el signo de una expresión.	Sgn
Realizar conversiones numéricas.	Fix, Int


Diversas, Resumen de palabras clave

Acción	Palabras clave
Procesar eventos pendientes.	DoEvents
Ejecutar otros programas.	AppActivate, Shell
Enviar pulsaciones de teclas a una aplicación.	SendKeys
Hacer sonar un pitido en el equipo.	Beep
Sistema.	Environ
Proporcionar una cadena en la línea de comandos.	Command
Macintosh.	MacID, MacScript
Automatización.	CreateObject, GetObject
Color.	QBColor, RGB


Operadores, Resumen de palabras clave

Acción	Palabras clave
Realizar operaciones aritméticas.	^, – , *,  /, \, Mod, +, &
Realizar comparaciones.	=, <>, <, >, <=, >=, Like, Is
Realizar operaciones lógicas.	Not, And, Or, Xor, Eqv, Imp


Registro, Resumen de palabras clave

Acción	Palabras clave
Eliminar configuraciones del programa.	DeleteSetting
Leer configuraciones del programa.	GetSetting, GetAllSettings
Guardar configuraciones del programa.	SaveSetting


Manipulación de cadenas, Resumen de palabras clave

Acción	Palabras clave
Comparar dos cadenas.	StrComp
Convertir cadenas.	StrConv
Convertir a minúsculas o mayúsculas.	Format, LCase, UCase
Crear una cadena de caracteres repetidos.	Space, String
Averiguar el tamaño de una cadena.	Len
Dar formato a una cadena.	Format
Justificar una cadena.	LSet, RSet
Manipular cadenas.	InStr, Left, LTrim, Mid, Right, RTrim, Trim
Establecer las reglas de comparación de cadenas.	Option Compare
Trabajar con valores ASCII y ANSI.	Asc, Chr


Variables y constantes, Resumen de palabras clave

Acción	Palabras clave
Asignar un valor.	Let
Declarar variables o constantes.	Const, Dim, Private, Public, New, Static
Declarar un módulo como privado.	Option Private Module
Obtener información sobre un tipo Variant.	IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType
Hacer referencia al objeto actual.	Me
Solicitar declaraciones explícitas de variables.	Option Explicit
Establecer un tipo de datos predeterminado.	Deftipo


Errores interceptables

Mientras una aplicación está en ejecución pueden ocurrir errores interceptables. Algunos de estos errores pueden ocurrir también durante el periodo de desarrollo o durante el tiempo de complilación. Puede probar y responder a estos errores interceptables mediante la instrucción On Error y el objeto Err. Los números de error no usados en el intervalo de 1 a 1000 están reservados para futuras versiones de Visual Basic.

Código	Mensaje
3	Se ha encontrado Return sin Gosub
5	Llamada o argumento a procedimiento no válido
6	Desbordamiento
7	No hay suficiente memoria
9	El subíndice está fuera del intervalo
10	Esta matriz está bloqueada de manera fija o temporal
11	División entre cero
13	No coinciden los tipos
14	No hay suficiente espacio de cadena
16	La expresión de cadena es demasiado compleja
17	No se puede realizar la operación solicitada
18	Se ha producido una interrupción por parte del usuario
20	Reanudar sin errores
28	No hay suficiente espacio de pila
35	No se ha definido Sub, Function o Property
47	Hay demasiados clientes de la aplicación DLL
48	Error al cargar la DLL
49	Convención de llamada a DLL incorrecta
51	Error interno
52	Nombre o número de archivo incorrecto
53	No se puede encontrar el archivo especificado
54	Modo de archivo incorrecto
55	El archivo ya está abierto
57	Error en dispositivo de entrada y salida
58	El archivo ya existe
59	Longitud de registro incorrecta
61	Disco lleno
62	Entrada pasó el final del archivo
63	Número de registro incorrecto
67	Hay demasiados archivos abiertos
68	Dispositivo no disponible
70	Permiso no autorizado
71	El disco no está listo
74	No se puede cambiar el nombre a una unidad de disco diferente
75	Error de acceso a la ruta o archivo
76	No se ha encontrado la ruta de acceso
91	Variable del objeto o variable de bloque With no establecida
92	El bucle For no se ha inicializado
93	Cadena de patrón no válida
94	Uso de Null no válido
97	Imposible llamar a un procedimiento friend de un objeto que no tiene una instancia de la clase definida
298	No se puede cargar la DLL especificada del sistema
320	No se pueden utilizar nombres de dispositivos de caracteres en nombres de archivos
321	El formato de archivo no es válido
322	Imposible crear un archivo temporal necesario
325	Formato no válido en el archivo de recursos
327	No se encontró el valor del dato
328	Parámetro no válido. No se puede escribir matrices
335	No se puede acceder al registro del sistema
336	El componente ActiveX no está registrado correctamente
337	No se encontró el componente ActiveX
338	El componente ActiveX no se ejecutó correctamente
360	Ya se ha cargado el objeto
361	No se puede cargar o descargar este objeto
363	No se ha encontrado el control ActiveX especificado
364	El objeto se ha descargado
365	No se puede descargar dentro de este contexto
368	El archivo especificado no está actualizado. Este programa necesita una versión más reciente
371	El objeto especificado no se puede utilizar como un formulario propietario para Show()
380	Valor de propiedad no válido
381	El índice de la matriz de propiedades no es válido
382	Set no se admite en tiempo de ejecución
383	Set no se admite (propiedad de sólo lectura)
385	Se necesita un índice de matriz de propiedad
387	Set no está permitido
393	Imposible ejecutar Property Get en tiempo de ejecución
394	Imposible ejecutar Property Get en una propiedad de sólo escritura
400	El formulario ya está mostrado; no se puede mostrar en forma modal
402	Primero debe cerrar u ocultar el formulario modal superior
419	Permiso denegado para utilizar el objeto
422	No se encontró la propiedad
423	No se ha encontrado la propiedad o el método
424	Se requiere un objeto
425	El uso del objeto no es válido
429	El componente ActiveX no puede crear el objeto o devolver una referencia a este objeto
430	La clase no soporta automatización OLE
432	No se ha encontrado un nombre de archivo o un nombre de clase durante la operación de Automatización OLE
438	El objeto no acepta esta propiedad o método
440	Error de automatización OLE
442	Se ha perdido la conexión con la biblioteca de tipos o con la biblioteca de objetos para procesos remotos
443	El objeto de Automatización OLE no tiene un valor predeterminado
445	El objeto no admite esta acción
446	El objeto no admite argumentos con nombre
447	El objeto no acepta la configuración regional vigente
448	No se ha encontrado el argumento con nombre
449	El argumento no es opcional
450	Número de argumentos incorrecto
451	El objeto no es una colección
452	Número ordinal no válido
453	La función no ha sido definida en la biblioteca (DLL)
454	No se ha encontrado el recurso de código
455	Error en el bloqueo de los recursos del código
457	La tecla ya está asociada con algún elemento de está colección
458	La variable utiliza un tipo OLE no admitido en Visual Basic
459	El objeto o la clase no admite el conjunto de eventos
460	El formato del Portapapeles no es válido
461	El formato especificado no coincide con el formato de los datos
480	No se puede crear una imagen AutoRedraw
481	Imagen no válida
482	Error de impresora
483	El controlador de impresora no admite la propiedad especificada
484	Problemas al obtener información de la impresora desde el sistema; asegúrese de que la impresora está configurada correctamente
485	El tipo de imagen no es válido
486	Can't print form image to this type of printer
520	No se puede vaciar el Portapapeles
521	No se puede abrir el Portapapeles
735	Imposible guardar el archivo en el directorio TEMP
744	No se encontró el texto de búsqueda
746	Sustituciones demasiado largas
31001	Sin memoria
31004	Ningún objeto
31018	La clase no está establecida
31027	Unable to activate object
31032	Imposible crear el objeto incrustado
31036	Error al guardar el archivo
31037	Error al cargar el archivo


Juego de caracteres (128 – 255)

128	•	160	[espacio]	192	À	224	à
129	•	161	¡	193	Á	225	á
130	•	162	¢	194	Â	226	â
131	•	163	£	195	Ã	227	ã
132	•	164	¤	196	Ä	228	ä
133	•	165	¥	197	Å	229	å
134	•	166	¦	198	Æ	230	æ
135	•	167	§	199	Ç	231	ç
136	•	168	¨	200	È	232	è
137	•	169	©	201	É	233	é
138	•	170	ª	202	Ê	234	ê
139	•	171	«	203	Ë	235	ë
140	•	172	¬	204	Ì	236	ì
141	•	173	­	205	Í	237	í
142	•	174	®	206	Î	238	î
143	•	175	¯	207	Ï	239	ï
144	•	176	°	208	Ð	240	ð
145	‘	177	±	209	Ñ	241	ñ
146	’	178	²	210	Ò	242	ò
147	•	179	³	211	Ó	243	ó
148	•	180	´	212	Ô	244	ô
149	•	181	µ	213	Õ	245	õ
150	•	182	¶	214	Ö	246	ö
151	•	183	·	215	×	247	÷
152	•	184	¸	216	Ø	248	ø
153	•	185	¹	217	Ù	249	ù
154	•	186	º	218	Ú	250	ú
155	•	187	»	219	Û	251	û
156	•	188	¼	220	Ü	252	ü
157	•	189	½	221	Ý	253	ý
158	•	190	¾	222	Þ	254	þ
159	•	191	¿	223	ß	255	ÿ
•	Microsoft Windows no acepta estos caracteres.