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.

Preguntas similare

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".
Respuesta Responder a este mensaje
#2 manuel
23/09/2006 - 01:12 | Informe spam
GGRRRRAAAACIAS!!!!!. Funciona muy bien.!!!
Pues juraría que la primera intentona fue esa de Range("nombre") y no sé por
qué no me funcionó. Después ya me metí con lo ".names"

Gracias.


"Héctor Miguel" escribió en el mensaje
news:
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".




Respuesta Responder a este mensaje
#3 Gabriel Raigosa
30/09/2006 - 18:54 | Informe spam
Carpeta
Descripción
Dirección

1
** Microsoft Excel *
http://esnips.com/web/GabrielRaigosa

2
Archivos para usar en clase
http://esnips.com/web/RaigosaClase

3
Fechas y Horas
http://esnips.com/web/RaigosaFechasHoras

4
Formato y Formato Condicional
http://esnips.com/web/RaigosaFormatos

5
Foro Excel
http://esnips.com/web/ForoExcel

6
Funciones de Busqueda
http://esnips.com/web/RaigosaBusqueda

7
Funciones de Texto
http://esnips.com/web/RaigosaTexto

8
Funciones Financieras
http://esnips.com/web/RaigosaFinancieras

9
Funciones Logicas
http://esnips.com/web/RaigosaLogicas

10
Graficos con Excel
http://esnips.com/web/RaigosaGraficos

11
Grupo (Sabados)
Privado

12
Grupo (Viernes)
Privado

13
Grupo Excel Septiembre
Privado

14
Juegos con Excel
http://esnips.com/web/RaigosaJuegosExcel

15
Macros con Excel
http://esnips.com/web/Macros-con-Excel

16
Manuales Excel
http://esnips.com/web/RaigosaManuales

17
Paginas WEB
http://esnips.com/web/RaigosaPaginasExcel

18
Practicas - XLS
http://esnips.com/web/RaigosaPracticasXLS

19
Tablas Dinámicas
http://esnips.com/web/RaigosaTablasDinamicas

20
TEST
http://esnips.com/web/GabrielRaigosa-test

21
Validación
http://esnips.com/web/RaigosaValidacion

22
Varios
http://esnips.com/web/RaigosaVarios

23
VBA - Visual Basic para Aplicaciones
http://esnips.com/web/RaigosaVBA



Gabriel Raigosa
http://esnips.com/web/Raigosa
http://esnips.com/web/ForoExcel
"manuel" escribió en el mensaje
news:
| 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.
|
|
|
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida