Elegir datos en hojas diferentes segun cuadro combinado

10/10/2006 - 21:03 por bobafett | Informe spam
Muy buenas grupo, os quiero consultar sobre un problema que tengo para
selecionar datos en diferentes hojas segun lo que hay en dos cuadros
combinados.

-Explico: Tengo 3 hojas (para simplificar) Hoja1, Hoja2 donde estan los
datos y Hoja3 donde estan una lista de validación y un cuadro
combinado (el de Barra de VBA).

-El origen de datos de la lista es un rango llamado "Nombre" (que se
refiere a 2 celdas donde estan los datos Tabla1 y Tabla2, igual que los
rangos siguientes).

-Tengo dos rangos llamados Tabla1 y Tabla2 que corresponden a la
primera columna de cada hoja de datos (Hoja1 y Hoja2).

-En la propiedad ListFillRange del cuadro combinado, tengo el nombre
definido "Cuadro2" que se refiere a: =INDIRECTO(Hoja3!$A$5) donde A5 es
donde esta la lista de validación.

Esto en principio me funciona bien, pero quisiera que los rangos fueran
dinamicos, pero cuando los defino dinamicos al intentar poner el nombre
de "Cuadro2" en ListFillRange del cuadro combinado no me lo acepta.
Lo de los rangos dinamicos con DESREF (aprendido en el foro) en otras
situaciones funcionan perfectamente, pero con esto parece haber algun
problema.

Gracias de antemano y esperando ideas.
Alfredo
Saludos

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
11/10/2006 - 05:36 | Informe spam
hola, Alfredo !

... problema... para selecionar datos en diferentes hojas segun lo que hay en dos cuadros combinados.
... Hoja1, Hoja2 donde estan los datos y Hoja3 donde estan una lista de validacion y un cuadro combinado (el de Barra de VBA).
... origen... de la lista es un rango llamado "Nombre" (... 2 celdas donde estan... Tabla1 y Tabla2, igual que los rangos siguientes).
... dos rangos llamados Tabla1 y Tabla2 que corresponden a la primera columna de cada hoja de datos (Hoja1 y Hoja2).
... ListFillRange del cuadro combinado... el nombre... "Cuadro2" que se refiere a: =INDIRECTO(Hoja3!$A$5) ... la... validacion.
... quisiera que los rangos fueran dinamicos, pero cuando los defino dinamicos
... el nombre de "Cuadro2" en ListFillRange del cuadro combinado no me lo acepta...



1) [hasta donde se]... cuando 'combinas' una funcion =indirecto(...) para 'tomar' un rango 'dinamico' [desref(...) o similares]...
el 'resultado' DEJA de ser un dato 'valido' [como rango/referencia] para otras validaciones o la propiedad '.ListFillRange' :-(

2) si no te incomoda/importa/... la 'necesidad' de apoyarte con codigo en el evento '_change' de la hoja con la validacion.. -?-
[ya que es necesario 're/definir' el origen 'dinamico' para el combo]...
prueba con las siguientes lineas [en el modulo de codigo de 'esa' hjoa]...

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address <> "$A$5" Then Exit Sub
ComboBox1.ListFillRange = Target
ComboBox1.ListIndex = -1
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 bobafett
11/10/2006 - 19:29 | Informe spam
Hola Hector, funciona perfectamente, probado y de momento comprendido.
muchas gracias y hasta la proxima.

Saludos
Alfredo
Respuesta Responder a este mensaje
#3 bobafett
12/10/2006 - 13:41 | Informe spam
Hola Hector
Vuelvo a consultar sobre lo del cuadro combinado y rango dinamico, por
que tengo un pequeño problema.
El problema es por el poco conocimiento de VB, pero te explico:
En el codigo que me pasaste anteriormente esta claro y funciona bien
para el ejemplo propuesto, pero la situación real no es esa (Perdon,
fallo mio por no plantearlo mas real)

En la situación real en la lista de validacion salen valores tipo
20x20, 20x30, etc... y en Insertar à Nombres, no me acepta esos
nombres, por tanto tengo que recurrir a llamarlo de otra manera, por
ejemplo List20x20, etc...

Lo que he pensado es en otra celda al lado del cuadro de validación
colocar = "List" & numero celda. Pero lo que no se es como meter en
el codigo que me dijiste para que coja de esa celda el nombre del rango
dinamico.

Si mas de momento y dandote las gracias por adelantado
Saludos cordiales,
Alfredo.
Respuesta Responder a este mensaje
#4 Héctor Miguel
12/10/2006 - 19:40 | Informe spam
hola, Alfredo !

En la situacion real en la lista de validacion salen valores tipo 20x20, 20x30, etc...
y en Insertar / Nombres, no me acepta esos nombres, por tanto tengo que recurrir a llamarlo de otra manera, por ejemplo List20x20, etc.
Lo que he pensado es en otra celda al lado del cuadro de validacion colocar = "List" & numero celda.
Pero lo que no se es como meter en el codigo que me dijiste para que coja de esa celda el nombre del rango dinamico.



existen algunas 'reglas' para insertar/asignar/usar/... nombres en excel [puedes consultar al respecto en la ayuda en linea]
p.e. no pueden iniciar con numero, punto [y algunos otros caracteres] :-(

-> prueba a definir los nombres iniciandolos con un guion-bajo, p.e.: -> _20x20, _20x30, etc.

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 bobafett
12/10/2006 - 22:49 | Informe spam
Hola Hector
He mirado lo que me comentas, pero poniendo caracteres de subrayado o
puntos no me parece muy estetico, por que es para generar una
impresión de ficha, de todas formas he trasteado un poco por la red y
he podido averiguar como hacerlo de una manera un poco mas elegante.
He añadido :
"ListMod" & Range("$C$5").Value
al codigo que me pasaste y asi me dara los rangos dinamicos
ListMod20x20, ListMod20x30, etc...

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$5" Then Exit Sub
ComboBox1.ListFillRange = "ListMod" & Range("$C$5").Value
ComboBox1.ListIndex = -1
End Sub

De momento funciona, pero seguire complicandolo algo mas y asi nos
distraemos y aprendemos ;)))
Muchas gracias de nuevo y hasta la proxima.
Saludos cordiales
Alfredo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida