Cómo utilizar Visual Basic para Aplicaciones (VBA) para cambiar UserForms en Excel

Ha finalizado el soporte técnico para Office 2003

Microsoft puso fin al soporte técnico para Office 2003 el 8 de abril de 2014. Este cambio ha afectado a las actualizaciones de software y las opciones de seguridad. Sepa qué significa esto en su caso y cómo puede mantenerse protegido.

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 829070
Resumen
En este artículo se describe cómo cambiar UserForms mediante programación en Microsoft Excel. Incluye ejemplos y Microsoft Visual Basic para Aplicaciones macros (VBA) que muestran cómo sacar partido de las capacidades de UserForms y cómo utilizar los controles de ActiveX™ que están disponibles para los formularios de usuario.

Una introducción a los principios básicos de UserForms describe cómo mostrar los formularios de usuario, cómo ocultar temporalmente UserForms y cómo descartar UserForms. También se muestra cómo utilizar los eventos más comunes que están asociados con UserForms — el Inicializar evento, el Haga clic en evento y la Terminar evento. Uno o más de los siguientes ejemplos muestran cómo utilizar cada uno de los siguientes controles de ActiveX™ en un UserForm:
  • Etiqueta control
  • Cuadro de texto control
  • Control CommandButton control
  • Cuadro de lista control
  • ComboBox control
  • Marco control
  • Control OptionButton control
  • Casilla de verificación control
  • Control ToggleButton control
  • Control TabStrip control
  • Control multiPage control
  • Barra de desplazamiento control
  • Control SpinButton control
  • RefEdit control
  • Imagen control
INTRODUCCIÓN
Este artículo describe cómo utilizar VBA para realizar cambios en los formularios de usuario en Excel.
Más información
Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa o implícita. Esto incluye, pero no se limita a, las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este artículo asume que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Conceptos básicos de UserForm

Cómo mostrar un UserForm

La sintaxis que se utiliza para mostrar un UserForm mediante programación es la siguiente:
UserFormName. Mostrar
Para mostrar un formulario de usuario denominado UserForm1, utilice el código siguiente:
UserForm1.Show
Puede cargar un formulario de usuario en la memoria sin mostrarla realmente. Puede tomar un UserForm complejo varios segundos en aparecer. Debido a que un formulario de usuario se puede cargar en la memoria, usted puede decidir cuándo incurrir en esta sobrecarga. Para cargar UserForm1 en memoria sin mostrarlo, utilice el código siguiente:
Load UserForm1
Para mostrar el UserForm, debe utilizar el métodoShow que se ha mostrado anteriormente.

Cómo ocultar temporalmente un UserForm

Si desea ocultar temporalmente un UserForm, utilice el métodoHide . Desea ocultar un formulario de usuario si la aplicación implica mover entre formularios de usuario. Para ocultar un formulario de usuario, utilice el código siguiente:
UserForm1.Hide
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213747 XL2000: Cómo mover entre formularios de usuario personalizada con botones de comando

Cómo quitar un UserForm de la memoria

Para quitar un formulario de usuario de la memoria, utilice la instrucción dedescarga . Para descargar un formulario de usuario denominado UserForm1, utilice el código siguiente:
Unload UserForm1
Si descarga un UserForm en un procedimiento de evento que está asociado con un formulario de usuario o que está asociado con un control en un formulario de usuario (por ejemplo, hace clic en un controlCommandButton ), puede utilizar el "Me" (palabra clave) en lugar del nombre del objeto UserForm. Para utilizar la "Me" palabra clave para descargar un formulario de usuario, utilice el código siguiente:
Unload Me

Cómo utilizar eventos de UserForm

UserForms admite muchos eventos predefinidos que puede adjuntar a los procedimientos de VBA. Cuando se produce el evento, se ejecuta el procedimiento que se ha vinculado al evento. Una sola acción realizada por un usuario puede iniciar varios eventos. Entre los más frecuentemente utilizados eventos para un formulario de usuario son el evento Initialize , el evento Click y el evento Terminate .

Nota: Un módulo de Visual Basic que contiene un procedimiento de evento puede denominarse como un módulo "UserForm detrás". Un módulo que contiene procedimientos de evento no está visible en la colección de módulos de la ventana del Editor de Visual Basic de proyecto de Microsoft Explorer. Debe haga doble clic en el cuerpo de un formulario de usuario para ver el módulo de código de UserForm.

Cómo interceptar eventos de UserForm

Para interceptar eventos de UserForm, siga estos pasos:
  1. Crear un nuevo libro en Excel.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Haga doble clic en el UserForm para mostrar la ventana de theCode para el formulario UserForm.
  5. En el módulo, escriba el código siguiente:
    Private Sub UserForm_Click()    Me.Height = Int(Rnd * 500)    Me.Width = Int(Rnd * 750)End SubPrivate Sub UserForm_Initialize()    Me.Caption = "Events Events Events!"    Me.BackColor = RGB(10, 25, 100)End SubPrivate Sub UserForm_Resize()    msg = "Width: " & Me.Width & Chr(10) & "Height: " & Me.Height    MsgBox prompt:=msg, Title:="Resize Event"End SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)    msg = "Now Unloading " & Me.Caption    MsgBox prompt:=msg, Title:="QueryClose Event"End SubPrivate Sub UserForm_Terminate()    msg = "Now Unloading " & Me.Caption    MsgBox prompt:=msg, Title:="Terminate Event"End Sub
  6. En el menú Ejecutar , haga clic en RunSub/UserForm.
Cuando se carga el formulario UserForm por primera vez, la macro utiliza el evento Initialize para cambiar la propiedad Caption del objeto UserForm a "Eventos eventos eventos!" y la propiedad BackColor en azul oscuro.

Al hacer clic en el formulario UserForm, inicia el evento Click . El evento Click cambia de tamaño el formulario UserForm. Dado que creó un procedimiento para el evento Resize , recibe dos cuadros de mensaje después de hacer clic en el formulario UserForm. El evento Resize se produce dos veces porque el código tras el evento Click cambia la propiedad Width y la propiedad Height del objeto UserForm.

Cierre el formulario UserForm, inicia el evento QueryClose . El evento QueryClose muestra un cuadro de mensaje que contiene el título que le asignó el UserForm en el código para el evento Initialize . Puede utilizar el evento QueryClose cuando desea realizar un determinado conjunto de acciones si el usuario cierra el formulario UserForm.

El evento Terminate , a continuación, genera un cuadro de mensaje que indica que el título de UserForm UserForm1. El evento Terminate se produce después de quita el UserForm de la memoria y el título de UserForm devuelve a su estado original.

Cómo impedir que un formulario de usuario se cierre mediante el botón Cerrar

Cuando se ejecuta un UserForm, se agrega un botón Cerrar a la esquina superior derecha de la ventana UserForm. Si desea impedir que se cierre mediante el botón Cerrar el formulario UserForm, debe atrapar el evento QueryClose .

El evento QueryClose se produce justo antes de que se descargue de la memoria el UserForm. Utilice el argumento CloseMode del evento QueryClose para determinar cómo se cerró el UserForm. El valor de vbFormControlMenu para el argumento CloseMode indica que se ha hecho clic en el botón Cerrar . Para mantener activo el UserForm, establezca el argumento Cancel del evento QueryClose en True. Para utilizar el evento QueryClose para impedir que un formulario de usuario se cierra mediante el botón Cerrar , siga estos pasos:
  1. Crear un nuevo libro en Excel.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control CommandButton al UserForm.
  5. Haga doble clic en el UserForm para mostrar la ventana de theCode para el formulario UserForm.
  6. En la ventana código, escriba el siguiente código:
    Private Sub CommandButton1_Click()    Unload MeEnd SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)    IF CloseMode = vbFormControlMenu Then        Cancel = True        Me.Caption = "Click the CommandButton to close Me!"    End IfEnd Sub
  7. En el menú Ejecutar , haga clic en RunSub/UserForm.
El UserForm no se cierra al hacer clic en el botón Cerrar . Debe hacer clic en el control CommandButton para cerrar el formulario UserForm.

Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
207714 XL2000: Errores de tiempo de ejecución mediante la colección UserForms
211527 XL2000: No puede arrastrar el control de UserForm a una hoja de cálculo
211868 XL2000: Error al ejecutar la macro que inserta el control en el UserForm
213582 XL2000: Problemas al utilizar macro para agregar el control a UserForm
213583 XL2000: No se puede mostrar formularios de usuario en otros proyectos
213736 XL2000: Cómo determinar la clave presiona junto con el botón del mouse
213744 XL2000: Cómo ocultar temporalmente un UserForm
213747 XL2000: Cómo mover entre formularios de usuario personalizada con botones de comando
213749 XL2000: Cómo utilizar un formulario de usuario para introducir datos
213768 XL2000: Cómo cambiar dinámicamente el tamaño de un formulario de usuario
213774 XL2000: Cómo crear una pantalla de inicio con un UserForm

Código VBA

Excel incluye quince controles diferentes que puede utilizar en formularios de usuario. Esta sección contiene varios ejemplos que utilizan estos controles mediante programación.

Nota: El código VBA que se incluye en este artículo no contiene ejemplos que afectan a todas las propiedades y los eventos para los controles. Si es necesario, puede utilizar la ventana Propiedades para ver una lista de las propiedades que están disponibles para un control. Para ver una lista de propiedades, en el menú Ver , haga clic en Ventana Propiedades.

Cómo utilizar el modo de diseño para controles de edición

Cuando utiliza el Editor de Visual Basic para diseñar un cuadro de diálogo, se utiliza el modo de diseño. En modo de diseño, puede editar los controles y puede cambiar las propiedades de un control en un formulario de usuario en la ventana Propiedades. Para mostrar la ventana Propiedades, en el menúVer , haga clic en Ventana Propiedades.

Nota: Los controles no responden a eventos mientras está en modo de diseño. Cuando se ejecuta un cuadro de diálogo para mostrar la forma en que los usuarios verán, el programa está en modo de ejecución. Los cambios que realice en las propiedades de un control en modo de ejecución no se conservan cuando se descarga de la memoria el UserForm.

Nota: Controles responden a eventos en modo de ejecución.

Cómo hacer referencia a controles en un formulario de usuario

Cómo hacer referencia a los controles mediante programación depende del tipo de hoja de módulo de Visual Basic donde se ejecuta el código. Si el código se ejecuta desde un módulo General, la sintaxis es la siguiente:
UserFormName.Controlname.Property = Valor
Por ejemplo, si desea establecer la propiedadText de un control TextBox denominado TextBox1 en un formulario de usuario denominado UserForm1 al valor de Bob, utilice el código siguiente:
UserForm1.TextBox1.Text = "Bob"
Si el código está en un procedimiento que se inicia por un evento de un control o el formulario UserForm, no es necesario hacer referencia al nombre del objeto UserForm. En su lugar, utilice el código siguiente:
TextBox1.Text = "Bob"
Al adjuntar código a un objeto, el código está asociado a uno de los eventos de ese objeto. En muchos de los ejemplos de este artículo, adjuntar código al eventoClick del objeto CommandButton .

Controles de etiqueta

Controles de etiqueta se utilizan principalmente para describir otros controles en un formulario de usuario. El usuario no puede editar un control de etiqueta mientras se ejecuta el formulario UserForm. Utilice la propiedad Caption para establecer o devolver el texto de un control Label . Otras propiedades utilizados para dar formato a un control Label incluyen la propiedad Font y la propiedad ForeColor .

Cómo utilizar una instrucción WITH para dar formato a un control de etiqueta

Para utilizar la instrucción WITH para cambiar las propiedades de un control de etiqueta , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control Label al UserForm.
  5. Agregue un control CommandButton al UserForm.
  6. Haga doble clic en el CommandButton control elabierta la ventana de código para el formulario UserForm.
  7. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    With Label1        ' Set the text of the label.        .Caption = "This is Label Example 1"        ' Automatically size the label control.        .AutoSize = True        .WordWrap = False        ' Set the font used by the Label control.        .Font.Name = "Times New Roman"        .Font.Size = 14        .Font.Bold = True        ' Set the font color to blue.        .ForeColor = RGB(0, 0, 255)    End WithEnd Sub
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.
  9. Haga clic en el CommandButton.
El texto "This is etiqueta Example 1" aparecerá en el control de etiqueta en negrita Times New Roman con un tamaño de fuente de 14.

Controles TextBox

Controles TextBox se utilizan con frecuencia para obtener datos de un usuario. La propiedad Text contiene la entrada que se realiza en un control TextBox .

Cómo utilizar un control TextBox para validar una contraseña

Si establece la propiedad PasswordChar de un control TextBox , se convierte en un control "masked edit". Cada carácter que se escribe en el control TextBox se sustituye visualmente por el carácter que especifique. Para utilizar un control TextBox para validar una contraseña, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control TextBox en el formulario UserForm.
  5. En el menú Ver , haga clic enPropiedades para mostrar la ventana Propiedades.
  6. En la propiedad PasswordChar del control TextBox , escriba *.

    Nota: Va a cambiar el valor a un asterisco.
  7. Agregue un control CommandButton al UserForm.
  8. Haga doble clic en el CommandButton control elabierta la ventana de código para el formulario UserForm.
  9. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    If TextBox1.Text <> "userform" Then        MsgBox "Password is Incorrect. Please reenter."        TextBox1.Text = ""        TextBox1.SetFocus    Else        MsgBox "Welcome!"        Unload Me    End IfEnd Sub
  10. En el menú Ejecutar , haga clic en RunSub/UserForm.
  11. Escriba la contraseña UserForm en el control TextBox .
  12. Haga clic en el control CommandButton.
Para este ejemplo, la contraseña es "userform". Si escribe una contraseña incorrecta, aparecerá un cuadro de mensaje que indica que la contraseña es incorrecta, se desactiva el control de cuadro de texto y, a continuación, vuelva a escribir la contraseña. Al escribir una contraseña correcta, recibirá un mensaje de bienvenida y se cierra el formulario UserForm.

Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213555 XL2000: Ninguna propiedad de validación de datos para UserForm TextBoxes

Controles CommandButton

Puede utilizar un control CommandButton para iniciar un procedimiento de VBA. El procedimiento VBA normalmente está asociado al evento Click del control CommandButton . Para utilizar un control CommandButton que se ejecuta un procedimiento cuando se produce el evento Click , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control CommandButton al UserForm.
  5. Haga doble clic en el CommandButton control todisplay la ventana de código para el formulario UserForm.
  6. En la ventana código, escriba el siguiente código:
    Private Sub CommandButton1_Click()    red = Int(Rnd * 255)    green = Int(Rnd * 255)    blue = Int(Rnd * 255)    CommandButton1.BackColor = RGB(red, green, blue)End Sub 
  7. En el menú Ejecutar , haga clic en RunSub/UserForm.
El color de fondo del control CommandButton1 cambia cada vez que se haga clic en él.

Para obtener información adicional acerca del control de botón de comando, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
213572 XL2000: Al hacer clic en botón Cancelar no puede descartar UserForm
213743 XL2000: Cómo configurar el botón de comando predeterminado en un UserForm

Controles ListBox

El propósito del control ListBox es presentar al usuario una lista de elementos para seleccionar desde. Puede almacenar la lista de elementos de un control ListBox en una hoja de cálculo de Excel. Para rellenar un control ListBox con un rango de celdas en una hoja de cálculo, utilice la propiedad OrigenDeLaFila (RowSource) . Cuando se utiliza la propiedad MultiSelect , puede configurar un control ListBox para aceptar las selecciones múltiples.

Cómo obtener el elemento actualmente seleccionado del control ListBox

Utilice la propiedad Value de un control ListBox para devolver el elemento seleccionado actualmente. Para devolver el elemento actualmente seleccionado en una control ListBox de selección simple, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a5 de Sheet1, escriba los valores que desea utilizar para rellenar el control ListBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control ListBox al UserForm.
  6. Haga doble clic en el control ListBox control todisplay la ventana de código para el control ListBox .
  7. En la ventana código, escriba el siguiente código para el evento Click de ListBox1 :
    Private Sub ListBox1_Click()    MsgBox ListBox1.ValueEnd Sub 
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en un elemento de la lista, aparece un cuadro de mensaje con el elemento actualmente seleccionado.

Cómo obtener los elementos seleccionados en un control ListBox de selección múltiple

Para determinar los elementos seleccionados en una control ListBox de selección múltiple, debe recorrer todos los elementos de la lista y, a continuación, consultar la propiedad Selected . Para devolver los elementos actualmente seleccionados en una control ListBox de selección múltiple, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a5 de Sheet1, escriba los valores que desea utilizar para rellenar el control ListBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control ListBox al UserForm.
  6. En el menú Ver , haga clic enPropiedades para ver la ventana de propiedades.
  7. Escriba los valores que se indican para las siguientes propiedades del control ListBox :
       Property	   Value   -----------     -----------------------   MultiSelect	   1 - frmMultiSelectMulti   RowSource	   Sheet1!A1:A8
  8. Agregue un control CommandButton al UserForm.
  9. Haga doble clic en el CommandButton control todisplay la ventana de código para el formulario UserForm.
  10. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Sub CommandButton1_Click ()       ' Loop through the items in the ListBox.       For x = 0 to ListBox1.ListCount - 1          ' If the item is selected...          If ListBox1.Selected(x) = True Then             ' display the Selected item.             MsgBox ListBox1.List(x)          End If       Next x    End Sub 
  11. En el menú Ejecutar , haga clic en RunSub/UserForm.
  12. Seleccione uno o más elementos en la lista.
  13. Haga clic en CommandButton1.
Después de hacer clic en CommandButton1, cada elemento seleccionado en el control ListBox aparece en un cuadro de mensaje independiente. Después de que aparecen todos los elementos seleccionados en un cuadro de mensaje, se cierra automáticamente el formulario UserForm.

Cómo utilizar la propiedad OrigenDeLaFila (RowSource) para llenar un control ListBox con las celdas en una hoja de cálculo

Para utilizar la propiedad OrigenDeLaFila (RowSource) para rellenar un control ListBox desde un rango de celdas en una hoja de cálculo, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a5 de Sheet1, escriba los valores que desea utilizar para rellenar el control ListBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control ListBox al UserForm.
  6. Agregue un control CommandButton al UserForm.
  7. Haga doble clic en el CommandButton control todisplay la ventana de código para el formulario UserForm.
  8. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    ListBox1.RowSource = "=Sheet1!A1:A5"End Sub 
  9. En el menú Ejecutar , haga clic en RunSub/UserForm.

    Nota: ListBox1 no contienen ningún valor.
  10. Haga clic en CommandButton1.
ListBox1 se rellena con los valores de las celdas a1: a5 de Sheet1.

Cómo llenar un control ListBox con los valores de una matriz

En este ejemplo se muestra cómo rellenar un control ListBox con una variable de matriz. Debe asignar los valores de la matriz al un elemento control ListBox en un momento. Normalmente, este proceso requiere el uso de una estructura de bucle, como un de... Próximo bucle. Para rellenar un control ListBox con una variable de matriz, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control ListBox al UserForm.
  5. En el menú Insertar , haga clic enmódulo para insertar una hoja de módulo.
  6. En la ventana código, escriba el siguiente código:
    Sub PopulateListBox()    Dim MyArray As Variant    Dim Ctr As Integer    MyArray = Array("Apples", "Oranges", "Peaches", "Bananas", "Pineapples")        For Ctr = LBound(MyArray) To UBound(MyArray)        UserForm1.ListBox1.AddItem MyArray(Ctr)    Next        UserForm1.ShowEnd Sub 
  7. En el menú Herramientas , haga clic enMacros, haga clic en PopulateListBoxy, a continuación, haga clic enEjecutar.
El procedimiento PopulateListBox genera una matriz simple y, a continuación, agrega los elementos de la matriz al control ListBox utilizando el método AddItem . A continuación, aparecerá el formulario UserForm.

Cómo utilizar un rango horizontal de celdas en una hoja de cálculo para llenar un control ListBox

Si establece la propiedad OrigenDeLaFila (RowSource) de un control ListBox en un rango horizontal de celdas, sólo el primer valor aparece en el control ListBox .

Para rellenar un control ListBox desde un rango horizontal de celdas utilizando el método AddItem , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: E1 de Sheet1, escriba los valores que desea utilizar para rellenar el control ListBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control ListBox al UserForm.
  6. En el menú Insertar , haga clic enmódulo para insertar una hoja de módulo.
  7. En la ventana código, escriba el siguiente código:
    Sub PopulateListWithHorizontalRange()    For Each x In Sheet1.Range("A1:E1")        UserForm1.ListBox1.AddItem x.Value    Next        UserForm1.ShowEnd Sub
  8. En el menú Herramientas , haga clic enMacros, haga clic enPopulateListWithHorizontalRangey, a continuación, haga clic enEjecutar.
El procedimiento de macro recorre apartado a1: celdas E5 en Sheet1, agregar los valores a ListBox1 uno a la vez.

Nota: ListBox1 no está enlazado a las celdas a1: E5 en Sheet1.

Cómo devolver varios valores de un control ListBox enlazado a varias columnas de datos

Puede dar formato a los controles de cuadro de lista para mostrar más de una columna de datos. Esto significa que el control ListBox muestra más de un elemento en cada línea de la lista. Para devolver varios valores desde el elemento seleccionado en la lista, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. Escriba los datos siguientes en las celdas que están onSheet1 indicado:

    A1: añoB1: regiónC1: ventas
    A2: 1996 B2: norteC2: 140
    A3: 1996B3: surC3: 210
    A4: 1997B4: norteC4: 190
    A5: 1997B5: surC5: 195
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control Label al UserForm.
  6. Agregue un control ListBox al UserForm.
  7. Haga clic en el cuadro de listay, a continuación, haga clic enPropiedades.
  8. Escriba o seleccione los valores que se indican para las siguientes propiedades del control ListBox que se enumeran en la tabla siguiente:
       Property       Value   ----------------------------   BoundColumn     1   ColumnCount     3   ColumnHeads     True   RowSource       Sheet1!A2:A5
  9. Haga doble clic en el control ListBox control todisplay la ventana de código para el control ListBox .
  10. En la ventana código, escriba el siguiente código:
    Private Sub ListBox1_Change()    Dim SourceData As Range    Dim Val1 As String, Val2 As String, Val3 As String        Set SourceRange = Range(ListBox1.RowSource)        Val1 = ListBox1.Value    Val2 = SourceRange.Offset(ListBox1.ListIndex, 1).Resize(1, 1).Value    Val3 = SourceRange.Offset(ListBox1.ListIndex, 2).Resize(1, 1).Value        Label1.Caption = Val1 & " " & Val2 & " " & Val3End Sub
  11. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en una entrada en el control ListBox , la etiqueta cambia para mostrar los tres de los elementos de esa entrada.

Cómo quitar todos los elementos de un control ListBox enlazado a una hoja de cálculo

Para quitar todos los elementos de un control ListBox enlazado a una hoja de cálculo, desactive el valor que se almacena en la propiedad OrigenDeLaFila (RowSource) . Para quitar elementos de un control ListBox enlazado a una hoja de cálculo, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a5 de Sheet1, escriba los valores que desea utilizar para rellenar el control ListBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control ListBox al UserForm.
  6. Haga clic en el control ListBox y haga clic en Propiedades.
  7. En la propiedad OrigenDeLaFila (RowSource) , escriba ¡ Hoja1! A1: A5.
  8. Agregue un control CommandButton al UserForm.
  9. Haga doble clic en el CommandButton control todisplay la ventana de código para el control CommandButton .
  10. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    ListBox1.RowSource = ""End Sub
  11. En el menú Ejecutar , haga clic en RunSub/UserForm.

    El control ListBoxque agregó al UserForm se rellena con thevalues que escribió en Sheet1.
  12. Haga clic en CommandButton1.
Todos los elementos se quitan de ListBox1.

Cómo quitar todos los elementos de un control ListBox que no está enlazado a una hoja de cálculo

No hay ningún comando VBA único que quita todos los elementos de un control de cuadro de lista si la lista no está enlazada a una hoja de cálculo. Para quitar todos los elementos de un control ListBox que se rellena a partir de una matriz de Visual Basic, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control ListBox al UserForm.
  5. En el menú Insertar , haga clic enmódulo para insertar una hoja de módulo.
  6. En la ventana código, escriba el siguiente código:
    Sub PopulateListBox()    Dim MyArray As Variant    Dim Ctr As Integer    MyArray = Array("Apples", "Oranges", "Peaches", "Bananas", "Pineapples")        For Ctr = LBound(MyArray) To UBound(MyArray)        UserForm1.ListBox1.AddItem MyArray(Ctr)    Next        UserForm1.ShowEnd Sub 
  7. Agregue un control CommandButton al UserForm.
  8. Haga doble clic en el CommandButton control todisplay la ventana de código para el control CommandButton .
  9. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    For i = 1 To ListBox1.ListCount        ListBox1.RemoveItem 0    Next IEnd Sub
  10. En el menú Herramientas , haga clic enMacros, haga clic en PopulateListBoxy, a continuación, haga clic enEjecutar.

    El control ListBox se rellena y, a continuación, aparecerá el formulario UserForm.
  11. Haga clic en CommandButton1.
Todos los elementos se quitan de ListBox1.

Para obtener información adicional acerca del control ListBox, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
161598 OFF: Cómo agregar datos a un control ComboBox o ListBox en Excel o Word
211446 XL2000: La propiedad TextColumn muestra sólo la primera columna
211896 XL2000: Cómo simular la combinación del control de edición de la lista para UserForms
211899 XL2000: Problemas establecer encabezados de columna en el control ListBox
213721 XL2000: Cómo quitar todos los elementos de un ListBox o un ComboBox
213722 XL2000: Cómo utilizar la propiedad TextColumn
213723 XL2000: Cómo devolver valores desde un cuadro de lista que muestra varias columnas
213746 XL2000: Cómo rellenar el control cuadro de lista con varios rangos
213748 XL2000: Cómo llenar un cuadro de lista basándose en otro cuadro de lista
213752 XL2000: Mediante el método AddItem provoca un error cuando OrigenDeLaFila (RowSource) está enlazado a datos
213756 XL2000: Utilizar el método RemoveItem con el control ListBox o ComboBox
213759 XL2000: Cómo determinar qué elementos están seleccionados en un cuadro de lista

Controles ComboBox

Puede utilizar el control ComboBox como un cuadro de lista desplegable, o como un cuadro combinado donde puede seleccionar un valor en una lista o escriba un nuevo valor. La propiedad Style determina si el control ComboBox actúa como un cuadro de lista desplegable o un cuadro combinado.

Nota: Todos los ejemplos en la sección anterior para el control ListBox pueden aplicarse también al control ComboBox , excepto el ejemplo "Cómo obtener los elementos seleccionados en un control ListBox de selección múltiple".

Cómo agregar un nuevo elemento a la lista si el control ComboBox no está enlazado a una hoja de cálculo

Cuando se escribe un valor que no está en la lista en el control ComboBox , desea agregar el nuevo valor a la lista. Para agregar el nuevo valor que escribió en el control ComboBox , si el control ComboBox no está enlazado a la hoja de cálculo, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control ComboBox al UserForm.
  5. En el menú Insertar , haga clic enmódulo para insertar una hoja de módulo.
  6. En la ventana código, escriba el siguiente código:
    Sub PopulateComboBox()     Dim MyArray As Variant     Dim Ctr As Integer     MyArray = Array("Apples", "Oranges", "Peaches", "Bananas", "Pineapples")         For Ctr = LBound(MyArray) To Ubound(MyArray)         UserForm1.ComboBox1.AddItem MyArray(Ctr)     Next         UserForm1.Show End Sub
  7. Agregue un control CommandButton al UserForm.
  8. Haga doble clic en el CommandButton control todisplay la ventana de código para el control CommandButton .
  9. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()     Dim listvar As Variant          listvar = ComboBox1.List         On Error Resume Next     ' If the item is not found in the list...     If IsError(WorksheetFunction.Match(ComboBox1.Value, listvar, 0)) Then         ' add the new value to the list.         ComboBox1.AddItem ComboBox1.Value     End If End Sub
  10. En el menú Herramientas , haga clic enMacros, haga clic en PopulateListBoxy, a continuación, haga clic enEjecutar.

    Se rellena el control ComboBox y, a continuación, aparecerá el formulario UserForm.
  11. En el control ComboBox , escriba Mangos (o cualquier valor es ya no está en la lista).
  12. Haga clic en CommandButton1.
El nuevo valor que escribió ahora aparece al final de la lista.

Cómo agregar un nuevo elemento a la lista si el control ComboBox está enlazado a una hoja de cálculo

Cuando un usuario escribe un valor que no está en la lista en el control ComboBox , desea agregar el nuevo valor a la lista. Para agregar el nuevo valor que escribió en el control de cuadro combinado a la lista, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a5 de Sheet1, escriba los valores que desea utilizar para rellenar el control ComboBox .
  3. Seleccione las celdas a1: a5 de Sheet1.
  4. En el menú Insertar , elijanombrey, a continuación, haga clic en definir.

    En el cuadronombres en el libro , escriba ListRange y, a continuación, haga clic en Correcto. Esto crea el nombre definido ListRange. Puede utilizar el nombre definido ListRange para enlazar la propiedad OrigenDeLaFila (RowSource) del control ComboBox a la hoja de cálculo.
  5. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  6. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  7. Agregue un control ComboBox al UserForm.
  8. En las Propiedades para ComboBox1, escriba ¡ Hoja1! ListRange como la propiedadOrigenDeLaFila (RowSource) .
  9. Agregue un control CommandButton al UserForm.
  10. Haga doble clic en el CommandButton control todisplay la ventana de código para el control CommandButton .
  11. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    Dim SourceData As Range    Dim found As Object        Set SourceData = Range("ListRange")    Set found = Nothing    ' Try to find the value on the worksheet.    Set found = SourceData.Find(ComboBox1.Value)        ' If the item is not found in the list...    If found Is Nothing Then        ' redefine ListRange.        SourceData.Resize(SourceData.Rows.Count + 1, 1).Name = "ListRange"        ' Add the new item to the end of the list on the worksheet.        SourceData.Offset(SourceData.Rows.Count, 0).Resize(1, 1).Value _         = ComboBox1.Value        ' Reset the list displayed in the ComboBox.        ComboBox1.RowSource = Range("listrange").Address(external:=True)    End IfEnd Sub
  12. En el menú Ejecutar , haga clic en RunSub/UserForm.

    Aparecerá el formulario UserForm de Sheet1.
  13. En el control ComboBox , escriba un valor que no está en la lista.
  14. Haga clic en CommandButton1.
El nuevo elemento que escribió en el control ComboBox se agrega a la lista y la lista que está enlazado el control ComboBox se amplía para incluir las celdas a1: a6.

Cómo mostrar la lista de un control ComboBox cuando aparece el formulario UserForm

En ocasiones, puede ser útil mostrar la lista de un control ComboBox cuando aparece por primera vez un UserForm. En el ejemplo siguiente se utiliza el evento Activate del objeto UserForm. Para mostrar la lista de un control ComboBox , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a5 de Sheet1, escriba los valores que desea utilizar para rellenar el control ComboBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  5. Agregue un control ComboBox al UserForm.
  6. En las Propiedades para ComboBox1, escriba ¡ Hoja1! A1: A5 como la propiedadOrigenDeLaFila (RowSource) .
  7. Haga doble clic en el UserForm para mostrar la ventana de theCode para el formulario UserForm.
  8. En la ventana código, escriba el siguiente código para el evento CommandButton Click :
    Private Sub UserForm_Activate()           ComboBox1.DropDown       End Sub
  9. En el menú Ejecutar , haga clic en RunSub/UserForm.
Aparecerá el formulario UserForm de Sheet1 y se puede ver la lista de ComboBox1.

Cómo mostrar la lista de un control ComboBox al realizar una selección en otro control ComboBox

Para mostrar la lista de un control ComboBox automáticamente cuando se realiza una selección en otro control ComboBox , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En las celdas a1: a10 de Sheet1, escriba los valores que desea utilizar para rellenar el control ComboBox .
  3. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  4. En el menú Insertar , haga clic enmódulo.
  5. En la ventana de código para el módulo, escriba el siguiente código:
    Sub DropDown_ComboBox()    UserForm1.ComboBox2.DropDownEnd Sub
  6. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  7. Agregue un control ComboBox al UserForm.
  8. En las Propiedades para ComboBox1, escriba ¡ Hoja1! A1: A5 como la propiedadOrigenDeLaFila (RowSource) .
  9. Haga doble clic en el control ComboBox Abrala ventana de código para el control ComboBox .
  10. En la ventana de código para el control ComboBox , escriba el siguiente código para el evento Click del control ComboBox :
    Private Sub ComboBox1_Click()    Application.OnTime Now, "DropDown_ComboBox"End Sub
  11. Agregue un segundo control ComboBox al UserForm.
  12. En las Propiedades para ComboBox2, escriba ¡ Hoja1! A6:A10 como la propiedadOrigenDeLaFila (RowSource) .
  13. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en un elemento de la lista ComboBox1 , la lista de ComboBox2 aparece automáticamente.

Para obtener información adicional acerca del control de cuadro combinado, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
161598 OFF: Cómo agregar datos a un control ComboBox o ListBox en Excel o Word
211446 XL2000: La propiedad TextColumn muestra sólo la primera columna
211899 XL2000: Problemas establecer encabezados de columna en el control ListBox
213717 XL2000: Error de tiempo de ejecución utilizando el método DropDown con un control ComboBox
213718 XL2000: Cómo mostrar una lista de ComboBox cuando un UserForm es muestra
213721 XL2000: Cómo quitar todos los elementos de un ListBox o un ComboBox
213722 XL2000: Cómo utilizar la propiedad TextColumn
213752 XL2000: Mediante el método AddItem provoca un error cuando enlazado a datos es OrigenDeLaFila (RowSource)
213756 XL2000: Utilizar el método RemoveItem con el control ListBox o ComboBox

Control Frame

Utilizar un control Frame para agrupar elementos relacionados lógicamente en un UserForm. Con frecuencia se utilizan controles Frame para agrupar controles OptionButton .

Cómo recorrer todos los controles en un control Frame

Utilizar un For Each... Próximo bucle para tener acceso a todos los controles de un control Frame , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control Frame en el formulario UserForm.
  5. Agregar un control OptionButton para el control Frame .

    Repita este paso para agregar dos controles OptionButton más en el control Frame .
  6. Haga doble clic en el control Frame para abrir la ventana theCode del control de marco .
  7. En la ventana código, escriba el siguiente código para el evento Click de marco :
    Private Sub Frame1_Click()    Dim Ctrl As Control        For Each Ctrl In Frame1.Controls        Ctrl.Enabled = Not Ctrl.Enabled    NextEnd Sub
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.
  9. En el UserForm, haga clic en el control Frame.
La primera vez que hace clic en el control Frame , todos los controles en el control Frame no están disponibles. Si hace clic en el control Frame de nuevo, los controles están disponibles de nuevo.

Control OptionButton

Puede utilizar grupos de controles OptionButton para realizar una selección entre un grupo de opciones. Puede utilizar cualquiera de las siguientes técnicas para agrupar los controles OptionButton :
  • Control Frame
  • Propiedad GroupName
Nota: El valor True , el valor y el valor de indican que un control OptionButton está seleccionado. El valor Off , el valor No y el valor False indican que no está seleccionado un control OptionButton .

Cómo determinar el control OptionButton que está seleccionado cuando los controles OptionButton en un control Frame

Cuando se agrupan controles de controles OptionButton mediante el uso de un control Frame , puede determinar el control OptionButton seleccionado recorrer todos los controles en el control Frame y comprobando la propiedad Value de cada control. Para determinar el control OptionButton que está seleccionado, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control Frame en el formulario UserForm.
  5. Agregar un control OptionButton para el control Frame .

    Repita este paso para agregar dos controles OptionButton más en el control Frame .
  6. Agregue un control CommandButton en el formulario UserForm fuera del control de marco .
  7. Haga doble clic en el CommandButton control todisplay la ventana de código para el formulario UserForm.
  8. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()     For Each x In Frame1.Controls         If x.Value = True Then             MsgBox x.Caption         End If     Next End Sub
  9. En el menú Ejecutar , haga clic en RunSub/UserForm.
  10. En el formulario UserForm, haga clic en un control OptionButton y, a continuación, haga clic enCommandButton1.
Aparece un cuadro de mensaje que contiene el título del control OptionButton seleccionado actualmente.

Cómo determinar el control OptionButton que está seleccionado

El propósito del siguiente ejemplo es determinar el control OptionButton que está seleccionado en el grupo1. Para crear un UserForm que tiene dos grupos de controles OptionButton , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control Frame en el formulario UserForm.
  5. Agregar un control OptionButton en el control Frame .

    Repita este paso para agregar dos controles OptionButton más en el control Frame .
  6. Para cada control OptionButton , escriba Grupo1 en la propiedad GroupName .
  7. Repita los pasos 4 y 5 para crear un segundo control de marco que contiene tres controles OptionButton .
  8. Para cada control OptionButton en el segundo control de marco , escriba Grupo2 en la propiedad GroupName .
  9. Agregue un control CommandButton en el formulario UserForm fuera de los controles de marco .
  10. Haga doble clic en el CommandButton control todisplay la ventana de código para el formulario UserForm.
  11. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()     Dim x As Control          ' Loop through ALL the controls on the UserForm.     For Each x In Me.Controls         ' Check to see if "Option" is in the Name of each control.         If InStr(x.Name, "Option") Then             ' Check Group name.             If x.GroupName = "Group1" Then                 ' Check the status of the OptionButton.                 If x.Value = True Then                     MsgBox x.Caption                     Exit For                 End If             End If         End If     Next End Sub
  12. En el menú Ejecutar , haga clic en RunSub/UserForm.
  13. En el UserForm, haga clic en un control OptionButton en grupo1 y, a continuación, haga clic enCommandButton1.
Aparece un cuadro de mensaje que contiene el título del control OptionButton que está seleccionado actualmente.

Para obtener información adicional acerca de los controles OptionButton, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213724 XL2000: Problemas propiedad TripleState para botón de opción

Control CheckBox

Puede utilizar un control de casilla de verificación para indicar un valor true o false. Un control de casilla de verificación que aparece con una marca de verificación indica un valor de True. Una casilla de verificación que aparece con ninguna marca de verificación indica un valor de False. Si es Trueel valor de la propiedad TripleState , un control CheckBox también puede tener un valor Null. Aparece un control de casilla de verificación que tiene un valor Null que no esté disponible.

Nota: El valor True , el valor y el valor de indican que un control de casilla de verificación está activado. El valor Off , el valor No y el valor False indican que un control de casilla de verificación está desactivado.

Cómo comprobar el valor de un control CheckBox

Para utilizar la propiedad Value para devolver el valor actual de un control de casilla de verificación , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control CheckBox al UserForm.
  5. En la lista de propiedades de CheckBox1, seleccione True como la propiedad TripleState .
  6. Haga doble clic en la casilla de verificación control todisplay la ventana de código del control CheckBox .
  7. En la ventana código, escriba el siguiente código para el evento Change CheckBox1 :
    Private Sub CheckBox1_Change()    Select Case CheckBox1.Value        Case True            CheckBox1.Caption = "True"        Case False            CheckBox1.Caption = "False"        Case Else            CheckBox1.Caption = "Null"    End SelectEnd Sub
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en el control de casilla de verificación , el título del control CheckBox cambia para reflejar el valor actual.

Control ToggleButton

Un control ToggleButton tiene la misma apariencia que un control CommandButton hasta que haga clic en él. Al hacer clic en un control ToggleButton , parece que se presionó o se trasladará. La propiedad Value de un control ToggleButton es True cuando el botón está seleccionado y False cuando el botón no está seleccionado. Si es Trueel valor de la propiedad TripleState , un control ToggleButton también puede tener un valor Null. Aparece un control ToggleButton que tiene un valor de Null no está disponible.

Nota: El valor True , el valor y el valor de indican que un control ToggleButton está seleccionado. El valor Off , el valor No y el valor False indican que no está seleccionado un control ToggleButton .

Cómo obtener el valor de un control ToggleButton

Para obtener el valor de un control ToggleButton , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregar un control ToggleButton en el formulario UserForm.
  5. Agregue un control Label al UserForm.
  6. Haga doble clic en el control ToggleButton control elabierta la ventana de código para el control ToggleButton .
  7. En la ventana código, escriba el siguiente código para el evento ToggleButton1Click :
    Private Sub ToggleButton1_Click()    If ToggleButton1.Value = True Then        ' Set UserForm background to Red.        Me.BackColor = RGB(255, 0, 0)    Else        ' Set UserForm background to Blue.        Me.BackColor = RGB(0, 0, 255)    End IfEnd Sub
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en el control ToggleButton , el color de fondo de los cambios de UserForm.

Cómo crear un grupo de controles ToggleButton mutuamente exclusivos

Este ejemplo utiliza el evento MouseUp para establecer una variable y llama al procedimiento ExclusiveToggleButtons . El procedimiento ExclusiveToggleButtons determina el control ToggleButton que está seleccionado y, a continuación, cancela las demás. Para crear un grupo de controles ToggleButton mutuamente exclusivos, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enmódulo.
  4. En la ventana de código para el módulo, escriba el siguiente código:
    ' Variable that holds the name of the ToggleButton that was clicked.Public clicked As StringSub ExclusiveToggleButtons()   Dim toggle As Control   ' Loop through all the ToggleButtons on Frame1.   For Each toggle In UserForm1.Frame1.Controls       ' If Name of ToggleButton matches name of ToggleButton       ' that was clicked...       If toggle.Name = clicked Then          '...select the button.          toggle.Value = True       Else          '...otherwise clear the selection of the button.          toggle.Value = False       End If    NextEnd Sub
  5. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  6. Agregue un control Frame en el formulario UserForm.
  7. Agregar un control ToggleButton en el control Frame .

    Repita este paso para agregar dos controles ToggleButton más en el control Frame .
  8. Haga doble clic en el control Frame para visualizar ventana de código para el formulario UserForm.
  9. En la ventana de código para el módulo, escriba el siguiente procedimiento el evento ToggleButton MouseUp :
    Private Sub ToggleButton1_MouseUp(ByVal Button As Integer, _              ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)       clicked = ToggleButton1.Name       Application.OnTime Now, "ExclusiveToggleButtons"    End Sub    Private Sub ToggleButton2_MouseUp(ByVal Button As Integer, _              ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)        clicked = ToggleButton2.Name        Application.OnTime Now, "ExclusiveToggleButtons"    End Sub    Private Sub ToggleButton3_MouseUp(ByVal Button As Integer, _              ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)        clicked = ToggleButton3.Name        Application.OnTime Now, "ExclusiveToggleButtons"    End Sub
  10. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en un control ToggleButton , se cancela el control ToggleButton previamente seleccionado.

Control TabStrip

Utilice un control TabStrip para ver diferentes conjuntos de información para un conjunto de controles.

Cómo controlar mediante programación un control TabStrip

Para cambiar la propiedad BackColor de un control de imagen basada en la ficha seleccionada, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en Editor de Visual Basic.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control TabStrip en el formulario UserForm.
  5. Agregar un control de imagen que cubre la base del control TabStrip , pero no cubre las fichas.
  6. En el panel Propiedades Image1, escribaDE & H000000FF & LA en la propiedad BackColor .
  7. Haga doble clic en el control TabStrip Abrala ventana de código para el control TabStrip .
  8. En la ventana código, escriba el siguiente código para el evento Change TabStrip1 :
    Private Sub TabStrip1_Change()    Dim i As Integer    i = TabStrip1.SelectedItem.Index    Select Case i        Case 0            ' If Tab1 is selected, change the color of Image control to Red.            Image1.BackColor = RGB(255, 0, 0)        Case 1            ' If Tab2 is selected, change the color of Image control to Green.            Image1.BackColor = RGB(0, 255, 0)    End SelectEnd Sub
  9. En el menú Ejecutar , haga clic en RunSub/UserForm.
El color del control de imagen cambia dependiendo de la página en el control TabStrip que está activo.

Para obtener información adicional acerca del control TabStrip, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213254 XL2000: Cómo utilizar el control TabStrip en un formulario de usuario

Control multiPage

Utilizar un control MultiPage para trabajar con una gran cantidad de información que pueda clasificarse en varias categorías. Un control MultiPage está formado por uno o más página objetos que cada uno contiene un conjunto de controles diferentes. Puede establecer la página activa mediante programación estableciendo la propiedad Value del control MultiPage .

Cómo controlar mediante programación un control MultiPage

Para agregar un control MultiPage y controlarlo mediante una macro, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregar un control MultiPage en el formulario UserForm.
  5. Agregue un control Label a la página 1 en el control MultiPage .
  6. Agregue un control TextBox en Page1 en el control MultiPage .
  7. En el control MultiPage , haga clic en Página2y, a continuación, repita los pasos 5y 6 para agregar un control Label y un control TextBox .
  8. Haga doble clic en el control MultiPage Abrala ventana de código para el control MultiPage .
  9. En la ventana código, escriba el siguiente código para el evento Change MultiPage1 :
    Private Sub MultiPage1_Change()    Select Case MultiPage1.Value        ' If activating Page1...        Case 0            Label1.Caption = TextBox2.Text            TextBox1.Text = ""        ' If activating Page2...        Case 1            Label2.Caption = TextBox1.Text            TextBox2.Text = ""    End SelectEnd Sub
  10. En la ventana código, escriba el siguiente código en el evento UserForm Initialize :
    Private Sub UserForm_Initialize()    ' Force Page1 to be active when UserForm is displayed.    MultiPage1.Value = 0    Label1.Caption = ""End Sub
  11. En el menú Ejecutar , haga clic en RunSub/UserForm.

    En el control TextBox en Page1, escriba Prueba. Cuando youclick la ficha Página2 , TextBox2 está desactivada y el título de Label2 cambia a la entrada que realizó en TextBox1 en Page1 ("prueba").

Cómo crear una interfaz de asistente mediante el uso de un control MultiPage

Cuando una tarea requiere varios pasos incrementales, una interfaz de asistente puede ser muy eficaz. Puede utilizar el control MultiPage para crear una interfaz de asistente en lugar de utilizar varios formularios de usuario. En este ejemplo se manipula un control MultiPage que tiene tres páginas. Un procedimiento que está vinculado el evento Initialize de UserForm deshabilita Page2 y página 3 y fuerza Page1 del control MultiPage esté activo.

Nota: Al indizar las páginas de un control MultiPage mediante la colección de páginas , la primera página de la colección es cero de la página. Este procedimiento también se establece el título de los controles CommandButton y deshabilita el <> botón.

Nota: El procedimiento que se asigna al evento Click de CommandButton1 controla la funcionalidad de la <> botón. El procedimiento que se asigna al evento Click de CommandButton2 controla la funcionalidad de la siguiente > botón. Para crear una interfaz de asistente mediante el uso de un control MultiPage , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregar un control MultiPage en el formulario UserForm.
  5. Haga clic en la ficha de página 1 y, a continuación, haga clic enNueva página para agregar la página 3 para el control MultiPage .
  6. Agregue un control CommandButton en el formulario UserForm que no está en el control MultiPage .

    Repita este paso para agregar un segundo control CommandButton en el formulario UserForm.
  7. Haga doble clic en el UserForm para abrir el Codewindow para el formulario UserForm.
  8. En la ventana código, escriba el siguiente código en el evento UserForm Initialize :
    Private Sub UserForm_Initialize()    With MultiPage1        ' The next 2 lines disable Page2 & Page3.        .Pages(1).Enabled = False        .Pages(2).Enabled = False        ' Make Page1 the active page.        .Value = 0    End With        ' Set the caption on the CommandButtons.    CommandButton1.Caption = "<Back"    CommandButton1.Enabled = False    CommandButton2.Caption = "Next>"End Sub' Procedure for the "<Back" buttonPrivate Sub CommandButton1_Click()    Select Case MultiPage1.Value        Case 1                                 ' If Page2 is active...            With MultiPage1                .Pages(0).Enabled = True       ' Enable Page1.                .Value = MultiPage1.Value - 1  ' Move back 1 page.                .Pages(1).Enabled = False      ' Disable Page2.            End With            CommandButton1.Enabled = False     ' Disable Back button.                    Case 2                                 ' If Page3 is active...            With MultiPage1                .Pages(1).Enabled = True       ' Enable Page2.                .Value = MultiPage1.Value - 1  ' Move back 1 page.                .Pages(2).Enabled = False      ' Disable Page3.   CommandButton2.Caption = "Next>"            End With    End SelectEnd Sub' Procedure for the "Next>" buttonPrivate Sub CommandButton2_Click()    Select Case MultiPage1.Value        Case 0                                  ' If Page1 is active...            With MultiPage1                .Value = MultiPage1.Value + 1   ' Move forward 1 page.                .Pages(1).Enabled = True        ' Enable Page2.                .Pages(0).Enabled = False       ' Disable Page1.            End With            CommandButton1.Enabled = True       ' Enable Back button.                    Case 1                                  ' If Page2 is active...            With MultiPage1                .Value = MultiPage1.Value + 1   ' Move forward 1 page.                .Pages(2).Enabled = True        ' Enable Page3.                .Pages(1).Enabled = False       ' Disable Page2.            End With            CommandButton2.Caption = "Finish"   ' Change Next button to Finish.                    Case 2                                  ' If Page3 is active...            MsgBox "Finished!"                  ' User is Finished.            Unload Me                           ' Unload the UserForm.    End SelectEnd Sub
  9. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al hacer clic en siguiente >, Página2 está activado y el <> botón esté disponible. Al hacer clic en siguiente > una segunda vez, se activa la página 3 y el título de CommandButton2 cambia a "Finalizar".

Control ScrollBar

Puede utilizar un control ScrollBar cuando desee cambiar el valor mostrado por el otro control, como un control de etiqueta .

Cómo cambiar un control Label que se basa en el valor de un control de barra de desplazamiento

Para cambiar la propiedad Caption de un control Label a la configuración actual de la propiedad Value de un control de barra de desplazamiento , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control de barra de desplazamiento al UserForm.
  5. Agregue un control Label al UserForm.
  6. Haga doble clic en el control de barra de desplazamiento a la ventana de código Abrala para el control de barra de desplazamiento .
  7. En la ventana código, escriba el siguiente código para el evento Change ScrollBar1 :
    Private Sub ScrollBar1_Change()    Label1.Caption = ScrollBar1.ValueEnd Sub
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.
Al desplazarse con el control de barra de desplazamiento , Label1 se actualiza con el valor actual del control de barra de desplazamiento .

Control SpinButton

Con frecuencia se utiliza un control SpinButton , similar a un control de barra de desplazamiento para incrementar o reducir el valor de otro control, como un control de etiqueta . La propiedad SmallChange determina cuánto el valor de un control SpinButton cambia cuando se hace clic.

Cómo agregar un control SpinButton que incrementa o disminuye una fecha en la que se almacena en un control TextBox

Para agregar un control SpinButton que incrementa o disminuye una fecha en la que se almacena en un control TextBox , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregar un control SpinButton para el formulario UserForm.
  5. Agregue un control TextBox en el formulario UserForm.
  6. Haga doble clic en el control SpinButton control elabierta la ventana de código para el control SpinButton .
  7. En la ventana código, escriba el siguiente código para el evento SpinUp SpinButton1 :
    Private Sub SpinButton1_SpinUp()    TextBox1.Text = DateValue(TextBox1.Text) + 1End Sub
  8. En la ventana código, escriba el siguiente código para el evento SpinDown SpinButton1 :
    Private Sub SpinButton1_SpinDown()    TextBox1.Text = DateValue(TextBox1.Text) - 1End Sub
  9. En la ventana código, escriba el siguiente código en el evento UserForm Initialize :
    Private Sub UserForm_Initialize()    TextBox1.Text = DateEnd Sub
  10. En el menú Ejecutar , haga clic en RunSub/UserForm.
Cuando aparezca el formulario de usuario, la fecha actual aparece en TextBox1. Al hacer clic en el control SpinButton , la fecha se incrementa o reduce en un día.

En este ejemplo, si cambia la propiedad SmallChange de SpinButton1, no afecta al número de días que la entrada en TextBox1 cambia por cuando hace clic en SpinButton1. El número de días se determina únicamente por el procedimiento que se ha vinculado a los eventos de SpinButton1SpinDown y SpinUp .

Para obtener información adicional acerca del control SpinButton, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213224 XL2000: ejemplo de Visual Basic para utilizar un botón de número con una fecha

Control RefEdit

El control RefEdit imita el comportamiento de los cuadros de referencia que están integradas en Excel. Puede utilizar la propiedad Value para obtener la dirección de la celda actual se almacenan en un control RefEdit .

Cómo rellenar un rango de celdas basándose en el rango que seleccione mediante el control RefEdit

Para utilizar el control RefEdit para rellenar las celdas, siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control RefEdit en el UserForm.
  5. Agregue un control CommandButton al UserForm.
  6. Haga doble clic en el CommandButton control elabierta la ventana de código para el control CommandButton .
  7. En la ventana código, escriba el siguiente código para el evento Click de CommandButton1 :
    Private Sub CommandButton1_Click()    Dim MyRange As String    MyRange = RefEdit1.Value    Range(MyRange).Value = "test"    Unload MeEnd Sub
  8. En el menú Ejecutar , haga clic en RunSub/UserForm.

    El UserFormappears.
  9. Haga clic en el botón en el control RefEdit .

    Observe que se contrae el UserForm.
  10. Seleccione un rango de celdas, como a1: a5 y, a continuación, haga clic en Examinar en el control RefEdit para expandir el UserForm.
  11. Haga clic en CommandButton1.
Cierra el formulario UserForm y las celdas que seleccionó ahora contienen la palabra "prueba".

Para obtener información adicional acerca del control RefEdit, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213776 XL2000: Cómo utilizar el control RefEdit con un formulario de usuario

Control de imagen

Es el propósito del control Image mostrar una imagen en un formulario de usuario. Para asignar una imagen a un control de imagen en tiempo de ejecución, utilice la función LoadPicture .

Cómo cargar una imagen en un control de imagen

Para insertar un control de imagen que le pide que seleccione una imagen para cargar al hacer clic en el control de imagen , siga estos pasos:
  1. Inicie Excel y, a continuación, abra un nuevo libro en blanco.
  2. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  3. En el menú Insertar , haga clic enUserForm para insertar un UserForm en el libro.
  4. Agregue un control de imagen en el formulario UserForm.
  5. Haga doble clic en el control de imagen para abrir la ventana de theCode para el control de imagen .
  6. En la ventana código, escriba el siguiente código para el evento Click Image1 :
    Private Sub Image1_Click()    Dim fname As String        ' Display the Open dialog box.    fname = Application.GetOpenFilename(filefilter:= _            "Bitmap Files(*.bmp),*.bmp", Title:="Select Image To Open")        ' If you did not click Cancel...    If fname <> "False" Then        ' Load the bitmap into the Image control.        Image1.Picture = LoadPicture(fname)        ' Refresh the UserForm.        Me.Repaint    End IfEnd Sub
  7. En el menú Ejecutar , haga clic en RunSub/UserForm.

    Aparecerá el formulario UserForm.
  8. Haga clic en el control de imagen .

    Cuando haga clic en el control Image , la boxappears de diálogo Seleccionar imagen de apertura , y, a continuación, puede seleccionar un archivo de mapa de bits para insertar en thecontrol.
Para obtener información adicional acerca del control de imagen, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213732 XL2000: Mediante la función LoadPicture con un control de imagen

Información adicional

El Examinador de objetos

Una lista completa de todas las propiedades y métodos para un comando específico está disponible en el Examinador de objetos. Para encontrar esta información en Excel, siga estos pasos:
  1. En el menú Herramientas , elijaMacroy, a continuación, haga clic en BasicEditor Visual.
  2. En el menú Ver , haga clic en ObjectBrowser.
  3. En el cuadro Buscar texto , escriba el nombre del control que desee y, a continuación, haga clic en Buscar.
Para obtener más información acerca de cómo utilizar el Examinador de objetos en el Editor de Visual Basic, haga clic en Ayuda de Microsoft Visual Basic en el menú Ayuda , escriba Examinador de objetos en el Ayudante de Office o el Asistente para Ayuda y, a continuación, haga clic en Buscar para ver el tema.
Para obtener información adicional acerca de cómo instalar la Ayuda de Microsoft Excel en el equipo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
231946 OFF2000: Cómo agregar o quitar un único programa de Office o un componente

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 829070 - Última revisión: 06/11/2016 06:25:00 - Revisión: 26.0

Microsoft Office Excel 2003, Microsoft Excel 2010, Microsoft Office Excel 2007, Excel 2016, Microsoft Excel 2013

  • kbprogramming kbfunctions kbhowtomaster kbhowto kbmt KB829070 KbMtes
Comentarios