Estoy trabajando con un formulario con textbox y combobox, el combobox lo cargo con el código
Private Sub UserForm_Activate()
ComboBox1.RowSource = "FP"
ComboBox4.RowSource = "LA"
ComboBox5.RowSource = "EP"
End Sub
El textbox2 quisiera que se cargue según el valor del combobox4 o se tengo el siguiente cuadro en la hoja6
SIGLA CÓDIGO
AA 001
OB 930
5L 275
Y asi sucesivamtente, la sigla lo definí el rango con el nombre de "LA" el cual carga el combobox4, y quisiera que al elegir del combobox4 la sigla AA en el textbox cargue su código o sea 001 y asi sucesivamente, algo como si el textbox2 fueradependientedel combobox4, espero que mi pregunta haya sido clara.
Gracias
Jesús
Adjunto | Tamaño |
---|---|
formulario.jpg | 256.25 KB |
datos.jpg | 364.16 KB |
Si fuese en una hoja de cálculo esto lo harías con un BUSCARV ¿no?
Bueno, pues en tu código puedes utilizar las funciones de la hoja de cálculo, por ejemplo la función BuscarV, aunque hay que utilizar la denominación en inglés de estas funciones., en este caso VLOOKUP. Las funciones de excel están disponibles en VBA a través de Application.Worksheetfunction
Application.WorksheetFunction.VLookup( y aquí los argumentos de la función )
------
Ya sé Excel, pero necesito más.
Estimado Pacomegia: un poco mas de detalle por favor.
Gracias
Jesús
Jesus Martinez Plantarosa
me refiero a que puedes utilizar la función VLOOKUP para buscar el valor en la lista y ponerlo en tu textbox.
podría ser algo así:
Me.TextBox2.Value = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, Range("Extras!H2:I40"), 2, False)
Buscas lo que hay en el combobox1 en el rango de la hoja Extras donde tienes definidas tus equivalencias
------
Ya sé Excel, pero necesito más.
Excelente gracias mil, eres un capo
Saludos
Jesús
Jesus Martinez Plantarosa
Muy lógica tu respuesta, sin embargo, utilizo el código y me sale error 438, el objeto no admite esta propiedad o metodo :/
Hola María Camila, asegurate que la instrucción la estés dando en el evento _Click()
Private Sub -nombredelcombobox-_Click()
Me.-nombredeltextbox.Value = Application.WorksheetFunction.VLookup(Me.-nombredelcombobox-.Value, Range("LIST1!O2:P2"), 2, False)
End Sub
En el caso de que sea al revés? Colocar un dato en el textbox y llenar el combobox?
Para eso tienes la función
.Additem
del combobox.
Un saludo
Buenas tardes,
Espero que me puedan echar una mano, ya que estoy bastante perdida con lo que quiero hacer. Creo que es muy parecido a lo que le estaban explicando en el foro pero no consigo hacerlo.
Les explico, lo que quiero hacer es coger la informacion de una tabla de la Hoja1 y que desde un combobox vea los datos de Proyecto, por ejemplo, que me salga la lista de Bilbao, Madrid..... y que cuando le de al boton de buscar en los textbox de D1.1, D2.1 y D2.3 me salgan las correspondientes fechas de esos proyectos.
Me podrian echar una mano por favor?
Muchos agradecimientos por adelantado!!!
Ya he solucionado el problema,despues de tanto "estudiarlo" ya lo he sacado.
Ahora tengo otra duda, me gustaria crear un boton en una hoja de excel del libro y que me aparezca el UserForm1 que he creado, como tendria que hacerlo?
Un saludo
Utiliza form.show en la macro asociada al botón.
Un saludo
Perfecto, sale todo perfecto, pero tengo un problema ahora. Cuando intento añadir una 10 columna (seria la columna K del excel) al combobox me da un error:
"Se ha producido el error 380 en tiempo de ejecucion"
No se puede configurar la propiedad List.Valor de propiedad no valido
Os pongo el codigo por si me podeis echar una mano:
Private Sub cbProyecto_Change()
txtExp.Text = cbProyecto.List(cbProyecto.ListIndex, 1)
txtGes.Text = cbProyecto.List(cbProyecto.ListIndex, 2)
txtGestOb.Text = cbProyecto.List(cbProyecto.ListIndex, 3)
txtDr11.Text = cbProyecto.List(cbProyecto.ListIndex, 4)
txtDr12.Text = cbProyecto.List(cbProyecto.ListIndex, 5)
txtDr13.Text = cbProyecto.List(cbProyecto.ListIndex, 6)
txtDr14.Text = cbProyecto.List(cbProyecto.ListIndex, 7)
txtDr15.Text = cbProyecto.List(cbProyecto.ListIndex, 8)
txtDr21.Text = cbProyecto.List(cbProyecto.ListIndex, 9)
txtDr22.Text = cbProyecto.List(cbProyecto.ListIndex, 10) Cuando introduzco esta linea de codigo me salta el error
End Sub
Sub CargarCombobox()
Dim lin As Integer
lin = 2
Do Until Hoja1.Range("A" & lin).Value = ""
cbProyecto.AddItem Hoja1.Range("A" & lin).Value
cbProyecto.List(lin - 2, 1) = Hoja1.Range("B" & lin).Value
cbProyecto.List(lin - 2, 2) = Hoja1.Range("C" & lin).Value
cbProyecto.List(lin - 2, 3) = Hoja1.Range("D" & lin).Value
cbProyecto.List(lin - 2, 4) = Hoja1.Range("E" & lin).Value
cbProyecto.List(lin - 2, 5) = Hoja1.Range("F" & lin).Value
cbProyecto.List(lin - 2, 6) = Hoja1.Range("G" & lin).Value
cbProyecto.List(lin - 2, 7) = Hoja1.Range("H" & lin).Value
cbProyecto.List(lin - 2, 8) = Hoja1.Range("I" & lin).Value
cbProyecto.List(lin - 2, 9) = Hoja1.Range("J" & lin).Value
cbProyecto.List(lin - 2, 10) = Hoja1.Range("K" & lin).Value Cuando introduzco esta linea de codigo me salta el error
lin = lin + 1
Loop
End Sub
Private Sub UserForm_Initialize()
Call CargarCombobox
End Sub
¿Como puedo resolver el problema?
Un saludo
Los combobox y los listbox solo pueden tener 10 columnas si las añades una a una, pero hay una manera de hacer que tengan más, y es añadiendo un rango o una matriz en vez de los valores uno a uno.
Prueba a componer primero la matriz y luego añadirla, algo así como:
Private Sub UserForm_Initialize()
Dim matriz(9, 11) As Variant
For a = 1 To 9
For b = 1 To 11
matriz(a - 1, b - 1) = Cells(a, b).Value
Next
Next
With ComboBox1
.ColumnCount = b
.List = matriz
End With
End Sub
Perdonad mi ignorancia, pero no entiendo mucho de programacion. Lo que me quieres decir es que haga esto?
Private Sub cbProyecto_Change()
txtExp.Text = cbProyecto.List(cbProyecto.ListIndex, 1)
txtGes.Text = cbProyecto.List(cbProyecto.ListIndex, 2)
txtGestOb.Text = cbProyecto.List(cbProyecto.ListIndex, 3)
txtDr11.Text = cbProyecto.List(cbProyecto.ListIndex, 4)
txtDr12.Text = cbProyecto.List(cbProyecto.ListIndex, 5)
txtDr13.Text = cbProyecto.List(cbProyecto.ListIndex, 6)
txtDr14.Text = cbProyecto.List(cbProyecto.ListIndex, 7)
txtDr15.Text = cbProyecto.List(cbProyecto.ListIndex, 8)
txtDr21.Text = cbProyecto.List(cbProyecto.ListIndex, 9)
txtDr22.Text = cbProyecto.List(cbProyecto.ListIndex, 10)
End Sub
Sub CargarCombobox()
Dim lin As Integer
lin = 2
Do Until Hoja1.Range("A" & lin).Value = ""
cbProyecto.AddItem Hoja1.Range("A" & lin).Value
cbProyecto.List(lin - 2, 1) = Hoja1.Range("B" & lin).Value
cbProyecto.List(lin - 2, 2) = Hoja1.Range("C" & lin).Value
cbProyecto.List(lin - 2, 3) = Hoja1.Range("D" & lin).Value
cbProyecto.List(lin - 2, 4) = Hoja1.Range("E" & lin).Value
cbProyecto.List(lin - 2, 5) = Hoja1.Range("F" & lin).Value
cbProyecto.List(lin - 2, 6) = Hoja1.Range("G" & lin).Value
cbProyecto.List(lin - 2, 7) = Hoja1.Range("H" & lin).Value
cbProyecto.List(lin - 2, 8) = Hoja1.Range("I" & lin).Value
cbProyecto.List(lin - 2, 9) = Hoja1.Range("J" & lin).Value
cbProyecto.List(lin - 2, 10) = Hoja1.Range("K" & lin).Value
lin = lin + 1
Loop
End Sub
Private Sub UserForm_Initialize()
Dim matriz(9, 11) As Variant
For a = 1 To 9
For b = 1 To 11
matriz(a - 1, b - 1) = Cells(a, b).Value
Next
Next
With ComboBox1
.ColumnCount = b
.List = matriz
End With
End Sub
No exactamente. La idea es sustituir tu código por el mío, con los cambios que consideres oportunos (nombres de los objetos, etc.) Mi código solo te llena la lista del desplegable, de manera que cuando lo abras tengas la lista entera. Para cambiar el texto de los textbox puedes hacer lo de tu macro cbProyecto_change.
Pero tu macro cargarComboBox dará error si la cargas así. Si la cargas toda de una vez como en el código que te he puesto sí que lo admite. ¿Por qué? Ni idea, pero el caso es que funciona.
Un saludo
Como lo solucionaste?
Amigo ese codigo lo utilice para efectivamente poder llenar un textbobx segun lo que haya seleccionado en un combobox. Pero esto da error si no tengo la hoja activa donde se almacena los datos del combobox como hago para que sin necesidad de tener la hoja activa el textbox se llene con la informacion sin dar error : No se puede obtener la propiedad VlookUp de la clase worksheetfunction
como puedo hacer para que una vez seleccionado una opcion del combobox en hoja2 y en el textbox apareca información pero de la hoja1
En ambos casos, donde dice:
For a = 1 To 9
For b = 1 To 11
matriz(a - 1, b - 1) = Cells(a, b).Value
Next
Next
Poned:
For a = 1 To 9
For b = 1 To 11
matriz(a - 1, b - 1) = worksheets("nombredelahoja").Cells(a, b).Value
Next
Next
Un saludo
Buenos dias, mi pregunta es sencilla, he estado trabajando en un formulario de ventas en excel vba, en ese mismo formulario inserté el correspondiente ComboBox para que hiciera la busqueda autocompletando mientras se va escribiendo cada letra inicial del producto buscado, pero veo que los combobox no tienen la propiedad de autocompletar, quiero saber si mediante código vba puedo implementar esa propiedad de buscar autocompletando texto desde el rango donde se encuentra la lista de productos en la hoja correspondiente de excel, me puedes escribir a maneguerra43@mail.com gracias. Te envio el archivo.
Mañe Guerra