combobox por codigo ?

03/08/2007 - 19:32 por José A. Castrejón | Informe spam
Hola Buenos dias

Teniendo 2 hojas ALUMNOS y CAPTURA, en la primera tengo una tabla con 5
columnas:
Clave,Nombre,Status,Matricula,Grupo

Tengo definido el rango ALU desde A14:E129

En la hoja CAPTURA tengo un combobox al que le puse las sigientes propiedades

Listfillrange=ALU
LINKEDCELLÕ
COLUMNCOUNT=2
COLUMNBOUND=1

Despues tengo en otra celda la formula
Buscarv(valor(d5),alu,2,0)) y Buscarv(valor(d5),alu,3,0))...


Esto funciona bien hasta ahora pero quisiera llenar el combo
solo con los alumnos con Status "A"

entonces en el evento Activate de la hoja puse :

Dim I
Dim Al as worksheet

Set Al=sheets("ALUMNOS")

COmboBox1.clear
ComboBox1.columncount=2


For I = 14 to 29

If Al.cells(I,3)="A" then
ComboBox1.additem Al.cells(I,1)
End If
Next

Pero como lleno la segunda columna ? para que se vea el codigo y el nombre,
tal y como lo hago con el metodo anterior
de hecho no encontre en codigo la propiedad columnbound


Alguien (no recuerdo quien) me dijo que no se poda hacer por codigo, y me
ofrecio la solución :

ComboBox1.additem Al.cells(I,1) & al.cells(I,2)

y esto funciona pero el valor de retorno es la cadena completa Codigo-alumno

entonces como recupero el valor solo de el codigo ? para seguir usando el
buscarv?
Se puede hacer esto sin que se tengan que "unir" los 2 datos ?




Saludos y gracias por su tiempo

Preguntas similare

Leer las respuestas

#1 David
04/08/2007 - 03:00 | Informe spam
Hola, José.

Claro que se puede hacer sin tener que unir los dos datos. Hay varias
formas, así que mientras alguien sugiere algo mejor, te propongo lo que yo he
hecho: que utilices la propiedad List. Esta propiedad requiere que primero
cargues los datos que integrarás al combobox en un arreglo. Esto lo podrías
hacer más o menos de la siguiente manera:

Suponiendo que los códigos se encuentran en A14:A29, y los nombres en B14:B29…

Dim Alumnos(15,1), J as Integer
J=0
For I to 29
If Al.cells(I,3)=”A” then
Alumnos(J,0)=Al.Cells(I,1)
Alumnos(J,1)=Al.Cells(I,2)
J=j+1
End If
Next I

Una vez cargados los valores al arreglo, deberías definir la cantidad de
columnas del ComboBox, el ancho de las mismas (si no estoy mal, 70 es más o
menos una pulgada) y asignar el arreglo al mismo:

ComboBox1.ColumnCount = 2
ComboBox1.ColumnWidths = “70;140”
ComboBox1.List() = Alumnos

Disculpa si hay algún error de sintaxis, pero escribo rápido y sin probar el
código. Pruébalo tú, y comentas. Si nadie más nos da una mano, te leo el
lunes, pues voy saliendo de la oficina, y el fin de semana ¡es sagrado!...
Si lo prefieres, escríbeme. Mi dirección está en mi perfil. Así podríamos
revisar el asunto con datos más reales… el lunes.

Saludos. Que tengas un buen fin de semana.




"José A. Castrejón" escribió:

Hola Buenos dias

Teniendo 2 hojas ALUMNOS y CAPTURA, en la primera tengo una tabla con 5
columnas:
Clave,Nombre,Status,Matricula,Grupo

Tengo definido el rango ALU desde A14:E129

En la hoja CAPTURA tengo un combobox al que le puse las sigientes propiedades

Listfillrange=ALU
LINKEDCELLÕ
COLUMNCOUNT=2
COLUMNBOUND=1

Despues tengo en otra celda la formula
Buscarv(valor(d5),alu,2,0)) y Buscarv(valor(d5),alu,3,0))...


Esto funciona bien hasta ahora pero quisiera llenar el combo
solo con los alumnos con Status "A"

entonces en el evento Activate de la hoja puse :

Dim I
Dim Al as worksheet

Set Al=sheets("ALUMNOS")

COmboBox1.clear
ComboBox1.columncount=2


For I = 14 to 29

If Al.cells(I,3)="A" then
ComboBox1.additem Al.cells(I,1)
End If
Next

Pero como lleno la segunda columna ? para que se vea el codigo y el nombre,
tal y como lo hago con el metodo anterior
de hecho no encontre en codigo la propiedad columnbound


Alguien (no recuerdo quien) me dijo que no se poda hacer por codigo, y me
ofrecio la solución :

ComboBox1.additem Al.cells(I,1) & al.cells(I,2)

y esto funciona pero el valor de retorno es la cadena completa Codigo-alumno

entonces como recupero el valor solo de el codigo ? para seguir usando el
buscarv?
Se puede hacer esto sin que se tengan que "unir" los 2 datos ?




Saludos y gracias por su tiempo

Respuesta Responder a este mensaje
#2 José A. Castrejón
04/08/2007 - 03:24 | Informe spam
Bueno pues mil gracias, lo probare el lunes y te digo

Saludos

"David" wrote:

Hola, José.

Claro que se puede hacer sin tener que unir los dos datos. Hay varias
formas, así que mientras alguien sugiere algo mejor, te propongo lo que yo he
hecho: que utilices la propiedad List. Esta propiedad requiere que primero
cargues los datos que integrarás al combobox en un arreglo. Esto lo podrías
hacer más o menos de la siguiente manera:

Suponiendo que los códigos se encuentran en A14:A29, y los nombres en B14:B29…

Dim Alumnos(15,1), J as Integer
J=0
For I to 29
If Al.cells(I,3)=”A” then
Alumnos(J,0)=Al.Cells(I,1)
Alumnos(J,1)=Al.Cells(I,2)
J=j+1
End If
Next I

Una vez cargados los valores al arreglo, deberías definir la cantidad de
columnas del ComboBox, el ancho de las mismas (si no estoy mal, 70 es más o
menos una pulgada) y asignar el arreglo al mismo:

ComboBox1.ColumnCount = 2
ComboBox1.ColumnWidths = “70;140”
ComboBox1.List() = Alumnos

Disculpa si hay algún error de sintaxis, pero escribo rápido y sin probar el
código. Pruébalo tú, y comentas. Si nadie más nos da una mano, te leo el
lunes, pues voy saliendo de la oficina, y el fin de semana ¡es sagrado!...
Si lo prefieres, escríbeme. Mi dirección está en mi perfil. Así podríamos
revisar el asunto con datos más reales… el lunes.

Saludos. Que tengas un buen fin de semana.




"José A. Castrejón" escribió:

> Hola Buenos dias
>
> Teniendo 2 hojas ALUMNOS y CAPTURA, en la primera tengo una tabla con 5
> columnas:
> Clave,Nombre,Status,Matricula,Grupo
>
> Tengo definido el rango ALU desde A14:E129
>
> En la hoja CAPTURA tengo un combobox al que le puse las sigientes propiedades
>
> Listfillrange=ALU
> LINKEDCELLÕ
> COLUMNCOUNT=2
> COLUMNBOUND=1
>
> Despues tengo en otra celda la formula
> Buscarv(valor(d5),alu,2,0)) y Buscarv(valor(d5),alu,3,0))...
>
>
> Esto funciona bien hasta ahora pero quisiera llenar el combo
> solo con los alumnos con Status "A"
>
> entonces en el evento Activate de la hoja puse :
>
> Dim I
> Dim Al as worksheet
>
> Set Al=sheets("ALUMNOS")
>
> COmboBox1.clear
> ComboBox1.columncount=2
>
>
> For I = 14 to 29
>
> If Al.cells(I,3)="A" then
> ComboBox1.additem Al.cells(I,1)
> End If
> Next
>
> Pero como lleno la segunda columna ? para que se vea el codigo y el nombre,
> tal y como lo hago con el metodo anterior
> de hecho no encontre en codigo la propiedad columnbound
>
>
> Alguien (no recuerdo quien) me dijo que no se poda hacer por codigo, y me
> ofrecio la solución :
>
> ComboBox1.additem Al.cells(I,1) & al.cells(I,2)
>
> y esto funciona pero el valor de retorno es la cadena completa Codigo-alumno
>
> entonces como recupero el valor solo de el codigo ? para seguir usando el
> buscarv?
> Se puede hacer esto sin que se tengan que "unir" los 2 datos ?
>
>
>
>
> Saludos y gracias por su tiempo
>
Respuesta Responder a este mensaje
#3 José A. Castrejón
06/08/2007 - 19:42 | Informe spam
Funciono muy bien gracias, modifique algunas cosas para que el tamaño del
array fuera variable, aqui expongo la solución que use :
Gracias por tu tiempo

Private Sub Worksheet_Activate()

Dim I, Hasta

Dim Al As Worksheet
Dim Rg As Range
Dim TotAl '**Total de Alumnos

Set Al = Sheets("ALUMNOS")
Set Rg = Sheets("ALUMNOS").Range("A14:A60000")

'**Cuento cuantos alumnos Hay

TotAl = Application.WorksheetFunction.CountIf(Rg, ">0")

Hasta = 14 + TotAl - 1 '**Defino el limite superior del ciclo

ComboBox2.Clear

ReDim Alumnos(TotAl, 1) '** dimensiono la matriz

Dim J As Integer

J = 0

For I = 14 To Hasta
If Al.Cells(I, 4) = "A" Then
Alumnos(J, 0) = Al.Cells(I, 1)
Alumnos(J, 1) = Al.Cells(I, 2)
J = J + 1
End If
Next I


ComboBox2.ColumnCount = 2
ComboBox2.ColumnWidths = "20;100"
ComboBox2.List() = Alumnos
ComboBox2.ListIndex = 0
ComboBox2.ListRows = 10


End Sub


"David" wrote:

Hola, José.

Claro que se puede hacer sin tener que unir los dos datos. Hay varias
formas, así que mientras alguien sugiere algo mejor, te propongo lo que yo he
hecho: que utilices la propiedad List. Esta propiedad requiere que primero
cargues los datos que integrarás al combobox en un arreglo. Esto lo podrías
hacer más o menos de la siguiente manera:

Suponiendo que los códigos se encuentran en A14:A29, y los nombres en B14:B29…

Dim Alumnos(15,1), J as Integer
J=0
For I to 29
If Al.cells(I,3)=”A” then
Alumnos(J,0)=Al.Cells(I,1)
Alumnos(J,1)=Al.Cells(I,2)
J=j+1
End If
Next I

Una vez cargados los valores al arreglo, deberías definir la cantidad de
columnas del ComboBox, el ancho de las mismas (si no estoy mal, 70 es más o
menos una pulgada) y asignar el arreglo al mismo:

ComboBox1.ColumnCount = 2
ComboBox1.ColumnWidths = “70;140”
ComboBox1.List() = Alumnos

Disculpa si hay algún error de sintaxis, pero escribo rápido y sin probar el
código. Pruébalo tú, y comentas. Si nadie más nos da una mano, te leo el
lunes, pues voy saliendo de la oficina, y el fin de semana ¡es sagrado!...
Si lo prefieres, escríbeme. Mi dirección está en mi perfil. Así podríamos
revisar el asunto con datos más reales… el lunes.

Saludos. Que tengas un buen fin de semana.




"José A. Castrejón" escribió:

> Hola Buenos dias
>
> Teniendo 2 hojas ALUMNOS y CAPTURA, en la primera tengo una tabla con 5
> columnas:
> Clave,Nombre,Status,Matricula,Grupo
>
> Tengo definido el rango ALU desde A14:E129
>
> En la hoja CAPTURA tengo un combobox al que le puse las sigientes propiedades
>
> Listfillrange=ALU
> LINKEDCELLÕ
> COLUMNCOUNT=2
> COLUMNBOUND=1
>
> Despues tengo en otra celda la formula
> Buscarv(valor(d5),alu,2,0)) y Buscarv(valor(d5),alu,3,0))...
>
>
> Esto funciona bien hasta ahora pero quisiera llenar el combo
> solo con los alumnos con Status "A"
>
> entonces en el evento Activate de la hoja puse :
>
> Dim I
> Dim Al as worksheet
>
> Set Al=sheets("ALUMNOS")
>
> COmboBox1.clear
> ComboBox1.columncount=2
>
>
> For I = 14 to 29
>
> If Al.cells(I,3)="A" then
> ComboBox1.additem Al.cells(I,1)
> End If
> Next
>
> Pero como lleno la segunda columna ? para que se vea el codigo y el nombre,
> tal y como lo hago con el metodo anterior
> de hecho no encontre en codigo la propiedad columnbound
>
>
> Alguien (no recuerdo quien) me dijo que no se poda hacer por codigo, y me
> ofrecio la solución :
>
> ComboBox1.additem Al.cells(I,1) & al.cells(I,2)
>
> y esto funciona pero el valor de retorno es la cadena completa Codigo-alumno
>
> entonces como recupero el valor solo de el codigo ? para seguir usando el
> buscarv?
> Se puede hacer esto sin que se tengan que "unir" los 2 datos ?
>
>
>
>
> Saludos y gracias por su tiempo
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida