Descargar

Manual de Visual Basic

Enviado por javier0730


    1. Objetivos
    2. Nombres Automáticos en VB
    3. Valores
    4. Resumen de tipos de datos
    5. Subrutinas y Funciones
    6. For…Next (Instrucción)
    7. Mejoras a la interfaz

     

    OBJETIVOS:

    • Facilidad para extender e interactuar con otras aplicaciones.
      • Llamadas al API
      • Soporte de componentes de terceros
    • Contiene Herramientas integradas al ambiente para depuración e incremento de productividad.

    Ediciones de VB

    • Aprendizaje
    • Profesional
    • Empresarial

    Edición de Aprendizaje

    • Creación de aplicaciones para Windows 95/98/Me/NT/XP
    • Controles Intrínsecos
    • Controles Adicionales
    • Curso de "Aprenda Visual Basic 6.0 Ya"
    • Librería de documentación en Pantalla

    Edición Profesional

    • Todo lo de la Edición de Aprendizaje, menos el curso de visual basic
    • Controles Adicionales
    • Generación de Controles
    • Generación de Aplicaciones para IIS
    • Herramientas para modelado y acceso a datos.

    Edición Empresarial

    • Todo lo de la Edición Profesional
    • Generación de Aplicaciones Distribuidas
      • Aplicaciones que se ejecutan en un Navegador de Internet.
    • Componentes del BackOffice
      • SQL Server
      • MTS (Microsoft Transaction Server)
      • IIS (Internet Information Server)
      • SNA (System Network Architecture)
      • Visual Source Safe
      • ASP (Active Server Pages)

    Ejemplo de programación en base a Eventos

    1.5.1 Nombres Automáticos en VB

    Prefijos

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Ejemplo

    lblSalir = Etiqueta con el Nombre Salir.

    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:

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Valores

    El argumento buttons tiene estos valores:

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    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

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    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.

    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:

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    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.

    Descripción del alcance de las variables

    El alcance de una variable define qué partes del código son conscientes de su existencia. Cuando declara una variable en un procedimiento, sólo el código de dicho procedimiento puede tener acceso o modificar el valor de la variable; tiene un alcance que es local al procedimiento. A veces, sin embargo, se necesita usar una variable con un alcance más general, como aquella cuyo valor está disponible para todos los procedimientos del mismo módulo o incluso para todos los procedimientos de toda la aplicación. Visual Basic le permite especificar el alcance de una variable cuando la declara.

    Establecer el alcance de las variables

    Dependiendo de cómo se declara, una variable tiene como alcance un procedimiento (local) o un módulo.

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Variables utilizadas en un procedimiento

    Las variables a nivel de procedimiento sólo se reconocen en el procedimiento en el que se han declarado. Se las conoce también como variables locales. Se declaran mediante las palabras clave Dim o Static. Por ejemplo:

    Dim intTemp As Integer

    –o bien–

    Static intPermanent As Integer

    Los valores de variables locales declaradas con Static existen mientras se ejecuta la aplicación, mientras que las variables declaradas con Dim sólo existen mientras se ejecuta el procedimiento.

    Las variables locales resultan una elección apropiada para cálculos temporales. Por ejemplo, puede crear una docena de procedimientos distintos que contengan una variable llamada intTemp. Como cada intTemp se ha declarado como una variable local, cada procedimiento sólo reconoce su propia versión de intTemp. Cualquier procedimiento puede alterar el valor de su intTemp local sin que ello afecte a las variables intTemp de los demás procedimientos.

    Variables utilizadas en un módulo

    De forma predeterminada, una variable a nivel de módulo está disponible para todos los procedimientos del módulo, pero no para el código de otros módulos. Cree variables a nivel de módulo declarándolas con la palabra clave Private en la sección Declaraciones al principio del módulo. Por ejemplo:

    Private intTemp As Integer

    A nivel de módulo, no hay diferencia entre Private y Dim, pero es preferible Private porque contrasta con Public y hace que el código sea más fácil de comprender.

    Variables utilizadas por todos los módulos

    Para hacer que una variable a nivel de módulo esté disponible para otros módulos, utilice la palabra clave Public para declarar la variable. Los valores de las variables públicas están disponibles para todos los procedimientos de la aplicación. Al igual que todas las variables a nivel de módulo, las variables públicas se declaran en la sección Declaraciones al principio del módulo. Por ejemplo:

    Public intTemp As Integer

    Nota   No puede declarar variables públicas en un procedimiento, sólo en la sección Declaraciones de un módulo.

    Para obtener más información   Para obtener más información acerca de las variables, vea "Temas avanzados sobre variables" en este capítulo.

    Dim (Instrucción)

    Declara variables y les asigna espacio de almacenamiento.

    Sintaxis

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

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

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    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 sólo están disponibles dentro de ese procedimiento.

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

    Dim NúmeroDeEmpleados 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 objeto, la variable que se refiere al objeto debe asignarse a un objeto existente mediante la instrucción Set antes de su uso. Hasta que se le asigne un objeto, la variable de objeto declarada tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia en particular de un objeto.

    También puede utilizar la 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 de matriz cuyo tamaño se ha especificado explícitamente en una instrucción Private, Public o Dim, ocurrirá un error.

    Si no especifica un tipo de datos o un tipo de objeto y no existe ninguna instrucción 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 llena 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 distinta.

    Nota   Cuando utiliza la instrucción Dim en un procedimiento, generalmente pone la instrucción Dim al principio del mismo.

    Public (Instrucción)

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

    Sintaxis

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

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

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Comentarios

    Las variables declaradas mediante 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 sólo son públicas dentro del proyecto en el que residen.

    Precaución   La instrucción Public no se puede usar 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 de una variable. Por ejemplo, la instrucción siguiente declara una variable como de tipo Integer:

    Public NúmeroDeEmpleados As Integer

    Utilice también la instrucción Public para declarar el tipo de objeto de una variable. La instrucción siguiente 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, la variable que se refiere a un objeto debe asignarse a un objeto existente mediante la instrucción Set antes de que se pueda usar. Hasta que se le asigne un objeto, la variable de objeto declarada tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia en 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 cuyo tamaño se ha especificado explícitamente en una instrucción Private, Public o Dim, ocurrirá un error.

    Si no 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 de manera 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 rellena con ceros. Las variables Variant se inicializan a Empty. Cada elemento de una variable de un tipo definido por el usuario se inicializa como si fuera una variable distinta.

    Resumen de tipos de datos

    La tabla siguiente muestra los tipos de datos compatibles, incluyendo el tamaño de almacenamiento y el intervalo.

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    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.

    Load (Instrucción)

    Carga en memoria un formulario o un control.

    Sintaxis

    Load objeto

    El marcador de posición objeto es el nombre de un objeto Form, un objeto MDIForm o un elemento de una matriz de controles para cargar.

    Comentarios

    No es necesario usar la instrucción Load con formularios a menos que desee cargar un formulario sin presentarlo. Cualquier referencia a un formulario (excepto en una instrucción Set o If…TypeOf) lo carga automáticamente si no está ya cargado. Por ejemplo, el método Show carga los formularios antes de presentarlos. Una vez cargado el formulario, la aplicación puede alterar sus propiedades y controles, sea o no visible actualmente el formulario. En algunas circunstancia, puede que desee cargar todos los formularios en la inicialización y presentarlos después cuando sean necesarios.

    Cuando Visual Basic carga un objeto Form, establece las propiedades del formulario a sus valores iniciales y después ejecuta el procedimiento de evento Load. Cuando se inicia una aplicación, Visual Basic carga y presenta automáticamente el formulario inicial de la aplicación.

    Si carga un objeto Form cuya propiedad MDIChild es True (es decir, el formulario secundario) antes de cargar el objeto MDIForm, el objeto MDIForm se carga automáticamente antes que el formulario secundario. Los formularios MDI secundarios no pueden estar ocultos y, por tanto, son visibles inmediatamente después de terminar el procedimiento de evento Form_Load.

    No es necesario cargar, mostrar o descargar los cuadros de diálogo estándar producidos por funciones de Visual Basic como MsgBox y InputBox; se pueden invocar directamente.

    Hide (Método)

    Oculta un objeto MDIForm o Form 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 de la lista Se aplica a. Si se omite objeto, se supone que objeto es el formulario que tenga el enfoque.

    Comentarios

    Cuando se oculta un formulario, se quita de la pantalla y su propiedad Visible queda establecida a False. Los controles de un formulario oculto no son accesibles para el usuario, pero están disponibles para la aplicación de Visual Basic en ejecución y para otros procesos que se estén comunicando con la aplicación mediante DDE, así como para los eventos del control Timer.

    Cuando se oculta un formulario, el usuario no puede interactuar con la aplicación hasta que el código del procedimiento de evento que ha provocado la ocultación del formulario haya terminado de ejecutarse.

    Si el formulario no está cargado cuando se llama al método Hide, el método Hide carga el formulario pero no lo presenta.

    Nota   Al cerrar un formulario modal que se ha abierto desde otro formulario modal, el siguiente código funcionaba en versiones anteriores de Visual Basic:

    Me.Hide

    Me.Hide ' Esto ahora provoca un error.

    En versiones actuales de Visual Basic, este código falla en el segundo Me.Hide. Puede sustituir Me.Hide con Me.Visible = False como se muestra a continuación:

    Me.Visible = False

    Me.Visible = False ' No sucede ningún error.

    Unload (Instrucción)

    Descarga de memoria un formulario o un control.

    Sintaxis

    Unload objeto

    El marcador de posición objeto es el nombre de un objeto Form o de un elemento de una matriz de controles para descargar.

    Comentarios

    La descarga de un formulario o de un controle puede ser necesaria o conveniente en aquellos casos en los que la memoria utilizada sea necesaria para alguna otra tarea o cuando sea necesario restablecer las propiedades a sus valores originales.

    Antes de descargar un formulario se produce el evento Query_Unload, seguido del procedimiento de evento Form_Unload. Si establece el argumento cancelar a True en alguno de estos eventos no se descargará el formulario. En los objetos MDIForm se produce el procedimiento de evento Query_Unload del objeto MDIForm, seguido del procedimiento de evento Query_Unload y del procedimiento de evento Form_Unload de cada formulario secundario MDI; finalmente se produce el procedimiento de evento Form_Unload del objeto MDIForm.

    Cuando se descarga un formulario, todos los controles colocados en el formulario en tiempo de ejecución no son accesibles. Los controles colocados en el formulario en tiempo de diseño permanecen intactos; sin embargo, cualquier cambio en tiempo de ejecución sobre dichos controles y sus propiedades se pierden cuando se vuelve a cargar el formulario. También se pierden todos los cambios realizados en las propiedades del formulario. El acceso a algún control del formulario hace que éste se vuelva a cargar.

    Nota   Cuando se descarga un formulario, sólo se descarga el componente mostrado. El código asociado al módulo del formulario permanece en memoria.

    Con la instrucción Unload sólo se pueden descargar los elementos de las matrices de controles agregados a un formulario en tiempo de ejecución. Las propiedades de los controles descargados se reinicializan cuando se cargan de nuevo los controles.

    Show (Método)

    Presenta un objeto MDIForm o Form. No acepta argumentos con nombre.

    Sintaxis

    objeto.Show estilo, formularioPropietario

    La sintaxis del método Show consta de las siguientes partes:

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Comentarios

    Si el formulario especificado no está cargado cuando se invoca el método Show, Visual Basic lo carga automáticamente.

    Cuando Show presenta un formulario no modal, continúa con la ejecución del código que haya a continuación. Cuando Show presenta un formulario modal, el código que hay a continuación no se ejecuta hasta que el formulario se oculta o se descarga.

    Cuando Show presenta un formulario modal, no hay entradas (de teclado o del mouse) excepto sobre los objetos del formulario modal. El programa debe ocultar o descargar los formularios modales (normalmente como respuesta a alguna acción del usuario) antes de que pueda producirse la entrada en otro formulario. Los formularios MDIForm no pueden ser modales.

    Aunque los demás formularios de la aplicación están deshabilitados cuando se presenta un formulario modal, los de las demás aplicaciones no lo están.

    El formulario inicial de una aplicación se muestra automáticamente después de invocar su evento Load.

    He aquí un ejemplo de cómo se utiliza el argumento formularioPropietario con el método Show:

    Private Sub cmdShowResults_Click()

    ' Muestra un formulario modal llamado frmResults.

    frmResults.Show vbModal, Me

    End Sub

    SetFocus (Método)

    Mueve el enfoque al control o formulario especificado.

    Sintaxis

    objeto.SetFocus

    El marcador de posición objeto representa una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

    Comentarios

    El objeto debe ser un objeto Form, un objeto MDIForm o un control que pueda recibir el enfoque. Después de invocar el método SetFocus, cualquier entrada del usuario se dirige al formulario o al control especificado.

    El enfoque sólo se puede mover a un formulario o un control visible. Como un formulario y los controles de un formulario no son visibles hasta que el evento Load del formulario ha terminado, no puede usar en su propio evento Load el método SetFocus para mover el enfoque al formulario que se está cargando a menos que use primero el método Show para mostrar el formulario antes de que el procedimiento de evento Form_Load haya terminado.

    Tampoco puede mover el enfoque a un formulario o un control si su propiedad Enabled es False. Si la propiedad Enabled se ha establecido a False en tiempo de diseño, primero debe establecerla a True antes de poder recibir el enfoque mediante el método SetFocus.

    método

    Una acción que un objeto es capaz de realizar. Por ejemplo, los cuadros de lista tienen métodos llamados AddItem, RemoveItem y Clear para mantener el contenido de las listas. Vea también objeto.

    propiedad

    Un atributo con nombre de un objeto. Las propiedades definen las características del objeto, como su tamaño y nombre, o el estado de un objeto, como habilitado o deshabilitado. Se pueden establecer propiedades para tablas, columnas, índices, restricciones, claves y relaciones.

    evento

    Una acción, reconocida por un objeto, para la cual puede escribir código de respuesta. Los eventos pueden estar generados por una acción del usuario, como hacer clic con el mouse o presionar una tecla, por código de programa o por el sistema, como ocurre con los cronómetros.

    Form (Objeto), Forms (Colección)

    Un objeto Form es una ventana o un cuadro de diálogo que forma parte de la interfaz de usuario de una aplicación.

    Forms es una colección cuyos elementos representan cada formulario cargado en una aplicación. La colección incluye el formulario MDI, el formulario secundario MDI y formularios no MDI de la aplicación. La colección Forms tiene una única propiedad, Count, que especifica el número de elementos de la colección.

    Sintaxis

    Form

    Forms(índice)

    El marcador de posición índice representa un entero entre 0 y Forms.Count – 1.

    Comentarios

    Puede usar la colección Forms para iterar a través de todos los formularios cargados en una aplicación. Identifica una variable global intrínseca denominada Forms. Puede pasar Forms(índice) a una función cuyo argumento se especifica como una clase Forms.

    Los formularios tienen propiedades que determinan aspectos de su apariencia (como posición, tamaño y color) y aspectos de su comportamiento (como si puede ajustar o no su tamaño).

    Los formularios también pueden responder a eventos iniciados por un usuario o desencadenados por el sistema. Por ejemplo, podría escribir código en el procedimiento de evento Click de un formulario que permitiera al usuario cambiar el color de un formulario haciendo clic en él.

    Además de propiedades y eventos, puede emplear métodos para manipular formularios mediante código. Por ejemplo, puede usar el método Move para cambiar la ubicación y el tamaño de un formulario.

    Un tipo especial de formulario, el formulario MDI, puede contener otros formularios llamados formularios secundarios MDI. Un formulario MDI se crea con el comando Agregar formulario MDI del menú Proyecto; un formulario secundario MDI se crea eligiendo Nuevo formulario en el menú Archivo y, a continuación, estableciendo la propiedad MDIChild a True.

    Puede crear múltiples instancias de formularios en código si utiliza la palabra clave New en instrucciones Dim, Set y Static.

    Al diseñar formularios, establezca la propiedad BorderStyle para definir el borde del formulario y establezca la propiedad Caption para colocar texto en la barra de título. En el código puede usar los métodos Hide y Show para hacer que los formularios sean invisibles o visibles en tiempo de ejecución.

    Nota   Si establece BorderStyle a 0 se eliminará el borde. Si desea que el formulario tenga borde sin barra de título, cuadro del menú Control, botón Maximizar y botón Minimizar, elimine texto de la propiedad Caption y establezca a False las propiedades ControlBox, MaxButton y MinButton.

    Form es un tipo de datos Object. Puede declarar variables como de tipo Form antes de establecerlas a una instancia de un tipo de formulario que se ha declarado en tiempo de diseño. Del mismo modo, puede pasar un argumento a un procedimiento como de tipo Form.

    Los formularios pueden actuar como origen en una conversación DDE, con un control Label, PictureBox o TextBox proporcionando los datos.

    Puede tener acceso a la colección de controles de un Form mediante la colección Controls. Por ejemplo, para ocultar todos los controles de un Form puede usar código similar al siguiente:

    For Each Control in Form1.Controls

    Control.Visible = False

    Next Control

    Crear tipos de datos propios

    Se pueden combinar variables de varios tipos diferentes para crear tipos definidos por el usuario (conocidos como structs en el lenguaje de programación C). Los tipos definidos por el usuario son útiles si se quiere crear una única variable que registre varias unidades de información relacionadas.

    Puede crear un tipo definido por el usuario con la instrucción Type, que debe colocar en la sección Declaraciones del módulo. Los tipos definidos por el usuario pueden declararse como Private o como Public mediante la palabra clave apropiada. Por ejemplo:

    Private Type MiTipoDeDatos

    –o bien–

    Public Type MiTipoDeDatos

    Por ejemplo, podría crear un tipo definido por el usuario que registrara información acerca del sistema de un equipo:

    ' Declaraciones (de un módulo estándar).

    Private Type SystemInfo

    CPU As Variant

    Memory As Long

    VideoColors As Integer

    Cost As Currency

    PurchaseDate As Variant

    End Type

    Declarar variables de un tipo definido por el usuario

    Para el mismo tipo definido por el usuario puede declarar variables locales, variables privadas de módulo o variables públicas de módulo:

    Dim MiSistema As SystemInfo, SuSistema As SystemInfo

    En la tabla siguiente se ilustra dónde y con qué alcance puede declarar los tipos definidos por el usuario y sus variables.

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Nota   Si realiza declaraciones de variables usando la palabra clave Dim, los tipos definidos por el usuario en módulo de clase o estándar serán Public de forma predeterminada. Si quiere que un tipo definido por el usuario sea privado, asegúrese de declararlo usando la palabra clave Private.

    Asignar y recuperar valores

    Asignar y recuperar los valores de los elementos de esta variable es similar a establecer y obtener propiedades:

    MiSistema.CPU = "486"

    If MiSistema.PurchaseDate > #1/1/92# Then

    También puede asignar una variable a otra si ambas son del mismo tipo definido por el usuario. En la línea de código siguiente se asignan todos los elementos de una variable a los mismos elementos de la otra variable.

    SuSistema = MiSistema

    Tipos definidos por el usuario que contienen matrices

    Un tipo definido por el usuario puede contener una matriz normal (de tamaño fijo). Por ejemplo:

    Type SystemInfo

    CPU As Variant

    Memory As Long

    DiskDrives(25) As String ' Matriz de tamaño fijo.

    VideoColors As Integer

    Cost As Currency

    PurchaseDate As Variant

    End Type

    También puede contener una matriz dinámica.

    Type SystemInfo

    CPU As Variant

    Memory As Long

    DiskDrives() As String ' Matriz dinámica.

    VideoColors As Integer

    Cost As Currency

    PurchaseDate As Variant

    End Type

    Puede tener acceso a los valores de una matriz dentro de un tipo definido por el usuario de la misma manera en que tiene acceso a las propiedades de un objeto.

    Dim MiSistema As SystemInfo

    ReDim MiSistema.DiskDrives(3)

    MiSistema.DiskDrives(0) = "1.44 MB"

    También puede declarar una matriz de tipos definidos por el usuario:

    Dim TodosSistemas(100) As SystemInfo

    Siga las mismas reglas para tener acceso a los componentes de esta estructura de datos.

    TodosSistemas(5).CPU = "386SX"

    TodosSistemas(5).DiskDrives(2) = "SCSI de 100 MB"

    Pasar tipos definidos por el usuario a procedimientos

    Puede pasar argumentos de procedimiento mediante un tipo definido por el usuario.

    Sub FillSystem (UnSistema As SystemInfo)

    UnSistema.CPU = lstCPU.Text

    UnSistema.Memory = txtMemory.Text

    UnSistema.Cost = txtCost.Text

    UnSistema.PurchaseDate = Now

    End Sub

    Nota   Si desea pasar un tipo definido por el usuario a un módulo de formulario, el procedimiento debe ser privado.

    Puede devolver tipos definidos por el usuario desde funciones y puede pasar una variable de un tipo definido por el usuario a un procedimiento como un argumento. Los tipos definidos por el usuario siempre se pasan por referencia, de modo que el procedimiento puede modificar el argumento y devolverlo al procedimiento que lo ha llamado, como se muestra en el ejemplo anterior.

    Nota   Debido a que los tipos definidos por el usuario siempre se pasan por referencia, todos los datos contenidos en dichos tipos se pasarán y se devolverán desde el procedimiento. En el caso de tipos definidos por el usuario con matrices de gran tamaño, esto podría originar una reducción de las prestaciones, especialmente en aplicaciones cliente/servidor, en las que el procedimiento se puede ejecutar desde un equipo remoto. En tal caso, es preferible extraer y pasar únicamente los datos necesarios del tipo definido por el usuario.

    Para obtener más información   Para obtener más detalles acerca del paso por referencia, vea "Pasar argumentos a procedimientos" en "Fundamentos de programación".

    Tipos definidos por el usuario que contienen objetos

    Los tipos definidos por el usuario también pueden contener objetos.

    Private Type AccountPack

    frmInput as Form

    dbPayRollAccount as Database

    End Type

    Sugerencia   Como el tipo de datos Variant puede almacenar muchos tipos de datos diferentes, puede usar una matriz Variant en muchas situaciones en las que usaría un tipo definido por el usuario. De hecho, una matriz Variant es más flexible que un tipo definido por el usuario, ya que puede modificar el tipo de los datos almacenados en cada elemento en cualquier momento y puede convertir la matriz en dinámica para modificar su tamaño cuando sea necesario. Sin embargo, una matriz Variant siempre utiliza más memoria que un tipo definido por el usuario equivalente.

    Anidar estructuras de datos

    El anidamiento de estructuras de datos puede ser tan complejo como se quiera. De hecho, los tipos definidos por el usuario pueden contener otros tipos definidos por el usuario, como se muestra en el ejemplo siguiente. Para hacer que el código sea más legible y fácil de depurar, procure escribir en un único módulo todo el código de los tipos de datos definidos por el usuario.

    Type DriveInfo

    Type As String

    Size As Long

    End Type

    Type SystemInfo

    CPU As Variant

    Memory As Long

    DiskDrives(26) As DriveInfo

    Cost As Currency

    PurchaseDate As Variant

    End Type

    Dim AllSystems(100) As SystemInfo

    AllSystems(1).DiskDrives(0).Type = "Floppy"

    UNIDAD II

    Subrutinas y Funciones

    Sub (Instrucción)

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

    Sintaxis

    [Private | Public | Friend] [Static] Sub nombre [(lista_argumentos)] [instrucciones] [Exit Sub] [instrucciones]

    End Sub

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

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    El argumento lista_argumentos consta de las siguientes partes y sintaxis:

    [Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Comentarios

    Si no se especifica explícitamente mediante Public, Private o Friend, los procedimientos Sub son públicos de manera predeterminada. Si no se usa Static, el valor de las variables locales no se mantiene entre distintas llamadas. La palabra clave Friend solamente se puede usar en módulos de clase. Sin embargo, los procedimientos en cualquier módulo de un proyecto pueden acceder a los procedimientos Friend. Un procedimiento Friend no aparece en la biblioteca de tipo de su clase primaria, ni se puede enlazar posteriormente.

    Precaución   Los procedimientos Sub pueden ser recursivos; es decir, 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 puede definir un procedimiento Sub dentro de otro procedimiento Sub, Function o Property.

    Las palabras clave Exit Sub causan 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.

    Al igual que un procedimiento Function, un procedimiento Sub es un procedimiento distinto 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 acerca de cómo llamar a los procedimientos Sub.

    Las variables usadas en procedimientos Sub se dividen en dos categorías: las que están explícitamente declaradas dentro del procedimiento y las que no lo están. Las variables declaradas explícitamente en un procedimiento (mediante Dim o un equivalente) siempre son locales del procedimiento. Otras variables usadas pero no declaradas explícitamente en un procedimiento también son locales, a menos que se declaren 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 de nombres 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 supone 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 se puede usar GoSub, GoTo o Return para obtener acceso o salir de un procedimiento Sub.

    Function (Instrucción)

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

    Sintaxis

    [Public | Private | Friend] [Static] Function nombre [(lista_argumentos)] [As tipo] [instrucciones] [nombre = expresión] [Exit Function] [instrucciones] [nombre = expresión]

    End Function

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

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    El argumento lista_argumentos tiene la siguiente sintaxis y partes:

    [Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    Comentarios

    Si no se especifican de forma explícita mediante Public, Private o Friend, los procedimientos Function son públicos de manera predeterminada. Si no se emplea Static, el valor de las variables locales no se conserva entre distintas llamadas. La palabra clave Friend sólo puede usarse en módulos de clase. Sin embargo, puede accederse a los procedimientos Friend por procedimientos en cualquier módulo de un proyecto. Un procedimiento Friend no aparece en la biblioteca de tipos de su clase primaria.

    Precaución   Los procedimientos Function pueden ser recursivos; es decir, pueden llamarse a sí mismos para realizar una tarea determinada. Sin embargo, la recursión puede provocar el desbordamiento de pila. La palabra clave Static no se suele utilizar con procedimientos Function recursivos.

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

    La instrucción Exit Function produce una salida inmediata de un procedimiento Function. La ejecución del programa continúa con la instrucción que sigue a la instrucción que llamó al procedimiento Function. En cualquier lugar de un procedimiento Function puede aparecer cualquier número de instrucciones Exit Function.

    Al igual que un procedimiento Sub, un procedimiento Function es un procedimiento independiente que puede adoptar argumentos, realizar una serie de instrucciones y cambiar los valores de sus argumentos. Sin embargo, a diferencia de un procedimiento Sub, puede utilizar un procedimiento Function en el lado derecho de una expresión de la misma forma en que utiliza cualquier función intrínseca, como Sqr, Cos o Chr, cuando desea emplear el valor devuelto por la función.

    Para llamar a un procedimiento Function, utilice en una expresión el nombre de función seguido de la lista de argumentos entre paréntesis. Consulte la instrucción Call para obtener información específica acerca de cómo llamar a los procedimientos Function.

    Para devolver un valor de una función, asigne el valor al nombre de la función. En cualquier lugar del procedimiento puede aparecer cualquier número de asignaciones de este tipo. Si no se asigna ningún valor a nombre, el procedimiento devolverá un valor predeterminado: una función numérica devuelve 0, una función de cadena devuelve una cadena de longitud cero ("") y una función Variant devuelve Empty. Una función que devuelve una referencia de objeto devuelve Nothing si no se asigna ninguna referencia de objeto a nombre (mediante Set) dentro del procedimiento Function.

    El ejemplo siguiente muestra cómo asignar un valor de retorno a una función llamada BinarySearch. En este caso, False se asigna al nombre para indicar que no se encontró algún valor.

    Function BinarySearch(. . .) As Boolean

    . . .

    ' Valor no encontrado. Devuelve un valor False.

    If lower > upper Then

    BinarySearch = False

    Exit Function

    End If

    . . .

    End Function

    Las variables empleadas en procedimientos Function se dividen en dos categorías: las que se declaran explícitamente dentro del procedimiento y las que no. Las variables que se declaran explícitamente en un procedimiento (mediante Dim u otra instrucción equivalente) siempre son locales del procedimiento. Las variables que se utilizan pero no se declaran explícitamente en un procedimiento también son locales, a menos que se hayan declarado explícitamente en algún nivel superior fuera del procedimiento.

    Precaución   Un procedimiento puede utilizar una variable que no se ha declarado explícitamente en el procedimiento, pero puede ocurrir un conflicto de nombres si algo que definió en un nivel de módulo tiene el mismo nombre. Si su procedimiento hace referencia a una variable no declarada que tiene el mismo nombre que otro procedimiento, constante o variable, se supone que el procedimiento hace referencia a ese nombre a nivel de módulo. Declare explícitamente las variables para evitar este tipo de conflicto. Puede utilizar una instrucción Option Explicit para forzar la declaración explícita de variables.

    Precaución   Visual Basic puede reorganizar las expresiones aritméticas para mejorar su eficacia interna. Evite utilizar un procedimiento Function en una expresión aritmética cuando la función cambie el valor de las variables de la misma expresión.

    IF … ENDIF (Comando)

    Ejemplo   Vea también

    Ejecuta condicionalmente un conjunto de comandos dependiendo del resultado de una expresión lógica.

    Sintaxis

    IF lExpresión [THEN]   Comandos [ELSE   Comandos] ENDIF

    Argumentos

    lExpresión

    Especifica la expresión lógica evaluada. Si lExpresión da como resultado verdadero (.T.), se ejecutarán cualesquiera instrucciones posteriores a IF y anteriores a ELSE o ENDIF (lo que suceda primero).

    • Si lExpresión es falsa y se incluye ELSE, se ejecutan los comandos situados después de ELSE y antes de ENDIF.
    • Si lExpresión es falsa (.F.) y no se incluye ELSE, se pasarán por alto todas las instrucciones entre IF y ENDIF. En este caso la ejecución del programa continuará con la primera línea de comando a continuación de ENDIF.

    Comentarios

    Puede anidar IF … ENDIF dentro de otro bloque IF … ENDIF.

    Los comentarios precedidos de && se pueden colocar en la misma línea después de IF, ELSE y ENDIF. Estos comentarios se pasan por alto durante la compilación y la ejecución del programa.

    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:

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

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

    Nota   No se puede usar TypeOf con tipos de datos predefinidos como Long, Integer y así sucesivamente, excepto en el tipo de datos Object.

    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:

    Para ver el gráfico seleccione la opción ¨Descargar trabajo¨ del menú superior

    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.

    Unidad III

    For…Next (Instrucción)