Nombre y Rangos en VBA

20/09/2006 - 23:39 por manuel | Informe spam
Buenas noches al grupo. Quizás lo que quiero exponer sea un poco enrevesado.
Iba buscando la posibilidad de que al entrar el dato del nombre y del
CIF/NIF del cliente, en determinadas celdas, se conviertan a mayúsculas
automáticamente mediante VBA.
Así que si sabeis de alguna solución, por favor pasadmela.

Pero creo que lo he liado mucho.
En una Hoja, que llamo TCLIENTES defino una base de datos de clientes. Cada
fila será un registro y cada columna un campo de la tabla.
Tendremos la columna NOMBRE, la columna DIRECCIÓN, la columna CIFNIF, ...

También definí, entre otros, los nombres en el libro:
TCLIENTES como el rango dinámico:
ÞSREF(TCLIENTES!$A$2;0;0;CONTARA(TCLIENTES!$A:$A);14)

TCLIENTES_NOMBRECLIENTE como el rango dinámico:
ÞSREF(TCLIENTES!$A$2;0;0;FILAS(TCLIENTES);1)

TCLIENTES_CIFNIF como el rango dinámico:
ÞSREF(TCLIENTES!$E$2;0;0;FILAS(TCLIENTES);1)

Ahora, en el evento ____ Worksheet_Change(ByVal Target As Range) ____ de la
hoja, he de ver primero cuando el Target está dentro de los rangos
TCLIENTES_NOMBRECLIENTE o TCLIENTES_CIFNIF (mediante intersección) y si
procede después, con la función UCASE() poner en mayúsculas la celda. Hasta
aquí todo bien.

Seguimos:
Defino una variable cadena como:
=Application.Names("TCLIENTES_NOMBRECLIENTE ").RefersTo
con lo que la variable guarda el valor:
"ÞSREF(TCLIENTES!$A$2;0;0;FILAS(TCLIENTES);1)"

Y lo mismo para TCLIENTES_CIFNIF. Bien.
El problema es:
¿Cómo defino en VBA los rangos que se representan a partir de estas cadenas
de fórmulas, (no sólo cadenas de referencias al estilo, p.e. "$A$1:$A$7") ?
He probado con .RefersToRange pero me da error. Dice la ayuda que funciona
solo si son referencias explícitas, como la señalada"$A$1:$A$7".

Saludos.
 

Leer las respuestas

#1 Héctor Miguel
21/09/2006 - 02:17 | Informe spam
hola, manuel !

asumiendo que YA has definido nombres que hacen referencia a rangos dinamicos...
y que solo necesitas el como hacer referencia a ellos para la interseccion en el evento '_change' de su hoja...
puedes referirte a ellos de manera 'directa' a traves del nombre asignado [p.e.] -ojo: codigo no probado-

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Celda As Range
On Error Resume Next
For Each Celda In Intersect(Target, Range("tclientes_nombrecliente"))
Celda = Ucase(Celda)
Next
For Each Celda In Intersect(Target, Range("tclientes_cifnif"))
Celda = Ucase(Celda)
Next
End Sub

saludos,
hector.

__ la consulta original __
... que al entrar el dato del nombre y del CIF/NIF... se conviertan a mayusculas automaticamente mediante VBA.
... una Hoja, que llamo TCLIENTES... defini, entre otros, los nombres en el libro:
TCLIENTES como el rango dinamico: ÞSREF(TCLIENTES!$A$2;0;0;CONTARA(TCLIENTES!$A:$A);14)
TCLIENTES_NOMBRECLIENTE como el rango dinamico:ÞSREF(TCLIENTES!$A$2;0;0;FILAS(TCLIENTES);1)
TCLIENTES_CIFNIF como el rango dinamico: ÞSREF(TCLIENTES!$E$2;0;0;FILAS(TCLIENTES);1)
Ahora, en el evento ____ Worksheet_Change(ByVal Target As Range) ____ de la hoja
he de ver primero cuando el Target está dentro de los rangos TCLIENTES_NOMBRECLIENTE o TCLIENTES_CIFNIF
(mediante interseccion) y si procede despues, con la funcion UCASE() poner en mayusculas la celda. Hasta aqui todo bien.
Defino una variable cadena como: =Application.Names("TCLIENTES_NOMBRECLIENTE ").RefersTo
con lo que la variable guarda el valor: "ÞSREF(TCLIENTES!$A$2;0;0;FILAS(TCLIENTES);1)"
Y lo mismo para TCLIENTES_CIFNIF. Bien.
El problema es:
Como defino en VBA los rangos que se representan a partir de estas cadenas de formulas
(no solo cadenas de referencias al estilo, p.e. "$A$1:$A$7") ?
... con .RefersToRange... me da error. Dice la ayuda que funciona solo si son referencias explicitas, como la se#alada"$A$1:$A$7".

Preguntas similares