Ayuda en visual
estoy dándole seguimiento a un pequeño programa en vb y soy principiente quisiera saber para que me sirve este unidad = Application.WorksheetFunction.VLookup(combo_descripcion.Value, INVENTARIO.Range("B2:R10000"), 3, False)
1 Respuesta
Es para hacer una búsqueda en una columna de un rango de celdas.
El primer parámetro (combo_descripcion.Value) es el valor a buscar
El segundo parámetro (INVENTARIO. Range("B2:R10000")) es el rango de celdas que va a utilizar la función pero solo busca en la primera columna, en este caso el valor se buscara en la columna B2:B10000
El tercer argumento (3) es el numero de columna que se va a mostrar como resultado de la búsqueda, por ejemplo si se encuentra en la valor en la celda B5, la celda que se va a mostrar como resultado es la D5 porque B=1, C=2, D=3, etc.
El cuarto parámetro (False) es para indicar si se va a hacer una búsqueda exacta (False) o aproximada (True).
muchas gracias haber si puedes ayudarme con esto tengo un formulario necesito que al momento de elegir un nombre en mi combobox en el otro combobox que pregunta que es lo que debe el solicitante seleccionado en el anterior combo me ponga solo las cosas que ese solicitante me ha pedido.
mi pregunta es como realizar la búsqueda conforme al nombre que elija.
¿Cómo llenas los combobox, con un rango de celdas, con una consulta a una base de datos (Recordset), con un arreglo (array) de datos?
¿La búsqueda la haces en una hoja de Excel, en una base de datos?
RowSource mira t dejo el ejemplo de como se rellena uno a través de un radio
Private Sub radiobtn_herramientas_Click()
If radiobtn_herramientas.Value = True Then
'combo_descripcion.Clear
'Sheets("INVENTARIO").Select
'Range("b2").Select
'Do While ActiveCell.Value <> ""
'combo_descripcion.AddItem ActiveCell
'ActiveCell.Offset(1, 0).Select
'Loop
combo_descripcion.RowSource = "=INVENTARIO!DESCRIPCIÓN"
txt_cantidad.Locked = True
txt_cantidad.Text = "1"
End If
End Sub
la búsqueda se hace a una hoja de excel
Primero debes inicializar los valores de los combobox
Private Sub UserForm_Initialize() Dim datos As Variant datos = Range("B1:B4") 'nombres de los silicitantes Me.ComboBox1.List = datos Me.ComboBox2.List = Array() 'el combobox de lo que debe el solicitante debe estar vacio End Sub
Después dependiendo del valor del combobox1 se llena el combobox2
Private Sub ComboBox1_Change() Dim inicioDatosMostrar As Excel.Range 'Valores que se agregan al segundo combobox Dim inicioDatosFiltro As Excel.Range 'Valores que se comparan con el valor del primer combobox Dim datos As Variant Dim i As Long Dim j As Long Set inicioDatosMostrar = Range("C1") Set inicioDatosFiltro = Range("B1") Me.ComboBox2.Clear datos = Array() Do While inicioDatosMostrar.Offset(i, 0) <> Empty If inicioDatosFiltro.Offset(i, 0) = Me.ComboBox1.Value Then ReDim Preserve datos(j) datos(j) = inicioDatosMostrar.Offset(i, 0) j = j + 1 End If i = i + 1 Loop Me.ComboBox2.List = datos End Sub
el código para los combox vacios
Private Sub UserForm_Initialize()
Dim datos As Variant
datos = Range("B1:B4") 'nombres de los silicitantes
Me.ComboBox1.List = datos
Me.ComboBox2.List = Array() 'el combobox de lo que debe el solicitante debe estar vacío
End Sub
lo coloco en el formulario pero me sigue apareciendo todos los registros y después me lo deja bacio.
Debes quitar la propiedad RowSource del combobox2, el RowSource se usa cuando la lista es fija, pero como en este caso la lista es variable se debe quitar.
ok lo chequearé podrías decirme la función de este condigo que realiza?
Do While ActiveCell.Value <> ""
combo_descripcion_entr.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loo
Es un ciclo, en lenguaje humano seria algo como
Mientras la celda activa sea no vacía(linea 1) agregar su valor al combobox(linea 2) y después seleccionar(para convertir en celda activa) la siguiente celda (linea 3) y repetir el ciclo (linea 4).
- Compartir respuesta