Incorporar items que cumplan con determinada condicióna un ComboBox de varias columnas

21/04/2007 - 01:23 por Insumos | Informe spam
Gente del Foro:

Tengo un Combobox de dos columnas que debe incorporar items desde una base
de datos (en una hoja llamada "Talon"), siempre y cuando dicho item cumpla
con un determinado requisito (que es que uno de los campos del registro, el
que esta en la columna D de la hoja, este vacio). Lo que yo quiero es que el
codigo vaya a la base de datos, se fije que registros cumplen con la
condición especificada e incorporar al listado del ComboBox esos registros
de la siguiente manera: en la columna 1 del CB los campos que se encuentra
en las columnas A y B de la hoja, y en la columna 2 del CB el campo que se
encuentra en la columna C.
Hize este código:

Dim celdoN As Range

With Worksheets("Talon")
If .[A2] <> "" Then
For Each celdoN In .Range("C2:C" & .[C65536].End(xlUp).Row)
If celdoN.Offset(0, 1) = Empty Then
UserForm2.ComboBox3.AddItem celdoN.Offset(0, -2) & Chr(32) &
celdoN.Offset(0, -1)
UserForm2.ComboBox3.AddItem celdoN
End If
Next
End If
End With

Mediante este código logro casi todos los objetivos, excepto que, como era
de esperarse, agrega lo que esta en la columnas A y B como un item separado
de lo que esta en la columna C, ya que no se como decirle al código que
celdoN.Offset(0, -2) & Chr(32) & celdoN.Offset(0, -1) lo tiene que poner en
la columna 1 del CB y celdoN lo tiene que poner en la columna 2 del CB,
siendo todo un mismo item del CB.
Espero que haya explicado bien mi dilema!
Desde ya muchas gracias!!

Mariano


CONTADURIA

Preguntas similare

Leer las respuestas

#1 Ivan
21/04/2007 - 03:56 | Informe spam
hola Mariano, echale un vistazo a el codigo que te pongo al final, a
ver si te ayuda.

de todas formas te hago un par de comentarios (aunque no me hagas
demasiado caso) sobre el codigo que expones por si te sirven:

1ª respecto a esta parte-> If celdoN.Offset(0, 1) = Empty Then

no estoy seguro de hasta que punto es valido 'Empty' en este caso,
supongo que si, pero en cualquier caso, y aunque no se si es mejor,
creo que te valdria con esto:

If celdoN.Offset(0, 1) = "" Then

es decir, dos comillas dobles seguidas que indican espacio vacio (o
sea 'nada', que no es lo mismo que un espacio " ", las mismas comillas
pero con un espacio dentro)

2º en el uso del metodo Additem (creo que) debes incluir
'explicitamente' la propiedad Value del rango a cargar en el combo,
pues sino te da error ( con additem no estoy del todo seguro, pero con
List si es seguro). Quedaria en tu caso asi:->

UserForm2.ComboBox3.AddItem celdoN.Value

bueno, espero no liarte mas y y te ayude en algo

un saludo y hasta pronto
Ivan

aqui va el codigo para que lo adapte (ojo he cambiado algunos nombres,
revisalo y adaptalo)

Sub ComboInsumnos()
Dim Celda As Range, i As Long
With Worksheets("Talon")
If .[A2] = "" Then Exit Sub
i = 0
For Each Celda In .Range("d2:d" & .[a65536].End(xlUp).Row)
If Celda = "" Then
With UserForm2.ComboBox1
.AddItem Celda.Offset(0, -3).Value _
& Chr(32) & Celda.Offset(0, -2).Value
.List(i, 1) = Celda.Offset(0, -1).Value
End With
i = i + 1
End If
Next
End With
End Sub
Respuesta Responder a este mensaje
#2 Insumos
21/04/2007 - 18:17 | Informe spam
Ivan:

Tu código funciona a la perfección!! Es la solución exacta a mi dilema. Te
estoy enormemente agradecido!! También te agradezco tus consejos sobre los
códigos, los cuales tendré en cuenta para el futuro.
Otra vez muchas gracias!!
Saludos.

Mariano

"Ivan" escribió en el mensaje
news:
hola Mariano, echale un vistazo a el codigo que te pongo al final, a
ver si te ayuda.

de todas formas te hago un par de comentarios (aunque no me hagas
demasiado caso) sobre el codigo que expones por si te sirven:

1ª respecto a esta parte-> If celdoN.Offset(0, 1) = Empty Then

no estoy seguro de hasta que punto es valido 'Empty' en este caso,
supongo que si, pero en cualquier caso, y aunque no se si es mejor,
creo que te valdria con esto:

If celdoN.Offset(0, 1) = "" Then

es decir, dos comillas dobles seguidas que indican espacio vacio (o
sea 'nada', que no es lo mismo que un espacio " ", las mismas comillas
pero con un espacio dentro)

2º en el uso del metodo Additem (creo que) debes incluir
'explicitamente' la propiedad Value del rango a cargar en el combo,
pues sino te da error ( con additem no estoy del todo seguro, pero con
List si es seguro). Quedaria en tu caso asi:->

UserForm2.ComboBox3.AddItem celdoN.Value

bueno, espero no liarte mas y y te ayude en algo

un saludo y hasta pronto
Ivan

aqui va el codigo para que lo adapte (ojo he cambiado algunos nombres,
revisalo y adaptalo)

Sub ComboInsumnos()
Dim Celda As Range, i As Long
With Worksheets("Talon")
If .[A2] = "" Then Exit Sub
i = 0
For Each Celda In .Range("d2:d" & .[a65536].End(xlUp).Row)
If Celda = "" Then
With UserForm2.ComboBox1
.AddItem Celda.Offset(0, -3).Value _
& Chr(32) & Celda.Offset(0, -2).Value
.List(i, 1) = Celda.Offset(0, -1).Value
End With
i = i + 1
End If
Next
End With
End Sub
Respuesta Responder a este mensaje
#3 Ivan
21/04/2007 - 19:05 | Informe spam
hola Mariano, me alegro que te sirva

de todas formas no estaria de mas (se me ha pasado) que 'limpiaras' el
combo antes de volver a cargarlo, sobre todo si lo llamas desde algun
boton o procedimiento que pueda volver a ejecutarse antes de cerrar el
formulario. Si no, te arriesgas a cargar varias veces los mismos datos
si vuelves a darle al boton (ademas el List se 'descuadraria', si es
que no te genera un error).
si quieres, tras esto ->

If .[A2] = "" Then Exit Sub

añade esto ->

Userform2.ComboBox3.clear

o, si por lo que sea, lo que quieres es poder seguir añadiendo datos
al combo sin borrar los existentes, no añadas el Clear y cambia el '
i=0 ' por esto ->

i = Userform2.ComboBox3.ListCount

bueno, mas vale prevenir ...

un saludo
Ivan
Respuesta Responder a este mensaje
#4 Insumos
24/04/2007 - 00:03 | Informe spam
Ivan:

Efectivamente, sucedia lo que me dijiste (se agregaban a la lista los mismos
items una y otra vez) aunque no me tiraba ningún error. Lo solucioné con
Userform2.ComboBox3.Clear, tal como propusiste. Gracias por estar en todos
los detalles!!
Muchas gracias y hasta la próxima!!

Mariano



"Ivan" escribió en el mensaje
news:

hola Mariano, me alegro que te sirva

de todas formas no estaria de mas (se me ha pasado) que 'limpiaras' el
combo antes de volver a cargarlo, sobre todo si lo llamas desde algun
boton o procedimiento que pueda volver a ejecutarse antes de cerrar el
formulario. Si no, te arriesgas a cargar varias veces los mismos datos
si vuelves a darle al boton (ademas el List se 'descuadraria', si es
que no te genera un error).
si quieres, tras esto ->

If .[A2] = "" Then Exit Sub

añade esto ->

Userform2.ComboBox3.clear

o, si por lo que sea, lo que quieres es poder seguir añadiendo datos
al combo sin borrar los existentes, no añadas el Clear y cambia el '
i=0 ' por esto ->

i = Userform2.ComboBox3.ListCount

bueno, mas vale prevenir ...

un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida