Saltar al contenido

Vba. problemas con lista validación dependiente


Recommended Posts

publicado

Buenos días foreros:

Estoy teniendo problemas con una lista de validación dependiente.

Como sabeis las listas de validación tienen un problema, si pegamos encima de las celdas con validación, esta desaparece.

Como solución he utilizado VBA, al evento worksheet_change le he pedido que cree de nuevo la validación y funciona rodeando con un circulo rojo los datos pegados que no cumplen la validación.

Hasta aquí todo funciona correctamente.

El problema lo tengo cuando la lista de validación es dependiente y la aplico a un rango , por ejemplo b2:b100

Si creas la lista de validación dependiente en Excel ,no hay problemas; pero si la creo en VBA me da error 1004.

upload_2014-5-29_20-38-52-png.3911

EN VBA:

With r_car.Validation

.Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:="=indirecto($a2)" 'da problemas error 1004

...

Espero haberme explicado.

Alguna idea?

Gracias por adelantado.

Un saludo a todos

Adjunto archivo.

Ejemplo problemas validación.rar

publicado

Hola @[uSER=162094]jmgcc[/uSER].

Hay algunas cosas qué comentar:

1. El error se produce porque en VBA, las fórmulas deben introducirse en Inglés, así tengas el Excel en español. En el ejemplo, la fórmula que debes introducir es

"=indirect($A2)"[/CODE]

2. Cuando declaras una variable, debes tener cuidado con ésto:

[CODE]Dim r_veh, r_car As Range[/CODE]

Puesto que [b][i]r_car[/i][/b] lo defines como un Objeto Rango, mientras que [b][i]r_veh[/i][/b] no lo estás definiendo como rango, sino como tipo Variant. La manera correcta de definirlo sería:

[CODE]Dim r_veh as Range, r_car As Range[/CODE]

ó

[CODE]Dim r_veh as Range
Dim r_car As Range[/CODE]

Esto en sí no genera error, pero lo que haces es ocupar más memoria de la que necesitas para una variable. La Variable Variant puede ser cualquier cosa, por ende, es la que más memoria ocupa.

Lo mismo para:

[CODE]Dim tabla, datos As Worksheet[/CODE]

Debería ser:

[CODE]Dim tabla as Worksheet, datos As Worksheet[/CODE]

Comentas!

Espero haberte ayudado, Dios te bendiga!

publicado

Hola johnmpl,

Gracias por tu respuesta.

Conozco como funcionan las variables y la memoria que reservan, pero desconocía lo que me comentas sobre la declaración.

No sé de donde había sacado que con comas funcionaba como si fuera un "array". GRACIAS POR LA ACLARACIÓN.

Cosas de aprender solo, a veces se tienen fallos de base.

Respecto a

Formula1:="=indirecto($a2)"[/CODE]

En las 200 versiones que había hecho

Ya había probado

[CODE]"= indirect($a2)"[/CODE]

incluso había probado con un bucle del tipo for each que recorra el rango con

[CODE]"= indirect($a" & variablefila &")"[/CODE]

Algo estaba haciendo mal porque ahora funciona perfectamente.

Gracias de nuevo johnmpl, un placer seguir aprendiendo.

Saludos a todos

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.