¿Se puede -una vez elegido un elemento ....

01/07/2009 - 18:24 por José-Luis | Informe spam
Hola a todos
¿Se puede -una vez elegido un elemento de y en un combobox- y una vez
"aceptado" por el usuario a través de un si/no dejar visible la elección pero
sin posiblidad de modificación posterior? +/- Como si dijéramos "desactivado".
Lógicamente si la elección es no debe poder volver a elegir.
Gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/07/2009 - 22:42 | Informe spam
hola, José Luis !

Se puede -una vez elegido un elemento de y en un combobox-
y una vez "aceptado" por el usuario a traves de un si/no
dejar visible la eleccion pero sin posiblidad de modificacion posterior?
+/- Como si dijeramos "desactivado".
Logicamente si la eleccion es no debe poder volver a elegir.



es probable que si se pueda hacer lo que pides, pero... es necesario conocer:
- el tipo de combobox, como se llama y donde se encuentra (?)
- como, cuando y por que "mecanismos" se va a considerar "aceptado" (o no) por el usuario
- si la seleccion se queda solo en el combo y/o se deposita/traslada/.. en algun otro lado (?)
- (y probablemente uno o dos detalles mas que se estan quedando en el tintero ?)

saludos,
hector.
Respuesta Responder a este mensaje
#2 José-Luis
01/07/2009 - 23:38 | Informe spam
Hola Héctor Miguel
Se trata de rellenar una plantilla o informe (por filas) con la información
que se le va solicitando al usuario. En una de las instancias debe elegir
unas actividades a través de 4 combobox enlazados (Esto ya lo consulté hace
unos días y te mandé a tu e-mail el fichero excel completo...hasta entonces).
Recuerda: del primer combobox (1) elegimos naturaleza, del siguiente (2)
elegimos grupo, del (3) familia y finalmente del (4) la actividad.
Cuando se ha producido la selección, le muestro el resultado de su elección
al usuario en un label y le pregunto si es correcto y le doy la opción si/no.
(Commandbutton1_si y Commandbutton2_no). Todo dentro de un userform(4).
Aquí encaja la pregunta: si la opción es "si" (está de acuerdo con la
elección)quiero "quitarle" la posibilidad de elegir otra cosa mientras no
termine el proceso, a parte de que mi código (modesto y primitivo) no tiene
control de errores que prevengan que el usuario haga "cosas"
imprevistas.(P.e. cambiar un combobox a posteriori).
La elección correcta finalmente irá a "parar" a una celda de la plantilla,
en este caso la E10 de la hoja Seg.Mensual. La siguiente elección irá a la
E11 y así sucesivamente.
Muchas gracias por tu atención
Saludos
José-Luis


"Héctor Miguel" wrote:

hola, José Luis !

> Se puede -una vez elegido un elemento de y en un combobox-
> y una vez "aceptado" por el usuario a traves de un si/no
> dejar visible la eleccion pero sin posiblidad de modificacion posterior?
> +/- Como si dijeramos "desactivado".
> Logicamente si la eleccion es no debe poder volver a elegir.

es probable que si se pueda hacer lo que pides, pero... es necesario conocer:
- el tipo de combobox, como se llama y donde se encuentra (?)
- como, cuando y por que "mecanismos" se va a considerar "aceptado" (o no) por el usuario
- si la seleccion se queda solo en el combo y/o se deposita/traslada/.. en algun otro lado (?)
- (y probablemente uno o dos detalles mas que se estan quedando en el tintero ?)

saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
02/07/2009 - 00:09 | Informe spam
hola, José Luis !

(generalmente) no conservo los archivos recibidos para consultas relacionadas con los temas del foro :-((
pero puedes usar el evento '_click' de cada boton para (des/re)deshabilitar la disponibilidad de los combos
lo que no mencionas es "el nombre" de los combos, asi que si podemos asumir que se llaman ComboBox1...ComboBox4
para el '_click' del boton si, podrias usar un bucle +/- como el siguiente:

Dim n As Byte
For n = 1 To 4
Controls("combobox" & n).Enabled = False
Next

para el '_click' del "no" simplemente reviertes el False a True

OJO: si los combos tienen "nombres propios", debes hacer referencia a cada uno para establecer su propiedad "Enabled"
tambien sera conveniente que al termino del proceso vuelvas a habilitar los combos y ponerlos con su .ListIndex = -1

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
Se trata de rellenar una plantilla o informe (por filas) con la informacion que se le va solicitando al usuario.
En una de las instancias debe elegir unas actividades a traves de 4 combobox enlazados
(Esto ya lo consulte hace unos dias y te mande a tu e-mail el fichero excel completo...hasta entonces).
Recuerda: del primer combobox (1) elegimos naturaleza, del siguiente (2) elegimos grupo, del (3) familia y finalmente del (4) la actividad.
Cuando se ha producido la seleccion, le muestro el resultado de su eleccion al usuario en un label y le pregunto si es correcto
y le doy la opcion si/no. (Commandbutton1_si y Commandbutton2_no). Todo dentro de un userform(4).
Aqui encaja la pregunta: si la opcion es "si" (esta de acuerdo con la eleccion) quiero "quitarle" la posibilidad de elegir otra cosa
mientras no termine el proceso, a parte de que mi codigo (modesto y primitivo) no tiene control de errores
que prevengan que el usuario haga "cosas" imprevistas.(P.e. cambiar un combobox a posteriori).
La eleccion correcta finalmente ira a "parar" a una celda de la plantilla, en este caso la E10 de la hoja Seg.Mensual.
La siguiente eleccion ira a la E11 y asi sucesivamente...
Respuesta Responder a este mensaje
#4 José-Luis
02/07/2009 - 20:56 | Informe spam
Hola Héctor Miguel.
Gracias. Funciona como esperaba. No te indiqué los nombres de los combos
porque te ponia los números de los mismos al no cambiarles el nombre. Sólo
unas preguntas:
1.-¿Conviene cambiarles el nombre a los combos?
2.-¿Qué efecto tiene el listindex? Yo he utilizado ejemplos de los foros
para rellenar los combos basados en columnas (naturalezas) combo1 empezando
desde la A, en filas (grupos) dependiendo del anterior "cuelgan" de cada
columna (combo2), familias en filas (porque tengo más de 256 en algún caso y
el excel no me "da" tantas columnas) agrupadas, además, en hojas distintas
(combo3) y finalmente las actividades dependientes de las anteriores
ordenadas en columnas dependientes de las filas anteriores (combo4). Para la
primera pareja de combos se que utilizo el listindex pero a partir de ahí ya
no.

'Rellena el combo 2

Private Sub ComboBox1_Change()
'Llenamos el combobox2 al recibir el foco,
'pero antes lo limpiamos
ComboBox2.Clear
'seleccionamos la hoja1
Worksheets("Hoja1").Select
'miramos lo que hay seleccionado en el combobox1
'Listindex + 1 nos devuelve la columna de las naturalezas,
'porque el listindex empieza siempre por cero
columna = ComboBox1.ListIndex + 1
'seleccionamos la celda que proceda,
'a partir de la segunda fila
Cells(2, columna).Select
'vamos a llenar dinámicamente el combobox
'dependiendo de la naturaleza elegida
Do While Not IsEmpty(ActiveCell)
'Añadimos los nombres de las familias al combobox
ComboBox2.AddItem ActiveCell.Value
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Si me puedes aclara esta duda
Ya te comento que esto lo vi en unos ejemplos, lo adapté y funciona como se
pretende, lo que no se es si habrá una mejor opción.
Saludos y muchas gracias.
José-Luis
P.D.: Es lógico que no guardes la información con la que te (os)
bombardeamos a preguntas pero... no me llegaste a contestar (supongo que por
exceso de carga de preguntas y -además- me advertistes). De todas formas
reitero mi agradecimiento por vuestra eficaz ayuda.


"Héctor Miguel" wrote:

hola, José Luis !

(generalmente) no conservo los archivos recibidos para consultas relacionadas con los temas del foro :-((
pero puedes usar el evento '_click' de cada boton para (des/re)deshabilitar la disponibilidad de los combos
lo que no mencionas es "el nombre" de los combos, asi que si podemos asumir que se llaman ComboBox1...ComboBox4
para el '_click' del boton si, podrias usar un bucle +/- como el siguiente:

Dim n As Byte
For n = 1 To 4
Controls("combobox" & n).Enabled = False
Next

para el '_click' del "no" simplemente reviertes el False a True

OJO: si los combos tienen "nombres propios", debes hacer referencia a cada uno para establecer su propiedad "Enabled"
tambien sera conveniente que al termino del proceso vuelvas a habilitar los combos y ponerlos con su .ListIndex = -1

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
> Se trata de rellenar una plantilla o informe (por filas) con la informacion que se le va solicitando al usuario.
> En una de las instancias debe elegir unas actividades a traves de 4 combobox enlazados
> (Esto ya lo consulte hace unos dias y te mande a tu e-mail el fichero excel completo...hasta entonces).
> Recuerda: del primer combobox (1) elegimos naturaleza, del siguiente (2) elegimos grupo, del (3) familia y finalmente del (4) la actividad.
> Cuando se ha producido la seleccion, le muestro el resultado de su eleccion al usuario en un label y le pregunto si es correcto
> y le doy la opcion si/no. (Commandbutton1_si y Commandbutton2_no). Todo dentro de un userform(4).
> Aqui encaja la pregunta: si la opcion es "si" (esta de acuerdo con la eleccion) quiero "quitarle" la posibilidad de elegir otra cosa
> mientras no termine el proceso, a parte de que mi codigo (modesto y primitivo) no tiene control de errores
> que prevengan que el usuario haga "cosas" imprevistas.(P.e. cambiar un combobox a posteriori).
> La eleccion correcta finalmente ira a "parar" a una celda de la plantilla, en este caso la E10 de la hoja Seg.Mensual.
> La siguiente eleccion ira a la E11 y asi sucesivamente...



Respuesta Responder a este mensaje
#5 Héctor Miguel
03/07/2009 - 00:11 | Informe spam
hola, José Luis !

1.-¿Conviene cambiarles el nombre a los combos?



=> la respuesta es subjetiva, depende de la necesidad (usos y costumbres) de interactuar con los controles (p.e.)
- mantener los nombres "naturales" facilita usar bucles con solo (in/de)crementar la parte del numero
- definir nombres "propios" a cada control facilita la "memoria" para recordar a cual control queremos hacer referencia
- los bucles con nombres propios se pueden sustitur por variables de matriz (no tan sencillo como con numeros pero funciona)

2.-¿Que efecto tiene el listindex?



=> establecer la propiedad .ListIndex en -1 (menos uno) equivale a que no haya elemento "seleccionado" en el control

con respecto de "la otra pregunta"... tambien depende de los "usos y costumbres" de programacion (p.e.)
resulta mas rapido cargar elementos en un control de lista/combo por su propiedad .List = <matriz> (es decir)
en lugar de "ir bucleando" celda-por-celda, sembrar la matriz de valores del mismo rango pero en un solo paso
incluso, pocas veces en realmente necesario ".Select"(ionar) los objetos para trabajar con sus propiedades (p.e.)

ComboBox2.Clear
Worksheets("Hoja1")
ComboBox2.List = .Range(.Range("a2"), .Range("a2").End(xlDown)).Value
End With

saludos,
hector.

__ la otra pregunta __
Yo he utilizado ejemplos de los foros para rellenar los combos basados en columnas (naturalezas)
combo1 empezando desde la A, en filas (grupos) dependiendo del anterior "cuelgan" de cada columna
(combo2), familias en filas (porque tengo mas de 256 en algun caso y el excel no me "da" tantas columnas) agrupadas ademas
en hojas distintas (combo3) y finalmente las actividades dependientes de las anteriores
ordenadas en columnas dependientes de las filas anteriores (combo4).
Para la primera pareja de combos se que utilizo el listindex pero a partir de ahi ya no.

'Rellena el combo 2
Private Sub ComboBox1_Change()
'Llenamos el combobox2 al recibir el foco,
'pero antes lo limpiamos
ComboBox2.Clear
'seleccionamos la hoja1
Worksheets("Hoja1").Select
'miramos lo que hay seleccionado en el combobox1
'Listindex + 1 nos devuelve la columna de las naturalezas,
'porque el listindex empieza siempre por cero
columna = ComboBox1.ListIndex + 1
'seleccionamos la celda que proceda,
'a partir de la segunda fila
Cells(2, columna).Select
'vamos a llenar dinamicamente el combobox
'dependiendo de la naturaleza elegida
Do While Not IsEmpty(ActiveCell)
'Anadimos los nombres de las familias al combobox
ComboBox2.AddItem ActiveCell.Value
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Si me puedes aclara esta duda
Ya te comento que esto lo vi en unos ejemplos, lo adapte y funciona como se pretende
lo que no se es si habra una mejor opcion.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida