De la MSDN [...]Tipos de datos Las variables son marcadores de posición que se utilizan para almacenar valores; tienen nombre y un tipo de dato. El tipo de dato de la variable determina cómo se almacenan los bits que representan esos valores en la memoria del equipo. Cuando declare una variable, también puede proporcionarle un tipo de dato. Todas las variables tienen un tipo de dato que determina la clase de datos que pueden almacenar. De forma predeterminada, si no proporciona un tipo de dato, la variable toma el tipo de dato Variant. El tipo de dato Variant es como un camaleón; puede representar diferentes tipos de datos en distintas situaciones. No tiene que convertir estos tipos de datos cuando los asigne a una variable Variant: Visual Basic realiza automáticamente cualquier conversión necesaria. Sin embargo, si sabe que una variable almacenará siempre un tipo de dato determinado, Visual Basic tratará de forma más eficiente los datos si declara la variable con ese tipo. Por ejemplo, se representa mejor una variable que va almacenar nombres de personas como el tipo de dato String, ya que un nombre está siempre compuesto de caracteres. Los tipos de datos se aplican a otras cosas además de a las variables. Cuando asigna un valor a una propiedad, dicho valor tiene un tipo de dato; los argumentos de las funciones tienen también tipos de datos. De hecho, todo lo relacionado con datos en Visual Basic tiene un tipo de dato. También puede declarar matrices de cualquiera de los tipos fundamentales. Para obtener más información Para obtener más información, vea la sección "Matrices", más adelante en este capítulo. La selección de tipos de datos para mejorar el rendimiento de la aplicación se explica en "Diseñar buscando el rendimiento y la compatibilidad". Declarar variables con tipos de datos Antes de usar una variable que no sea Variant debe usar las instrucciones Private, Public, Dim o Static para declararla As tipo. Por ejemplo, la siguiente instrucción declara un tipo Integer, Double, String y Currency, respectivamente: Private I As Integer Dim Cantidad As Double Static SuNombre As String Public PagadoPorJuan As Currency La instrucción de declaración puede combinar varias declaraciones, como en las instrucciones siguientes: Private I As Integer, Amt As Double Private SuNombre As String, PagadoPorJuan As Currency Private Prueba, Cantidad, J As Integer Nota Si no proporciona un tipo de dato, se asigna a la variable el tipo predeterminado. En el ejemplo anterior, las variables Prueba y Cantidad tienen un tipo de dato Variant. Esto puede sorprenderle si su experiencia con otros lenguajes de programación le lleva a esperar que todas las variables contenidas en la misma instrucción de declaración tengan el mismo tipo que ha especificado (en este caso, Integer). Tipos de datos numéricos Visual Basic proporciona varios tipos de datos numéricos: Integer, Long (entero largo), Single (signo flotante de simple precisión), Double (signo flotante de doble precisión) y Currency. Usar un tipo de dato numérico emplea normalmente menos espacio de almacenamiento que un tipo Variant. Si sabe que una variable siempre va a almacenar números enteros (como 12) en vez de números fraccionarios (como 3,57), declárela como un tipo Integer o Long. Las operaciones con enteros son más rápidas y estos tipos consumen menos memoria que otros tipos de datos. Resultan especialmente útiles como variables de contador en bucles For...Next. Para obtener más información Para obtener más información acerca de las estructuras de control, vea "Introducción a las estructuras de control", más adelante en este mismo capítulo. Si la variable contiene una fracción, declárela como variable Single, Double o Currency. El tipo de dato Currency acepta hasta cuatro dígitos a la derecha del separador decimal y hasta quince dígitos a la izquierda; es un tipo de dato de signo fijo adecuado para cálculos monetarios. Los números de signo flotante (Single y Double) tienen más intervalo que Currency, pero pueden estar sujetos a pequeños errores de redondeo. Nota Los valores de signo flotante se pueden expresar como mmmEeee o mmmDeee, donde mmm es la mantisa y eee el exponente (potencia de 10). El valor positivo más alto de un tipo de dato Single es 3,402823E+38 ó 3,4 veces 10 a la 38a potencia; el valor positivo más alto de un tipo de dato Double es 1,79769313486232D+308 o alrededor de 1,8 veces 10 a la 308a potencia. Si utiliza D para separar la mantisa y el exponente en un literal numérico, el valor se tratará como un tipo de dato Double. Igualmente, usar E de la misma manera hace que el valor se trate como un tipo de dato Single. El tipo de dato Byte Si la variable contiene datos binarios, declárela como matriz de tipo Byte. (Las matrices se describen en "Matrices", más adelante en este mismo capítulo). Usar variables Byte para almacenar datos binarios los preserva durante las conversiones de formato. Cuando se convierten las variables String entre los formatos ANSI y Unicode, los datos binarios de la variable resultan dañados. Visual Basic puede convertir automáticamente entre ANSI y Unicode al: Leer archivos Escribir archivos Llamar a archivos DLL Llamar a métodos y propiedades en objetos Todos los operadores que funcionan con enteros funcionan con el tipo de dato Byte excepto el de resta unaria. Puesto que Byte es un tipo sin signo con el intervalo 0-255, no puede representar un valor negativo. Así, para la resta unaria, Visual Basic convierte antes el tipo Byte en un entero con signo. Es posible asignar todas las variables numéricas entre sí y a variables del tipo Variant. Visual Basic redondea en vez de truncar la parte fraccionaria de un número de signo flotante antes de asignarlo a un entero. Para obtener más información Para obtener más detalles acerca de las conversiones Unicode y ANSI, vea el capítulo 16 "Aspectos internacionales". El tipo de dato String Si tiene una variable que siempre contendrá una cadena y nunca un valor numérico, puede declararla del tipo String: Private S As String Así podrá asignar cadenas a esta variable y manipularla mediante funciones de cadena: S = "Base de datos" S = Left(S, 4) De forma predeterminada, una variable o argumento de cadena es una cadena de longitud variable; la cadena crece o disminuye según le asigne nuevos datos. También puede declarar cadenas de longitud fija. Especifique una cadena de longitud fija con esta sintaxis: String * tamaño Por ejemplo, para declarar una cadena que tiene siempre 50 caracteres de longitud, utilice un código como este: Dim NombreEmp As String * 50 Si asigna una cadena con menos de 50 caracteres, NombreEmp se rellenará con espacios en blanco hasta el total de 50 caracteres. Si asigna una cadena demasiado larga a una cadena de longitud fija, Visual Basic simplemente truncará los caracteres. Puesto que las cadenas de longitud fija se rellenan con espacios al final, verá que las funciones Trim y RTrim, que quitan los espacios en blanco, resultan muy útiles cuando se trabaja con ellas. Las cadenas de longitud fija se pueden declarar en módulos estándar como Public o Private. En módulos de clase y formulario, las cadenas de longitud fija deben declararse como Private. Para obtener más información Vea "Funciones LTrim, RTrim y Trim" en la Referencia del lenguaje. Intercambiar cadenas y números Puede asignar una cadena a una variable numérica si la cadena representa un valor numérico. También es posible asignar un valor numérico a una variable de cadena. Por ejemplo, coloque un botón de comando, un cuadro de texto y un cuadro de lista en un formulario. Escriba el código siguiente en el evento Click del botón de comando. Ejecute la aplicación y haga clic en el botón de comando. Private Sub Command1_Click() Dim intX As Integer Dim strY As String strY = "100.23" intX = strY ' Pasa la cadena a una variable numérica. List1.AddItem Cos(strY) ' Agrega el coseno del número de la ' cadena al cuadro de lista. strY = Cos(strY) ' Pasa el coseno a la variable de cadena. Text1.Text = strY ' Se imprime la variable de cadena en el ' cuadro de texto. End Sub Visual Basic convertirá automáticamente las variables al tipo de dato apropiado. Debe tener cuidado cuando intercambie números y cadenas, ya que pasar un valor no numérico a una cadena producirá un error de tiempo de ejecución. El tipo de dato Boolean Si tiene una variable que siempre contendrá solamente información del tipo verdadero y falso, sí y no o activado o desactivado, puede declararla del tipo Boolean. El valor predeterminado de Boolean es False. En el siguiente ejemplo, blnEjecutando es una variable Boolean que almacena un simple sí o no. Dim blnEjecutando As Boolean ' Comprueba si la cinta está en marcha. If Recorder.Direction = 1 Then blnEjecutando = True End if El tipo de dato Date Los valores de fecha y hora pueden almacenarse en el tipo de dato específico Date en variables Variant. En ambos tipos se aplican las mismas características generales a las fechas. Para obtener más información Vea la sección "Valores de fecha y hora almacenados en tipos Variant" en "Temas avanzados sobre Variant". Cuando se convierten otros tipos de datos numéricos en Date, los valores que hay a la izquierda del signo decimal representan la información de fecha, mientras que los valores que hay 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. El tipo de dato Object Las variables Object se almacenan como direcciones de 32 bits (4 bytes) que hacen referencia a objetos dentro de una aplicación o de cualquier otra aplicación. Una variable declarada como Object es una variable que puede asignarse subsiguientemente (mediante la instrucción Set) para referirse a cualquier objeto real reconocido por la aplicación. Dim objDb As Object Set objDb = OpenDatabase("c:\Vb5\biblio.mdb") Cuando declare variables de objeto, intente usar clases específicas (como TextBox en vez de Control o, en el caso anterior, Database en vez de Object) mejor que el tipo genérico Object. Visual Basic puede resolver referencias a las propiedades y métodos de objetos con tipos específicos antes de que ejecute una aplicación. Esto permite a la aplicación funcionar más rápido en tiempo de ejecución. En el Examinador de objetos se muestran las clases específicas. Cuando trabaje con objetos de otras aplicaciones, en vez de usar Variant o el tipo genérico Object, declare los objetos como se muestran en la lista Clases en el Examinador de objetos. Esto asegura que Visual Basic reconozca el tipo específico de objeto al que está haciendo referencia, lo que permite resolver la referencia en tiempo de ejecución. Para obtener más información Para obtener más información acerca de la creación y asignación de objetos y variables de objetos, vea "Crear objetos" más adelante en este mismo capítulo. Convertir tipos de datos Visual Basic proporciona varias funciones de conversión que puede usar para convertir valores en tipos de datos específicos. Por ejemplo, para convertir un valor a Currency, utilice la función CCur: PagoPorSemana = CCur(horas * PagoPorHora) Funciones de conversión Convierten una expresión en Cbool Boolean Cbyte Byte Ccur Currency Cdate Date CDbl Double Cint Integer CLng Long CSng Single CStr String Cvar Variant CVErr Error Nota Los valores que se pasan a una función de conversión deben ser válidos para el tipo de dato de destino o se producirá un error. Por ejemplo, si intenta convertir un tipo Long en un Integer, el tipo Long debe estar en el intervalo válido del tipo de dato Integer. Para obtener más información Busque las funciones específicas de conversión en la Referencia del lenguaje. El tipo de dato Variant Una variable Variant es capaz de almacenar todos los tipos de datos definidos en el sistema. No tiene que convertir entre esos tipos de datos si los asigna a una variable Variant; Visual Basic realiza automáticamente cualquier conversión necesaria. Por ejemplo: Dim AlgúnValor ' De forma predeterminada es un tipo Variant. AlgúnValor = "17" ' AlgúnValor contiene "17" (cadena de dos ' caracteres). AlgúnValor = AlgúnValor - 15 ' AlgúnValor ahora contiene ' el valor numérico 2. AlgúnValor = "U" & AlgúnValor ' AlgúnValor ahora contiene ' "U2" (una cadena de dos ' caracteres). Si bien puede realizar operaciones con variables Variant sin saber exactamente el tipo de dato que contienen, hay algunas trampas que debe evitar. Si realiza operaciones aritméticas o funciones sobre un Variant, el Variant debe contener un número. Para obtener más detalles, vea la sección "Valores numéricos almacenados en tipos Variant" en "Temas avanzados sobre Variant". Si está concatenando cadenas, utilice el operador & en vez del operador +. Para obtener más detalles, vea la sección "Cadenas almacenadas en tipos Variant" en "Temas avanzados sobre Variant". Además de poder actuar como otros tipos de datos estándar, los Variant también pueden contener tres valores especiales: Empty, Null y Error. El valor Empty A veces necesitará saber si se ha asignado un valor a una variable existente. Una variable Variant tiene el valor Empty antes de asignarle un valor. El valor Empty es un valor especial distinto de 0, una cadena de longitud cero ("") o el valor Null. Puede probar el valor Empty con la función IsEmpty: If IsEmpty(Z) Then Z = 0 Cuando un Variant contiene el valor Empty, puede usarlo en expresiones; se trata como un 0 o una cadena de longitud cero, dependiendo de la expresión. El valor Empty desaparece tan pronto como se asigna cualquier valor (incluyendo 0, una cadena de longitud cero o Null) a una variable Variant. Puede establecer una variable Variant de nuevo como Empty si asigna la palabra clave Empty al Variant. El valor Null El tipo de dato Variant puede contener otro valor especial: Null. Null se utiliza comúnmente en aplicaciones de bases de datos para indicar datos desconocidos o que faltan. Debido a la forma en que se utiliza en las bases de datos, Null tiene algunas características únicas: Las expresiones que utilizan Null dan como resultado siempre un Null. Así, se dice que Null se "propaga" a través de expresiones; si cualquier parte de la expresión da como resultado un Null, la expresión entera tiene el valor Null. Al pasar un Null, un Variant que contenga un Null o una expresión que dé como resultado un Null como argumento de la mayoría de las funciones hace que la función devuelva un Null. Los valores Null se propagan a través de funciones intrínsecas que devuelven tipos de datos Variant. También puede asignar un Null mediante la palabra clave Null: Z = Null Puede usar la función IsNull para probar si una variable Variant contiene un Null: If IsNull(X) And IsNull(Y) Then Z = Null Else Z = 0 End If Si asigna Null a una variable de un tipo que no sea Variant, se producirá un error interceptable. Asignar Null a una variable Variant no provoca ningún error y el Null se propagará a través de expresiones que contengan variables Variant (Null no se propaga a través de determinadas funciones). Puede devolver Null desde cualquier procedimiento Function con un valor de devolución de tipo Variant. Null no se asigna a las variables a menos que se haga explícitamente, por lo que si no utiliza Null en su aplicación, no tendrá que escribir código que compruebe su existencia y lo trate. Para obtener más información Para obtener más información acerca de cómo usar Null en expresiones, vea "Null" en la Referencia del lenguaje. El valor Error En un Variant, Error es un valor especial que se utiliza para indicar que se ha producido una condición de error en un procedimiento. Sin embargo, a diferencia de otros tipos de error, no se produce el tratamiento de errores a nivel normal de aplicación. Esto le permite a usted o a la propia aplicación elegir alternativas basadas en el valor del error. Los valores de error se crean convirtiendo números reales en valores de error mediante la función CVErr. Para obtener más información Para obtener más información acerca de cómo usar el valor Error en expresiones, vea "Función CVErr" en la Referencia del lenguaje. Para obtener más información acerca del tratamiento de errores, vea el capítulo 13 "Depurar el código y tratar errores". Para obtener más información acerca del tipo de dato Variant, vea "Temas avanzados sobre Variant".