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ó:

Mostrar la cita
#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ó:

Mostrar la cita
#3 Héctor Miguel
29/05/2007 - 20:37 | Informe spam
hola, Francisco !

Mostrar la cita
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.
#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ó:

Mostrar la cita
#5 Héctor Miguel
29/05/2007 - 22:55 | Informe spam
hola, David !

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

saludos,
hector.
Ads by Google
Search Busqueda sugerida