RE: Especificar un rango nombrado en una macro

31/05/2007 - 19:26 por Francisco | Informe spam
Hola otra vez David:
(aunque se que estoy faltando a la etica del foro, me dirijo a ti
directamente porque el asunto a tratar es continuacion de una propuesta tuya
en un hilo ya cerrado )

El dia de hoy he tratado de probar la formula que propusiste, pero algo hice
mal porque no esta funcionando. El macro me indica error en la formula.
La informacion de la hoja de trabajo en donde opero esto es la sig:

El macro me sirve para llenar un formato en renglones consecutivos haciendo
uso de la funcion "Buscarv" en tres columnas del formato (Descripcion,
Unidad, Precio Unitario). La hoja se llama "Resumen Mens"

La hoja donde esta el rango de busqueda se llama "Presup". El rango de
busqueda esta nombrado como "tabla" e inicia en A20 y actualmente termina en
K760 (pero como aclare anteriormente puede crecer en numero de filas)

En las primeras cinco columnas no hay celdas vacias

La formula que propusiste, asumiendo el rango A:M, fue:
activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R12C" &
ActiveSheet.Range("B65536").End(xlUp).Row

traducido a mi libro de trabajo lo puse
Activeworkbook.Names("Tabla").RefersTo = "=Presup!R20C1:R20C" &
ActiveSheet.Range("A65536").End(xlUp).Row

Lo que no me quedo claro como expande a la columna K y como resolver lo que
aclaro Hector acerca de que ActiveSheet. no necesariamente es, en mi caso
Presup!
Me puedes ayudar con esto, ya con los datos que te doy arriba?

Saludos
Francisco
 

Leer las respuestas

#1 David
31/05/2007 - 21:01 | Informe spam
Hola, Francisco.

Primero, he de pedirte disculpas. La línea de código tiene un error. No es
para justificarme, pero se debió a que respondí sin probarlo antes. Luego di
por saldado el asunto, y no fue sino hasta hoy, al ver tu consulta, que
recapacito y rectifico.

1.
El propósito de dicha línea era determinar la última fila ocupada en una
base de datos, y con ello, redefinir un rango nombrado.

2.
Héctor comentaba que era preferible referirse a la hoja por su nombre, y no
como "ActiveSheet". Estoy totalmente de acuerdo, y más adelante hago la
corrección propuesta.

3.
En tu caso particular, nos cuentas que la tabla principia en A20 (Fila 20,
columna 1), y termina en la columna K (columna 11, fila pendiente). Por otro
lado, la hoja se llama "Presup", y el rango "Tabla".

4.
Una observación final: Se asume que el rango "Tabla" ya existe. Si no se
ha creado, se producirá un error.

Con estos datos, la instrucción debería ser:

ActiveWorkbook.Names("Tabla").RefersTo = _
"=Presup!R20C1:R" & _
Sheets("Presup").Range("A65536").End(xlUp).Row & _
"C11"


Ahora comentemos sobre cómo funciona.

La sección que hace el trabajo de determinar la última fila utilizada es:
Sheets("Presup").Range("A65536").End(xlUp).Row

Observa que el punto de partida es la última celda en la columna A:
Sheets("Presup").Range("A65536")

A partir de ella, nos desplazamos hacia arriba hasta encontrar una celda
ocupada:
.End(xlUp)

y retornamos el número de fila:
.row

Aquí cometí otro error, pues ese número de fila lo asigné al número de
columna (craso, ¿no crees?).

Con estas correcciones, debería funcionarte bien. Comentas si no es así.

PD: Si aún hay dudas, plantéalas aquí, o escríbeme. Mi email está en mi
perfil. Y nuevamente disculpas.




"Francisco" escribió:


Hola otra vez David:
(aunque se que estoy faltando a la etica del foro, me dirijo a ti
directamente porque el asunto a tratar es continuacion de una propuesta tuya
en un hilo ya cerrado )

El dia de hoy he tratado de probar la formula que propusiste, pero algo hice
mal porque no esta funcionando. El macro me indica error en la formula.
La informacion de la hoja de trabajo en donde opero esto es la sig:

El macro me sirve para llenar un formato en renglones consecutivos haciendo
uso de la funcion "Buscarv" en tres columnas del formato (Descripcion,
Unidad, Precio Unitario). La hoja se llama "Resumen Mens"

La hoja donde esta el rango de busqueda se llama "Presup". El rango de
busqueda esta nombrado como "tabla" e inicia en A20 y actualmente termina en
K760 (pero como aclare anteriormente puede crecer en numero de filas)

En las primeras cinco columnas no hay celdas vacias

La formula que propusiste, asumiendo el rango A:M, fue:
activeworkbook.Names("David").RefersTo = "=Hoja1!R1C1:R12C" &
ActiveSheet.Range("B65536").End(xlUp).Row

traducido a mi libro de trabajo lo puse
Activeworkbook.Names("Tabla").RefersTo = "=Presup!R20C1:R20C" &
ActiveSheet.Range("A65536").End(xlUp).Row

Lo que no me quedo claro como expande a la columna K y como resolver lo que
aclaro Hector acerca de que ActiveSheet. no necesariamente es, en mi caso
Presup!
Me puedes ayudar con esto, ya con los datos que te doy arriba?

Saludos
Francisco



Preguntas similares