Disculpas si me repito pero ... ¿Como borrar los nombres en un l ib

15/02/2005 - 16:59 por Un quijote | Informe spam
Saludos,
Como ya pregunté anteriormente,
tengo la siguiente rutina con la que borro todos los nombres de celda en un
libro y sigo teniendo dos preguntas:

1ª ¿Como podria borrar los nombres de solo una hoja cualquiera?

2ª Ya que el libro tiene más de 1500 nombres, y con esta rutina el proceso
se alarga en exceso, no existe alguna otra forma de mejorar el tiempo de
ejecución.

Sub borrar_Nombres()
Dim nombCelda As Name
Dim n As Integer
'Recorrer el conjunto de objetos Names y eliminar
For Each nombCelda In ActiveWorkbook.Names
nombCelda.Delete
Next

End Sub

Gracias de nuevo.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
15/02/2005 - 17:24 | Informe spam
"Un quijote" escribió en el mensaje news:
Saludos,
Como ya pregunté anteriormente,
tengo la siguiente rutina con la que borro todos los nombres de celda en un
libro y sigo teniendo dos preguntas:

1ª ¿Como podria borrar los nombres de solo una hoja cualquiera?




Si te refieres a los nombres que hacen referencia a una hoja determinada, puedes averiguar dicha hoja mediante algo como:

ObjetoName.RefersToRange.Parent.Name

es decir:

If ObjetoName.RefersToRange.Parent.Name = "NombreDeLaHoja" Then

2ª Ya que el libro tiene más de 1500 nombres, y con esta rutina el proceso
se alarga en exceso, no existe alguna otra forma de mejorar el tiempo de
ejecución.

Sub borrar_Nombres()
Dim nombCelda As Name
Dim n As Integer
'Recorrer el conjunto de objetos Names y eliminar
For Each nombCelda In ActiveWorkbook.Names
nombCelda.Delete
Next

End Sub




Dudo que sea más rápida, pero por probar que no quede:

Sub eliminar2()
Dim n As Long
For n = ThisWorkbook.Names.Count To 1 Step -1
ThisWorkbook.Names(n).Delete
Next n
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel


Gracias de nuevo.
Respuesta Responder a este mensaje
#2 KL
15/02/2005 - 17:31 | Informe spam
Hola quijote,

1? ?Como podria borrar los nombres de solo una hoja cualquiera?



Los rangos/formulas denominados se pueden crear a nivel de Libro u Hoja. Lo
mas comun (y por defecto) es q los nombres se crean a nivel de Libro (aunque
la referencia sea a un rango dentro de una hoja concreta). Como ya se te ha
mencionado antes en VBA puedes hacer una de dos:

'Nivel Libro
For Each n In ActiveWorkbook.Names
n.Delete
Next

o bien

'nivel Hoja

For Each n In ActiveSheet.Names
n.Delete
Next

Ninguna de las dos rutinas afectara a los nombres q pertenezcan a otro
nivel.

2? Ya que el libro tiene mas de 1500 nombres, y con esta rutina el proceso
se alarga en exceso, no existe alguna otra forma de mejorar el tiempo de
ejecucion.



Me sorprende q se te alargue excesivamente (aunque desconozco q es
"excesivo" para ti ni cuan potente es tu PC). He probado crear 3000 nombres
en mi hoja y luego eliminarlos usando la rutina de arriba. En mi equipo (P4
1.8GHz y SDRAM 512Mb) tardo 2 segundos. Si tienes muchas formulas en tu
libro es posible q sea el recalculo de las mismas q relentiza el proceso.
Prueba deshabilitar el recalculo y los eventos (por si tienes rutinas q se
disparan al recalcular) temporalmente mientras ejecutas el macro usando:

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'Tu codigo aqui
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True

Tambien como alternativa, mirate este complemento:
http://www.bmsltd.ie/DLCount/DLCoun...anager.zip

Saludos,
KL
Respuesta Responder a este mensaje
#3 Un quijote
15/02/2005 - 17:41 | Informe spam
Gracias Fernando, ya lo habia probado asi y como dices el tiempo de respuesta
es similar.
Lo que me tiene intrigado es por que genera los nombres bastante más rápido
que los elimina.
Y otra cosa ¿no ahi forma de eliminar todo el conjunto de objetos Names?
como por ejemplo ThisWorkbook.Name= Nothing o algo parecido.

Gracias.

"Fernando Arroyo" escribió:

"Un quijote" escribió en el mensaje news:
> Saludos,
> Como ya pregunté anteriormente,
> tengo la siguiente rutina con la que borro todos los nombres de celda en un
> libro y sigo teniendo dos preguntas:
>
> 1ª ¿Como podria borrar los nombres de solo una hoja cualquiera?
>

Si te refieres a los nombres que hacen referencia a una hoja determinada, puedes averiguar dicha hoja mediante algo como:

ObjetoName.RefersToRange.Parent.Name

es decir:

If ObjetoName.RefersToRange.Parent.Name = "NombreDeLaHoja" Then .

> 2ª Ya que el libro tiene más de 1500 nombres, y con esta rutina el proceso
> se alarga en exceso, no existe alguna otra forma de mejorar el tiempo de
> ejecución.
>
> Sub borrar_Nombres()
> Dim nombCelda As Name
> Dim n As Integer
> 'Recorrer el conjunto de objetos Names y eliminar
> For Each nombCelda In ActiveWorkbook.Names
> nombCelda.Delete
> Next
>
> End Sub
>

Dudo que sea más rápida, pero por probar que no quede:

Sub eliminar2()
Dim n As Long
For n = ThisWorkbook.Names.Count To 1 Step -1
ThisWorkbook.Names(n).Delete
Next n
End Sub

Un saludo.


Fernando Arroyo
MS MVP - Excel


> Gracias de nuevo.

Respuesta Responder a este mensaje
#4 Un quijote
15/02/2005 - 17:47 | Informe spam
Muchas Gracias ese era realmente el problema.
La cantidad de cálculos que la hoja tiene que hacer ahora va de maravilla.

Gracias a todos

"KL" wrote:

Hola quijote,

> 1? ?Como podria borrar los nombres de solo una hoja cualquiera?

Los rangos/formulas denominados se pueden crear a nivel de Libro u Hoja. Lo
mas comun (y por defecto) es q los nombres se crean a nivel de Libro (aunque
la referencia sea a un rango dentro de una hoja concreta). Como ya se te ha
mencionado antes en VBA puedes hacer una de dos:

'Nivel Libro
For Each n In ActiveWorkbook.Names
n.Delete
Next

o bien

'nivel Hoja

For Each n In ActiveSheet.Names
n.Delete
Next

Ninguna de las dos rutinas afectara a los nombres q pertenezcan a otro
nivel.

> 2? Ya que el libro tiene mas de 1500 nombres, y con esta rutina el proceso
> se alarga en exceso, no existe alguna otra forma de mejorar el tiempo de
> ejecucion.

Me sorprende q se te alargue excesivamente (aunque desconozco q es
"excesivo" para ti ni cuan potente es tu PC). He probado crear 3000 nombres
en mi hoja y luego eliminarlos usando la rutina de arriba. En mi equipo (P4
1.8GHz y SDRAM 512Mb) tardo 2 segundos. Si tienes muchas formulas en tu
libro es posible q sea el recalculo de las mismas q relentiza el proceso.
Prueba deshabilitar el recalculo y los eventos (por si tienes rutinas q se
disparan al recalcular) temporalmente mientras ejecutas el macro usando:

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'Tu codigo aqui
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True

Tambien como alternativa, mirate este complemento:
http://www.bmsltd.ie/DLCount/DLCoun...anager.zip

Saludos,
KL



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida