El COMBOBOX es una herramienta que se presenta al crear un UserForm dentro VisualBasic.
ESTE 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:
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.
Se despliega la información .
SEGUNDA FORMA:
Esta segunda forma consiste en insertar los elementos en el COMBOBOX desde el código.
Por ejemplo:
Los elementos son insertados al COMBOBOX desde el código del programa
Se despliegan los elementos en el COMBOBOX
PROPIEDADES DEL COMBOBOX:
El COMBOBOX presenta muchas propiedades dentro de las cuales están:
Apariencia
Comportamiento
Dato
Fuente
Posición
Otros
Elaborado por: Susana Malca
04/12/2012 a las 10:03 pm
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...
16/01/2020 a las 6:05 pm
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
05/12/2012 a las 8:28 am
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…
27/10/2014 a las 9:24 pm
necesito saber como programar u combobox en excel vb que me despliege dos coluna de datos, gracias
31/10/2014 a las 3:52 pm
Podrías concatenarlo antes de mostrarl en el combobox
22/09/2015 a las 2:41 pm
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
07/06/2016 a las 11:31 pm
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
21/06/2016 a las 10:14 am
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
01/03/2019 a las 11:12 am
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
09/04/2016 a las 4:01 pm
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
09/04/2016 a las 4:13 pm
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
09/04/2016 a las 4:21 pm
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
16/06/2016 a las 3:48 pm
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...
25/07/2016 a las 2:19 pm
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
21/12/2016 a las 12:29 am
Excel MENÚ DATOS
validación de datos
Permitir → escoge "lista"
Pestaña "Mensaje de error" → detener
15/11/2022 a las 12:09 pm
Usa la propiedad enableb en false asi solo pueden llenarlo con las opciones de tu desplegable
04/11/2016 a las 10:08 am
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.
14/11/2016 a las 7:04 pm
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
20/01/2017 a las 6:46 pm
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
12/04/2017 a las 4:47 am
¡ 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.
08/10/2019 a las 5:40 am
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?
26/10/2019 a las 10:56 am
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
02/10/2018 a las 12:19 am
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
25/01/2017 a las 6:04 pm
Hola, cómo saco el cursor del combobox después de seleccionar en una lista previamente definida
Gracias
26/04/2017 a las 4:02 pm
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?
25/05/2017 a las 11:56 pm
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
24/08/2017 a las 10:55 am
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.
11/10/2017 a las 1:48 pm
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
05/04/2018 a las 9:34 pm
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
16/04/2018 a las 4:02 pm
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
15/06/2018 a las 8:06 am
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!