Como puedo enlazar un comcobox con un Textbox y guardar los valores de ambos en hoja y columnas especificas

¿Cómo están? Disculpa, espero que puedan ayudarme en lo siguiente; tengo este código en el cual presenta error en lo que está en negrita. En este quisiera que se pueda seleccionar el lote del producto en el combobox llamado "LOTE2" y se refleje el nombre del producto en el TextBox1 basado en el lote seleccionado en el combobox llamado "LOTE2".

Private Sub GUARDAR2_Click()
    Dim ContFila As Long
    Dim hoja As Worksheet
    Set hoja = Worksheets(4)
        ContFila = hoja.Cells(Rows.Count, 7).End(xlUp).Offset(1, 0).Row
        hoja.Cells(ContFila, 2).Value = FECHA2.Value
        hoja.Cells(ContFila, 3).Value = Me.ComboBox1.Value
        hoja.Cells(ContFila, 4).Value = Me.TextBox1.Value
        hoja.Cells(ContFila, 5).Value = Me.AREA2.Value
        hoja.Cells(ContFila, 6).Value = Me.CANTIDAD2.Value
        hoja.Cells(ContFila, 7).Value = Me.UNIDAD2.Value
        hoja.Cells(ContFila, 8).Value = Me.RECIBE.Value
        hoja.Cells(ContFila, 13).Value = Me.OBSERVA2.Value
Rem baciar formulario
Me.ComboBox1.Value = ""
Me.AREA2.Value = ""
Me.TextBox1.Value = ""
Me.CANTIDAD2.Value = ""
Me.UNIDAD2.Value = ""
Me.RECIBE.Value = ""
Me.OBSERVA2.Value = ""
FECHA2.SetFocus
End Sub

Private Sub GUARDAR1_Click()
    Dim ContFila As Long
    Dim hoja As Worksheet
    Set hoja = Worksheets(3)
        ContFila = hoja.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        hoja.Cells(ContFila, 1).Value = FECHA1.Value
        hoja.Cells(ContFila, 2).Value = Me.PROVEDOR1.Value
        hoja.Cells(ContFila, 3).Value = Me.FACTURA1.Value
        hoja.Cells(ContFila, 4).Value = Me.CONTROL1.Value
        hoja.Cells(ContFila, 5).Value = Me.PRODUCTO1.Value
        hoja.Cells(ContFila, 7).Value = Me.CANTIDAD1.Value
        hoja.Cells(ContFila, 8).Value = Me.UNIDAD1.Value
        hoja.Cells(ContFila, 9).Value = Me.PRECIO1.Value
        hoja.Cells(ContFila, 13).Value = Me.OBSERV1.Value
Rem baciar formulario
Me.PROVEDOR1.Value = ""
Me.FACTURA1.Value = ""
Me.CONTROL1.Value = ""
Me.PRODUCTO1.Value = ""
Me.CANTIDAD1.Value = ""
Me.UNIDAD1.Value = ""
Me.PRECIO1.Value = ""
Me.OBSERV1.Value = ""
FECHA1.SetFocus
End Sub
Private Sub SALIR1_Click()
Unload Me
End Sub
Private Sub SALIR2_Click()
Unload Me
End Sub
Private Sub TextBox1_change()
On Error Resume Next
LOTE2.Value = WorksheetFunction.VLookup(Val(TextBox1.Text), Range("B:C"), 2, 0)
If Err.Number > 0 Then LOTE2.Value = Empty
On Error GoTo 0
End Sub

Anexo el formulario en ejecución:

1 respuesta

Respuesta
1

¿Cómo cargas el combobox? Si usas la propiedad RowSource, puedes usar la propiedad BoundColumn y asignar una columna como el valor y otra como el texto.

Por ejemplo, el Valor podría ser el Lote, y el Texto el nombre del producto.

Pero veo que el error lo tienes en el evento Change del textbox, lo que me confunde. ¿Qué es lo que intentas hacer? Tu pregunta solo dice que quieres que se muestre el nombre del producto en el textbox según el lote que selecciones en el ComboBox, si ese es tu único problema, lo puedes solucionar como te dije con el BoundColumn.

Pero viendo el código del error, interpreto que también quieres lograr lo opuesto, osea poner el Lote en el combobox según lo que escribes en el textbox, ¿es así?

Gracias por tu pronta respuesta pero lo que me recomiendas ¿cómo lo haría? "propiedad RowSource, puedes usar la propiedad BoundColumn y asignar una columna como el valor y otra como el texto", es que no soy muy bueno en esto de las macros, lo que he hecho fue basado en varios videos tutoriales que vi para aprender.

Si, eso es lo que quiero que me muestre el nombre del producto en el textbox es lo único que me falta para que luego se guarde todos los items del formulario donde corresponde según el código que esta. Por que como esta ahora guarda todo bien pero menos el nombre del producto por que no lo extrae del lote seleccionado en el combobox.

Vale, solo necesito que me digas como se cargan los datos en el ComboBox. Si quieres puedes compartir el libro.

Veras, los datos tienen que llegar al combobox de alguna manera, y solo hay dos formas.

1- RowSource

2- AddItem

Si lo estas cargando con el RowSource, sera muy fácil. Pero necesito saber eso para darte la mejor solución posible y no mandarte un código a lo loco, que esto probablemente se pueda resolver sin ninguna macro usando solo el BoundColumn. Luego te explico que es eso.

Acá te comparto el link

https://drive.google.com/open?id=1Fh-kT8HNfKRAuExssoneVjjs-lRMZWXE 

Vale, di esto es lo que quieres hacer: video demo

Entonces aquí tienes el libro arreglado: descargar el libro

Ahora te explico:

El ComboBox lo estabas cargando con el RowSource (muy bien) si te fijas en las propiedades del ComboBox, hay una que se llama BoundColumn.

Esta propiedad BoundColumn lo que hace es asignar una columna como el valor del ComboBox independientemente de lo que diga el ComboBox.

En tu casi tienes 5 columnas. En la columna 1 esta el Lote, en la columna 2 esta el nombre del producto. Lo unico que tuve que hacer fue por un 2 en la propiedad BoundColumn, con eso le digo al ComboBox, oye el valor que tienes que usar es lo que hay en la columna 2.

Asi que en el evento change del ComboBox solo tuve que poner:

Me.TextBox1.Value = Me.ComboBox1.Value

Ahora bien, cada vez que tu quieras acceder al numero del Lote, debes usar ComboBox1.Text

Y si quieres acceder al nombre del producto, debes usar ComboBox1.Value

Mil Millones de gracias.! Pero hay un detalle al momento de guardar no guarda el lote seleccionado sino guarda el nombre producto, revisa porfa. Has una prueba y guarda y ve la hoja de despacho para que me entiendas lo que te digo.

Mil Millones de gracias.! Pero hay un detalle al momento de guardar no guarda el lote seleccionado sino guarda el nombre producto, revisa porfa. Has una prueba y guarda y ve la hoja de despacho para que me entiendas lo que te digo.

Sí, me lo imaginé. Como te dije, ahora debes usar la propiedad .Text

Todo lo que tenias antes como Me. ComoBox1. Value, debes cambiarlo a Me. ComboBox1.Text

Con .Text obtendrás el Lote y con .Value obtendrás el nombre del producto. Ya usted sabrá en su programa cuando desea usar uno y cuando desea usar el otro.

Ahora si, quedo buenísimo. Te reintegro millón de gracias.! Ya iba para un mes tratando de corregir eso, buscando y preguntando. Estaba que me explotaba la cabeza jajaja.

Gracias.! Dios te bendiga.!

Me alegra que le haya funcionado. A la orden :)

La pregunta no admite más respuestas

Más respuestas relacionadas