Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Uso y Propiedades del Combobox

| 46 comentarios

El COMBOBOX es una herramienta que se presenta al crear un UserForm dentro VisualBasic.

combobox Uso y Propiedades del ComboboxESTE ES UN EJEMPLO DE UN COMBOBOX.

El COMBOBOX es una herramienta muy importante dentro del EXCEL especialmente en la creacion e implementacion de formularios.

La principal tarea del COMBOBOX es el despliegue de información, esto se logra dando click en la flechita de la figura anterior, habiendo sido insertada la informacion con anterioridad.

A continuación se mostrara dos formas de insertar información en un COMBOBOX.

PRIMERA FORMA:

Esta forma es la más útil , ya que no se tiene que estar accediendo al código para insertar algún elemento dentro del COMBOBOX . Por el contrario la información es agregada en ciertas celdas del excel, la cual con un código pertinente sera insertada dentro del COMBOBOX.

Por ejemplo:

combobox1 Uso y Propiedades del Combobox

combox2 Uso y Propiedades del Combobox

El programa busca apartir de la celda (2,1) hacia abajo y empieza a insertar los elementos dentro del COMBOBOX hasta que ya no encuentre elementos en las celdas.

combobox3 Uso y Propiedades del Combobox

Se despliega la información .

SEGUNDA FORMA:

Esta segunda forma consiste en insertar los elementos en el COMBOBOX desde el código.

Por ejemplo:

cb1 Uso y Propiedades del Combobox

Los elementos son insertados al COMBOBOX desde el código del programa

cb2 Uso y Propiedades del Combobox

Se despliegan los elementos en el COMBOBOX

PROPIEDADES DEL COMBOBOX:

nuevo Uso y Propiedades del Combobox

El COMBOBOX presenta muchas propiedades dentro de las cuales están:

Apariencia
Comportamiento
Dato
Fuente
Posición
Otros

prop1 Uso y Propiedades del Combobox

Elaborado por: Susana Malca

46 comentarios

  1. amigo necesito una ayuda y orientacion con el combobox y es lo siguiente note que modificando ciertos parametros del combobox es posible mostrar multiples columnas, en mi caso necesito almacenar es la 2da columna que muestra, de qué forma podria hacerle entender al combobox que las columnas mostradas necesito la 2da la posicion seleccionada y guardarla en una variable?? se que en columncount colocas mas de 1 y se visualizaran las columnas y hasta encabezados de esas columnas pero mi asunto es que la columna que me muestra A y B necesito cuando señale un registro me guarde el dato en una variable que esta en la columna B espero tu respuesta y gracias...

    • wimporte = Val(ComboBox1.List(ComboBox1.ListIndex, 1 ))

      con esta linea capturas lo que esta en la columna 1 , ya que la primera es la 0

  2. migo suponiendo esta situacion uso un combobox para para una tabla “proovedores” y en esta en esta forma

    Codigo_EMpresa Nombre_Empresa
    002522555 Empresa1
    002555458 Empresa2
    004556654 Empresa3

    Mi combobox me muestra ambas columnas perfectamente, al señalar la empresa me guarda el codigo_empresa por ejemplo señalo el 2do registro que es “002555458″ quisiera almacenar en una variable o celda de la hoja excel es el nombre que corresponde a ese codigo que sera “Empresa2″, para un uso posterior a dicho nombre espero me puedan ayudar o orientar salu2…

  3. necesito saber como programar u combobox en excel vb que me despliege dos coluna de datos, gracias

    • Podrías concatenarlo antes de mostrarl en el combobox

  4. Hola.

    - Tengo una base de datos en excel.
    - Ligue un ComboBox a una columna completa.
    - Requiero, mediante un boton, saber en cual celda, de esa columna esta el valor seleccionado en el comboBox.

    He leido mucho y nadie tiene una repuesta
    Si alguien me puede ayudar, se lo agradeceria.

    Gracias

    • Lo puedes lograr a través de esta formula:

      Dim x As Integer
      x = 3

      Set Cell = Cells.Find(What:=TxtNombre, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

      If Cell Is Nothing Then MsgBox "Error, la persona no existe.": x = 2: TxtNombre = Empty: TxtApellido = Empty: TxtRUT = Empty: TxtEdad = Empty: TxtTeléfono = Empty

      If x = 3 Then

      Cell.Activate

      ActiveCell.Offset(0, 1).Select
      TxtApellido = ActiveCell

      ActiveCell.Offset(0, 1).Select
      TxtRUT = ActiveCell

      ActiveCell.Offset(0, 1).Select
      TxtEdad = ActiveCell

      ActiveCell.Offset(0, 1).Select
      TxtTeléfono = ActiveCell

      End If

      End Sub

      Saludos

    • Puedes utilizar la propiedad Row para saber en que fila de la columna esta ese valor, lo cargas en una variable y lo muestras en un Txbox o en un Msgbox
      Saludos

    • Hola, puedes usar la propiedad listindex, que va, por defecto, de 0 a n-1. N es el número de opciones. Es dato te sirve para indexar la fila correcta de la selección

  5. Muy buenas tardes, estoy realizando un formulario donde pueda modificar data que fue ingresada de forma errónea, a través de la web he ido indagando de como se hace este proceso, aquí le muestro lo que he hecho. el problema que encuentro es que cuando ejecuto la rutina, en el ComboBox no sale la lista desplegada con el numero de identificación de los inscritos, me gustaría que me asesoraran al respecto, es decir dentro de lo que he hecho que estoy haciendo mal, gracias de antemano

    Private Sub ComboBox1_Change()
    Dim Fila As Integer
    Dim Final As Integer

    If ComboBox1.Value = "" Then
    Me.txt_Nombre = ""
    Me.txt_Descrip = ""
    End If

    For Fila = 2 To 1000
    If Hoja2.Cells(Fila, 1) = "" Then
    Final = Fila - 1
    Exit For
    End If
    Next

    For Fila = 2 To Final
    If ComboBox1 = Hoja2.Cells(Fila, 1) Then
    Me.txt_Nombre = Hoja2.Cells(Fila, 2)
    Me.txt_Descrip = Hoja2.Cells(Fila, 3)
    Exit For
    End If
    Next

    End Sub
    Private Sub ComboBox1_Enter()
    Dim Fila As Integer
    Dim Final As Integer
    Dim Lista As String

    For Fila = 1 To ComboBox1.ListCount
    ComboBox1.RemoveItem 0
    Next Fila

    For Fila = 2 To 1000
    If Hoja2.Cells(Fila, 1) = "" Then
    Final = Fila - 1
    Exit For
    End If
    Next

    For Fila = 2 To Final
    Lista = Hoja2.Cells(Fila, 1)
    ComboBox1.AddItem (Lista)
    Next
    End Sub

  6. Estimada Susana, en el mensaje anterior es lo que conseguí en la web, en base a lo anterior esto es lo que hice pero no funciona correctamente, es decir, en el ComboBox no sale la lista desplegada con el numero de identificación de los inscritos, me gustaría que me asesoraran al respecto, indiqueme que estoy haciendo mal, gracias de antemano

    Private Sub ComboBox1_Change()
    Dim Fila As Integer
    Dim Final As Integer

    If ComboBox1.Value = "" Then
    Me.txt_PrimerApellido = ""
    Me.txt_SegundoApellido = ""
    Me.txt_PrimerNombre = ""
    Me.txt_SegundoNombre = ""
    Me.txt_NodeTitulo = ""
    Me.txt_CentroAsistencial = ""
    Me.txt_FechaInscrip = ""
    Me.txt_fechaNacim = ""
    Me.txt_Descrip = ""
    End If

    For Fila = 7 To 4070
    If Hoja4.Cells(Fila, 3) = "" Then
    Final = Fila - 1
    Exit For
    End If
    Next

    For Fila = 7 To Final
    If ComboBox1 = Hoja4.Cells(Fila, 3) Then
    Me.txt_PrimerApellido = Hoja4.Cells(Fila, 4)
    Me.txt_SegundoApellido = Hoja4.Cells(Fila, 5)
    Me.txt_PrimerNombre = Hoja4.Cells(Fila, 6)
    Me.txt_SegundoNombre = Hoja4.Cells(Fila, 7)
    Me.txt_NodeTitulo = Hoja4.Cells(Fila, 8)
    Me.txt_CentroAsistencial = Hoja4.Cells(Fila, 9)
    Me.txt_FechaInscrip = Hoja4.Cells(Fila, 11)
    Me.txt_fechaNacim = Hoja4.Cells(Fila, 13)
    Me.txt_Descrip = Hoja4.Cells(Fila, 14)
    Exit For
    End If
    Next

    End Sub
    Private Sub ComboBox1_Enter()
    Dim Fila As Integer
    Dim Final As Integer
    Dim Lista As String

    For Fila = 7 To ComboBox1.ListCount
    ComboBox1.RemoveItem 0
    Next Fila

    For Fila = 7 To 4070
    If Hoja4.Cells(Fila, 3) = "" Then
    Final = Fila - 1
    Exit For
    End If
    Next

    For Fila = 7 To Final
    Lista = Hoja4.Cells(Fila, 3)
    ComboBox1.AddItem (Lista)
    Next
    End Sub

    Private Sub CommandButton1_Click()
    Dim Fila As Integer
    Dim Final As Integer

    For Fila = 7 To 4070
    If Hoja4.Cells(Fila, 3) = "" Then
    Final = Fila - 1
    Exit For
    End If
    Next

    For Fila = 7 To Final
    If Me.ComboBox1 = Hoja4.Cells(Fila, 3) Then
    Hoja4.Cells(Fila, 4) = Me.txt_PrimerApellido
    Hoja4.Cells(Fila, 5) = Me.txt_SegundoApellido
    Hoja4.Cells(Fila, 6) = Me.txt_PrimerNombre
    Hoja4.Cells(Fila, 7) = Me.txt_SegundoNombre
    Hoja4.Cells(Fila, 8) = Me.txt_NodeTitulo
    Hoja4.Cells(Fila, 9) = Me.txt_CentroAsistencial
    Hoja4.Cells(Fila, 11) = Me.txt_FechaInscrip
    Hoja4.Cells(Fila, 13) = Me.txt_fechaNacim
    Hoja4.Cells(Fila, 14) = Me.txt_Descrip
    Exit For
    End If
    Next

    Me.txt_PrimerApellido = ""
    Me.txt_SegundoApellido = ""
    Me.txt_PrimerNombre = ""
    Me.txt_SegundoNombre = ""
    Me.txt_NodeTitulo = ""
    Me.txt_CentroAsistencial = ""
    Me.txt_FechaInscrip = ""
    Me.txt_fechaNacim = ""
    Me.txt_Descrip = ""

    End Sub

    Private Sub CommandButton2_Click()
    Unload Me
    End Sub

    Private Sub txt_NodeTitulo_Change()

    End Sub

    Private Sub txt_FechaInscrip_Change()

    End Sub

    Private Sub txt_fechaNacim_Change()

    End Sub

  7. Creo que este comentario es importante, la columna 3 la cual contiene el numero de identificación es de tipo numérico, no se si esto es lo que hace el formulario

  8. Hola, tengo varias combobox en un formulario en vba, sucede que quiero usar los valores que seleccione el usuario en dichas combobox para operar con ellos en celdas de la hoja de calculo... ¿cómo hago eso?

    Ejemplo:

    En el formulario el usuario digita el valor de un arrendamiento correspondiente al año anterior y con ayuda de una combobox selecciona cuantos puntos por encima de la inflación se le aplica de incremento al canon.

    La idea seria que al ingresar el valor en la combobox inmediatamente se modifique en una celda de excel el próximo valor de arrendamiento a pagar.

    Arrendamiento viejo = arrendamiento nuevo *(1+ inflación + combobox)

    Muchas gracias...

  9. Cordial saludo,
    .
    Me gustaría saber como puedo impedir que el usuario ingrese una información que no aparezca entre las opciones que tiene el combo.
    Es decir, si en el combo esta SI y NO como valores, que no puedan escribir o seleccionar algo diferente como otras letras o números.

    Quedo atento cualquier comentario que me puedan brindar.
    De antemano muchas gracias

    • Excel MENÚ DATOS
      validación de datos
      Permitir → escoge "lista"
      Pestaña "Mensaje de error" → detener

    • Usa la propiedad enableb en false asi solo pueden llenarlo con las opciones de tu desplegable

  10. Buen día, alguien me podría ayudar con la siguiente duda,

    Necesito mediante una macro que se solicite ingresar un mes y que el usuario tenga la posibilidad mediante una lista desplegable de escoger dicho mes.

    Muchas gracias por la ayuda que me puedan brindar.

  11. Buenas noches, estoy programando un formulario para que al seleccionar un codigo con un Combobox, me muestre algunos datos en tres Textbox, ahora bien... funciona si solo si, hago el llamado a un codigo numerico pero al apuntar a un alfanumerico no me muestra nada en los textbox ¿Que puedo hacer? les muestro el código:

    Ejemplo: Cuando apunto al codigo 001 me muestra los datos que quiero, pero al apuntar a uno llamado PT 006 no me muestra nada; o a cualquier alfanumerico

    Private Sub ComboBox4_Change()
    'Mantiene las cajas de Texto vacias si la principal se encuentra en blanco
    Dim fila As Integer
    Dim final As Integer
    If ComboBox4.Value = "" Then

    TextBox5.Text = ""
    TextBox6.Text = ""
    TextBox7.Text = ""

    End If

    For fila = 9 To 1000
    If Sheet10.Cells(fila, 2) = "" Then
    final = fila - 1
    Exit For

    End If
    Next

    For fila = 9 To 1000
    'Para llenar automaticamente los campos segun un criterio

    If Val(ComboBox4.Value) = Sheet10.Cells(fila, 2) Then

    TextBox5.Text = Sheet10.Cells(fila, 3)
    TextBox6.Text = Sheet10.Cells(fila, 4)
    TextBox7.Text = Sheet10.Cells(fila, 6)

    Exit For
    'Vacia las cajas de texto
    Else
    TextBox5.Text = ""
    TextBox6.Text = ""
    TextBox7.Text = ""

    End If

    Next

    End Sub

  12. Intento programar 6 combobox independientes en un mismo formulario de registro de alumnos. Y sólo logro programar el primero. ¿Qué debo hacer?

    Hasta ahora me funciona sólo la primera combobox que indica los días del mes:

    Private Sub UserForm_Activate()

    Dim rango, celda As Range
    Set rango = Worksheets("Formulas").Range("K9:K39")

    For Each celda In rango
    BxDia.AddItem celda.Value
    Next celda

    End Sub

    Gracias de anemano

    • ¡ FAVIOLA ¡……Qué manera .., lo único que hace todo ese código es cargar el ComboBox1, y pensar que lo mismo hay que repetir para los otros 5 “ComboBox” restantes.
      Requeriste declarar dos variables Objeto (“Rango” y “Celda”) en este caso de tipo Range….ok
      Asignar a la variable objeto llamada “Rango”, el rango fijo “k9:k39” de la hoja de trabajo llamada “Formulas” del libro de trabajo actual….ok
      Crear un bucle For Each…NEXT, para recorrer mediante la variable “Celda” uno a uno los elementos del rango “k9:k39”, asignados en el paso anterior a la variable “Rango”….ok
      Para finalmente solo cargar el ComBox1 al que llamaste “BxDia”, utilizando el método AddItem con los valores que contenga la variable “Celda”.
      ¡Por favor Faviola…son demasiadas vueltas, es mejor utilizar la propiedad RowSourse !
      1) Abre VBA presionando teclas ALT + F11
      2) Selecciona el ComboBox1, Haz click Derecho, Click en propiedades
      3) Busca la propiedad RowSourse y teclea Formulas!k9:k39
      4) Repite los pasos 2 y 3 para los ComboBox restantes, asignando el rango donde se localizan los elementos que deseas agregar a cada ComboBox.
      Una sugerencia, deja de utilizar rangos fijos y utiliza rangos dinámicos obtendrás mejores resultados. ( llamale Dias al rango k9:k39, quedaría Formulas!Dias ).

      Saludos.

      • Hola Mario,

        Tengo el mismo caso, pero los datos los tengo en otra pestaña del mismo libro, cómo debería escribir el código?

        • Hola Rubén

          Debes activar la hoja donde tienes los datos, previo al código que carga los combobox, el código seria el siguiente.

          Private Sub Userform_Initialize()
          Dim i As Integer
          Sheets(2).Activate
          For i = 1 To 6
          Me.Controls("ComboBox" & i).List = Range(Cells(2, i), Cells(2, i).End(xlDown)).Value
          Next i
          End Sub

    • Para todas las personas a las que les molesta usar la propiedad Rowsource y que prefieren utilizar las estructuras de control de VBA,les dejo dos excelentes opciones para llenar varios ComboBox (seis en este caso...ok).

      'Opción #1 : Utilizando Bucles For Each...Next, reasignando los rangos fijos a una variable (Rango) y recorriendo su contenido con otra variable (celda), para cargar finalmente uno a uno cada ComboBox....ok

      Private Sub UserForm_Activate()
      Dim rango, celda As Range
      Set rango = Worksheets("Formulas").Range("A2:A32")
      For Each celda In rango
      ComboBox1.AddItem celda.Value
      Next celda

      Set rango = Worksheets("Formulas").Range("B2:B32")
      For Each celda In rango
      ComboBox2.AddItem celda.Value
      Next celda

      Set rango = Worksheets("Formulas").Range("C2:C32")
      For Each celda In rango
      ComboBox3.AddItem celda.Value
      Next celda

      Set rango = Worksheets("Formulas").Range("D2:D32")
      For Each celda In rango
      ComboBox4.AddItem celda.Value
      Next celda

      Set rango = Worksheets("Formulas").Range("E2:E32")
      For Each celda In rango
      ComboBox5.AddItem celda.Value
      Next celda

      Set rango = Worksheets("Formulas").Range("F2:F32")
      For Each celda In rango
      ComboBox6.AddItem celda.Value
      Next celda
      End Sub

      'Opción #2 : Utilizando un Bucle anidado For...Next, para recorrer todos los ComboBox y cargar los datos....ok

      Private Sub UserForm_Activate()
      Dim r, i, k
      Worksheets("Formulas").Select
      r = Cells(Rows.Count, 1).End(xlUp).Row
      For i = 1 To 6
      For k = 2 To r
      Me.Controls("ComboBox" & i).AddItem Cells(k, i).Value
      Next k
      Next i
      ComboBox1.SetFocus
      End Sub

  13. Hola, cómo saco el cursor del combobox después de seleccionar en una lista previamente definida

    Gracias

  14. Gente, tengo un formulario de ejemplo, puse un combobox con las opciones 10,11, y 12, y quiero que al seleccionar 10 por ejemplo se cambie el tamaño de la fuente al 10pts. Pensé que era sencillo, y no he podido. Alguien podría ayudarme?

  15. hola tengo un problema tengo un combobox el cual ase la función de Indirecto en un formulario el problema es que en el combobox donde cae el contenido no aparece todo el texto necesito que sea multilinea para leer toda la descripción como lo arreglo
    ej
    (esta parte elije la linea principal) por ejemplo el país

    Private Sub UserForm_Initialize()

    ComboBox2.Clear
    Sheets("Hoja3").Select
    Range("B1").Select
    Do While ActiveCell.Value ""
    ComboBox2.AddItem ActiveCell
    ActiveCell.Offset(0, 1).Select
    Loop

    la segunda parte trae a la vista el indirecto
    ej. Región

    Private Sub ComboBox2_Change()
    ComboBox5.Clear
    indice = ComboBox2.ListIndex + 2
    Cells(2, indice).Select
    Do While ActiveCell.Value ""
    ComboBox5.AddItem ActiveCell
    ActiveCell.Offset(1, 0).Select
    Loop

    End Sub

    pero como el texto indirecto es muy largo necesito que cea multilinea para que se lea todo el texto no solo la primera linea
    no se si me explico bien
    de ante mano gracias

  16. Ayuda!!!!

    Qué tengo que hacer para que un Combobox, dentro de un formulario, muestre el último dato seleccionado, cada vez que se abra el formulario.

    Saludos.

  17. Hola buena tarde, estoy realizando un formato donde coloque una lista de seleccion por medio de la opcion de Validacion de Datos y quiero que al seleccionar un registro me arroje en celdas diferentes el puesto y el numero de empleado del registro seleccionado, lo puedo hacer mediante alguna instrucción alli mismo en Excel
    Gracias

  18. he creado un formulario con imágenes de graficos de movimientos mensuales que se generan y cambian a través de tablas dinámicas, quiero utilizar un combo box enlazado con tabla dinámica que permita seleccionar el mes y se cambie las imágenes refrescando desde el userform

  19. buenas tardes alguien sabe cual es el código de esto
    programar un algoritmo en VBA que al presionar un botón, abra un inputbox, en donde el usuario pueda ingresar un numero de cédula, al presionar aceptar, el algoritmo busca el numero de cédula en una base de datos, si el registro existe muestra la información completa de usuario registrado en un formulario, sino, muestra un mensaje a través de un msgbox que indica que el usuario buscado no existe. La base de datos debe tener los siguientes campos en una hoja:
    - Código
    - Nombre 1
    - Nombre 2
    - Apellido 1
    - Apellido 2
    - Dirección
    - Telefono

  20. Muchas gracias por la info. Tengo una consulta... Como mi tabla es dinámica, hay celdas que segun el resultado de la formula esta en blanco. Cuando utilizo el combobox me aparecen los casilleros en blanco. Hay alguna manera de que no aparezcan estos? es decir.. si value "" que aparezcan, o algo asi?
    Desde ya muchas gracias!

Página de comentarios 1 de 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.