Forums Últimos mensajes - Powered by IBM
 

Cómo crear una macro que asigne un nombre a un rango

24/11/2005 - 17:21 por Teletreks | Informe spam
A los efectos de crear tablas dinámicas sobre una tabla de datos que
constantemente varía (más columnas o más filas) y no tener que preocuparme de
actualizar el rango, uso la siguiente formula (que tomé prestada de un foro
de excel, por lo que se lo agradezco profundamente a quien la publicó).

tablaÞSREF(Datos!$A$1;0;0;CONTARA(Datos!$A:$A);CONTARA(Datos!$1:$1))

El problema que tengo es que cada vez tengo que definir el nombre "tabla"

Me gustaría que me ayudaran a crear una macro que lo hicera automáticamente.
El problema que se me presenta es que la hoja en dónde están los datos no
siempre tiene el mismo nombre (en este caso es "Datos!"), por lo que
-supongo- el truco es que la macro gestione el nombre de la hoja activa para
evitar que sea un problema.

Muchas gracias por la ayuda.
 

Leer las respuestas

#1 Héctor Miguel
25/11/2005 - 01:59 | Informe spam
hola, Teletreks !

... crear tablas dinamicas sobre una tabla de datos que constantemente varia (mas columnas/filas)
y no tener que preocuparme de actualizar el rango, uso la siguiente formula
tablaÞSREF(Datos!$A$1;0;0;CONTARA(Datos!$A:$A);CONTARA(Datos!$1:$1))
El problema que tengo es que cada vez tengo que definir el nombre "tabla"
... es que la hoja en donde estan los datos no siempre tiene el mismo nombre (en este caso es "Datos!") [...]



supongo que se debe a que -tambien- el libro donde esta la 'futura' tabla es distinto de el del trabajo 'anterior' -?-
en vba puedes definir nombres usando en la 'formulacion' las funciones en ingles y un estilo de referencia R1C1 [p.e.]

1) si necesitas crear el nombre haciendo referencia a la hoja 'activa' [que es una referencia 'por omision' en vba]...
[excel se encarga de 'completar' la formulacion con el nombre de la hoja activa] :))
Sub DefinirNombreEnHojaActiva()
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
ActiveWorkbook.Names.Add _
Name:="Tabla", _
RefersToR1C1:="=Offset(r1c1,0,0,CountA(c1),CountA(r1))"
End Sub

2) si necesitas crear el nombre con referencia a alguna hoja en especial [se sustituye la referencia si el nombre existe]...
Sub DefinirNombreEnLibroActivo()
Dim Hoja As String: Hoja = Worksheets(3).Name
ActiveWorkbook.Names.Add _
Name:="Tabla", _
RefersToR1C1:="=Offset(" & _
Hoja & "!r1c1,0,0,CountA(" & _
Hoja & "!c1),CountA(" & _
Hoja & "!r1))"
End Sub

puesto que los nombres puede encontrarse 'repetidos' [en un libro pero haciendo referencia a hojas distintas]...
[probablemente] habria que considerar la posibilidad de casos 'similares' ;)

saludos,
hector.

Preguntas similares