Especificar un rango nombrado en una macro

29/05/2007 - 18:20 por Francisco | Informe spam
Hola a todos:
Estoy trabajando en una macro que utiliza el filtro avanzado para extraer
registros únicos. Pero resulta que el rango base (al cual le defino un
nombre) de donde voy a extraer los datos puede variar en tamaño en el numero
de filas en cada ocasión en que voy a correr la macro.
No he podido lograr el que la redefinición del rango cambie en la macro.
Esta se queda siempre con la primera definición.
Si redefino el rango con el mismo nombre fuera de la macro (antes de
correrla) no lo toma en cuenta.
Si incluyo en la misma macro esta misma operacion, definiendo el tamaño del
rango con movimiento de teclas (mays-fin-derecha; mays-fin-abajo) igual se
queda fija la definición con que grabe la macro.
Me podria alguien orientar para resolver este problema?
Apreciare su sapiencia.

Saludos
Francisco

Preguntas similare

Leer las respuestas

#1 David
29/05/2007 - 20:08 | Informe spam
Hola, Francisco.

Con la grabadora de macros, probablemente no te detecte la selección de un
rango por su nombre, sino solamente por sus coordenadas o direcciones.
Prueba introducir manualmente esta línea en tu código:

Application.Goto Reference:="David"

donde David (¡claro!) es el nombre de tu rango.

- Esto último a tono de broma... ;) -



"Francisco" escribió:

Hola a todos:
Estoy trabajando en una macro que utiliza el filtro avanzado para extraer
registros únicos. Pero resulta que el rango base (al cual le defino un
nombre) de donde voy a extraer los datos puede variar en tamaño en el numero
de filas en cada ocasión en que voy a correr la macro.
No he podido lograr el que la redefinición del rango cambie en la macro.
Esta se queda siempre con la primera definición.
Si redefino el rango con el mismo nombre fuera de la macro (antes de
correrla) no lo toma en cuenta.
Si incluyo en la misma macro esta misma operacion, definiendo el tamaño del
rango con movimiento de teclas (mays-fin-derecha; mays-fin-abajo) igual se
queda fija la definición con que grabe la macro.
Me podria alguien orientar para resolver este problema?
Apreciare su sapiencia.

Saludos
Francisco
Respuesta Responder a este mensaje
#2 Francisco
29/05/2007 - 20:25 | Informe spam
Gracias David, pero el problema no es eso... el problema consiste en que el
rango "david" hoy puede ser b8:h40 y el proximo mes b8:h47. Necesito que
dentro de la macro puede redefinir "david" como b8:h47, siendo que
originalmente cuando grabe la macro era b8:h40. No lo cambia; supongo que
habra que definir variables pero no se comolo sabes tu?

"David" escribió:

Hola, Francisco.

Con la grabadora de macros, probablemente no te detecte la selección de un
rango por su nombre, sino solamente por sus coordenadas o direcciones.
Prueba introducir manualmente esta línea en tu código:

Application.Goto Reference:="David"

donde David (¡claro!) es el nombre de tu rango.

- Esto último a tono de broma... ;) -



"Francisco" escribió:

> Hola a todos:
> Estoy trabajando en una macro que utiliza el filtro avanzado para extraer
> registros únicos. Pero resulta que el rango base (al cual le defino un
> nombre) de donde voy a extraer los datos puede variar en tamaño en el numero
> de filas en cada ocasión en que voy a correr la macro.
> No he podido lograr el que la redefinición del rango cambie en la macro.
> Esta se queda siempre con la primera definición.
> Si redefino el rango con el mismo nombre fuera de la macro (antes de
> correrla) no lo toma en cuenta.
> Si incluyo en la misma macro esta misma operacion, definiendo el tamaño del
> rango con movimiento de teclas (mays-fin-derecha; mays-fin-abajo) igual se
> queda fija la definición con que grabe la macro.
> Me podria alguien orientar para resolver este problema?
> Apreciare su sapiencia.
>
> Saludos
> Francisco
Respuesta Responder a este mensaje
#3 Héctor Miguel
29/05/2007 - 20:37 | Informe spam
hola, Francisco !

Estoy trabajando en una macro que utiliza el filtro avanzado para extraer registros unicos.
Pero resulta que el rango base (al cual le defino un nombre) de donde voy a extraer los datos
puede variar en tama#o en el numero de filas en cada ocasion en que voy a correr la macro.
No he podido lograr el que la redefinicion del rango cambie en la macro.
Esta se queda siempre con la primera definicion...

... el problema consiste en que el rango... hoy puede ser b8:h40 y el proximo mes b8:h47...





no es necesario re/definir nombres para actuar en rangos de/crecientes mediante macros [p.e.]

si suponemos que la columna que 'manda' cual seria la ultima fila es la columna 'B' -?-

a) si estas trabajando sobre la hoja activa, y quieres filtros avanzados en las columnas 'B:H' iniciando en la fila 8
Range(Range("b8"), Range("b65536").End(xlUp)).Resize(, 7).AdvancedFilter .. etc. etc. etc. ...

b) si la hoja sobre la que vas a filtrar NO es la hoja activa...
With Worksheets("hoja1")
.Range(.Range("b8"), .Range("b65536").End(xlUp)).Resize(, 7).AdvancedFilter .. etc. etc. etc. ...
End With

si cualquier duda [o informacion adicioal]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 David
29/05/2007 - 22:26 | Informe spam
Tal y como dice Héctor, no es necesario que trabajes con nombres de rangos.
Podrías detectar el rango de tus datos por alguno de los métodos que él
provee, y aplicar el filtro.

Ahora, como desconozco tu aplicación, si es totalmente necesario, puedes
utilizar el objeto Name:

activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R5C10"

Esta línea te redefiniría el nombre de rango "David" hacia las celdas A1:J5.

Para utilizar variables, supongamos que tu base de datos ocupa las columnas
A:M. ¿Tienes alguna columna que no tenga celdas vacías? Si ese fuera el
caso, supongamos que fuera la columna B. Podrías detectar la última fila
usada con lo siguiente:

Al principio de tu código:
Dim UF as long

Y luego:
UF = ActiveSheet.Range("B65536").End(xlUp).Row

para redefinir tu nombre de rango con:
activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R12C" & UF

Pero también lo podrías hacer sin utilizar variables:
activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R12C" &
ActiveSheet.Range("B65536").End(xlUp).Row

(lo anterior es una sola línea)

Comentas si esto te ayuda a resolver el problema.




"Francisco" escribió:

Gracias David, pero el problema no es eso... el problema consiste en que el
rango "david" hoy puede ser b8:h40 y el proximo mes b8:h47. Necesito que
dentro de la macro puede redefinir "david" como b8:h47, siendo que
originalmente cuando grabe la macro era b8:h40. No lo cambia; supongo que
habra que definir variables pero no se comolo sabes tu?

"David" escribió:

> Hola, Francisco.
>
> Con la grabadora de macros, probablemente no te detecte la selección de un
> rango por su nombre, sino solamente por sus coordenadas o direcciones.
> Prueba introducir manualmente esta línea en tu código:
>
> Application.Goto Reference:="David"
>
> donde David (¡claro!) es el nombre de tu rango.
>
> - Esto último a tono de broma... ;) -
>
>
>
> "Francisco" escribió:
>
> > Hola a todos:
> > Estoy trabajando en una macro que utiliza el filtro avanzado para extraer
> > registros únicos. Pero resulta que el rango base (al cual le defino un
> > nombre) de donde voy a extraer los datos puede variar en tamaño en el numero
> > de filas en cada ocasión en que voy a correr la macro.
> > No he podido lograr el que la redefinición del rango cambie en la macro.
> > Esta se queda siempre con la primera definición.
> > Si redefino el rango con el mismo nombre fuera de la macro (antes de
> > correrla) no lo toma en cuenta.
> > Si incluyo en la misma macro esta misma operacion, definiendo el tamaño del
> > rango con movimiento de teclas (mays-fin-derecha; mays-fin-abajo) igual se
> > queda fija la definición con que grabe la macro.
> > Me podria alguien orientar para resolver este problema?
> > Apreciare su sapiencia.
> >
> > Saludos
> > Francisco
Respuesta Responder a este mensaje
#5 Héctor Miguel
29/05/2007 - 22:55 | Informe spam
hola, David !

... si es totalmente necesario, puedes utilizar el objeto Name:
activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R5C10" [...]
Para utilizar variables... Podrias detectar la ultima fila usada con lo siguiente:
Dim UF as long
UF = ActiveSheet.Range("B65536").End(xlUp).Row
para redefinir tu nombre de rango con:
activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R12C" & UF [...]



[solo] no olvidar que 'ActiveSheet' pudiera no ser *obligadamente* lo mismo que: "=Hoja1!."

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida