Cargar varios Textbox con un combobox

11/10/2008 - 14:23 por GRIEGO59 | Informe spam
Hola!
Tengo un formulario con un combobox Productos y siete Textbox:TextBox1,
TextBox2 ... TextBox7, con el siguiente código:

Private Sub UserForm_Initialize()
Productos.ColumnCount = 4
Productos.ColumnWidths = "45;180;100,25"
With Worksheets("FichaTécnica")
Productos.List = .Range(.Range("a2"), .Range("e2").End(xlDown)).Value
End With
End Sub

Private Sub Productos_Change()
TextBox1 = Productos.Value

End With
End Sub

Por los momentos, al seleccionar un producto en combobox Productos, el
código aparece en TextBox1. Yo quisiera que si selecciono otros productos
más, sus códigos se muestren en TextBox2, TextBox3, … TextBox7.

La cantidad de productos a seleccionar, depende del estado de ánimo del
cliente.
El Código de producto puede repetirse en TextBox1, TextBox2 … TextBox7.

Sería fenomenal si al tener varios productos seleccionados y borro un código
de producto de un TextBox intermedio, y luego selecciono un nuevo producto,
el nuevo producto aparece en el TextBox intermedio que he borrado.

Alguien podría ayudarme?

La hoja FichaTécnica tiene las siguientes columnas:
Código, Descripción del producto, Color, Ubicación física.

Gracias por la ayuda,

Darío.

Preguntas similare

Leer las respuestas

#6 Ivan
12/10/2008 - 22:03 | Informe spam
hola Dario,

Me gusta más tu primera opción, por ahora, espero no tener que cambiar de
opinión.



como se suele decir, para gustos, colores.

bromas aparte, lo cierto es que el ejemplo era un poco enrevesado,
pero, :-)

por aquello de los gustos, si quieres prueba esta otra posibilidad con
los mismos elementos (ComboBox1, ListBox1 y CommandButton1). [y
adaptando/cambiando los nombres necesarios]

Const nombreHj As String = "Listado"

Private Sub ComboBox1_Change()
With ComboBox1
If .ListCount = 0 Or .ListIndex = -1 Or _
.Text = "" Then Exit Sub
ListBox1.AddItem (.List(.ListIndex, 0))
Dim n As Integer
For n = 1 To .ColumnCount - 1
ListBox1.List(ListBox1.ListCount - 1, n) = _
.List(.ListIndex, n)
Next
End With
End Sub

Private Sub CommandButton1_Click()
With ListBox1
If .ListCount > 0 And .ListIndex > -1 Then _
.RemoveItem (.ListIndex)
End With
End Sub

Private Sub UserForm_Initialize()
Dim rng As Range, anchos As String, _
n As Integer, ancho As Single
Set rng = Worksheets(nombreHj).[a1].CurrentRegion
rng.Columns.AutoFit
With ComboBox1
.ColumnCount = rng.Columns.Count
.ColumnHeads = True
ancho = 0
For n = 1 To .ColumnCount
anchos = rng.Cells(1, n).Width & ";"
ancho = ancho + rng.Cells(1, n).Width
Next
.ListWidth = ancho
.ColumnWidths = Left(anchos, Len(anchos) - 1)
.RowSource = rng.Offset(1).Resize( _
rng.Rows.Count - 1, _
rng.Columns.Count).Address(0, 0)
ListBox1.ColumnCount = .ColumnCount
ListBox1.ColumnWidths = .ColumnWidths
End With
Set rng = Nothing
CommandButton1.Caption = "Quitar"
CommandButton1.Accelerator = "Q"
End Sub


A mi particularmente me parece mas practico para lo que creo que
buscas, aparte de permitirte meter el nº de productos que fuesen en
una misma factura (aunque quizas el limite de 7 tenga su razon
especifica de ser)

bueno, lo dicho, solo como otra posibilidad

un saludo
Ivan
Respuesta Responder a este mensaje
#7 GRIEGO59
13/10/2008 - 03:05 | Informe spam
Hola, Ivan!
Gracias por tu ayuda.
Viendo tu respuesta recordé que es importante el orden de los códigos.
Al cambiar de lugar un código UserForm Query_Close se solucionó el problema.
La verdad no sé si esa era la razón pero ya el código funciona.

Saludos,
Darío
Respuesta Responder a este mensaje
#8 Ivan
13/10/2008 - 03:11 | Informe spam
hola de nuevo Dario


Pero me da
"Error de compilación:
El procedimiento externo no es válido"
y me lleva a la línea de código:

 for n= 1 to 7
queda remarcada en azul.



creo que ya se a que se debe el error =>

¿no habras pegado el codigo que te puse directamente en/sobre el
modulo del formulario? Me da la impresion de que si.

en realidad daba por hecho que sabias que dicho FRAGMENTO de codigo
era para sustituir el que tenias en el evento Change del combo, es
decir que debia ir entre =>

Private Sub Productos_Change()

y =>

End Sub

quedando mas o menos asi =>

Private Sub Productos_Change()
dim n as integer
for n = 1 to 7
if me.controls("TextBox" & n).Text = "" then _
me.controls("TextBox" & n).Text = Productos.Value: Exit for
next
End Sub

normalmente [y que yo sepa} no se pueden poner 'instrucciones'
directamente sobre un modulo [ ya sea normal, de clase, etc..]. Estos
deben ir dentro de procedimientos, ya sean de evento, function, sub,
property, ...

Nota: Lo que si puedes es declarar variables y/o constantes para que
sean 'visibles' y 'utilizables' por todos los procedimientos del
modulo [e incluso fuera en determinados casos]

bueno, si cambias el exit for por un exit sub, puedes usar este codigo
como en mi otro mensaje, es decir poniendo un msgbox tras el next del
bucle. Si ha llegado hasta ahí, es que los 7 textbox estan llenos

un saludo
IVan
Respuesta Responder a este mensaje
#9 Ivan
13/10/2008 - 03:32 | Informe spam
hola Dario

Viendo tu respuesta recordé que es importante el orden de los códigos.
Al cambiar de lugar un código UserForm Query_Close se solucionó el problema.
La verdad no sé si esa era la razón pero ya el código funciona.



me alegro que te funcione, pero sigo pensando que el error mas bien va
por donde te comento en mi ultimo mensaje

¿te ha ahora funcionado si haber modificado el codigo que te daba el
error? es decir, no el que mande despues, sino el original tal y como
lo pegaste la 1ª vez

en mi caso, desde luego la unica manera de reproducir/obtener dicho
error (exacto) ha sido pegar el 1er codigo tal cual sobre el modulo e
intentar ejecutar

bueno, en cualquier caso lo importante es que te haga el apaño

un saludo
Ivan

PD: y gracias por el feedback
Respuesta Responder a este mensaje
#10 GRIEGO59
14/10/2008 - 00:51 | Informe spam
Hola, Ivan!

Finalmente usé este código:

Private Sub Productos_Change()
dim n as integer
for n = 1 to 7
if me.controls("TextBox" & n).Text = "" then _
me.controls("TextBox" & n).Text = Productos.Value: Exit for
next
End Sub

Por los momentos me olvidé del mensaje de advertencia al intentar escoger
más de siete productos.

Me gustó tu código porque, en apariencia, es muy sencillo.

Voy a plantear una pregunta como un tema aparte sobre tu código.

Saludos,

Darío.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida