# VBA: Crear un nombre referido a un rango externo al libro ac



## juliodepalma (Sep 5, 2002)

Hola:

Hace unos días descubrí el site y dado que me pareció muy activo, he decidido solicitar ayuda para un problema que no consigo resolver:

Utilizando VBA necesito añadir un nuevo nombre que se refiera a un rango de celdas de *otro* libro Excel distinto.

La cadena que representa el rango, la creo a partir de valores almacenados en la hoja Excel, utilizando concatenación.

Hasta ahora, he sido capaz de hacerlo con nombres que se refieren a rangos situados en *otra* hoja del mismo *libro*, pero no lo consigo cuando la referencia es externa.

Si alguna persona más sabia y/o experimentada me puede ayudar, quedaría *muy* agradecido.

-- Julio


----------



## Juan Pablo González (Sep 5, 2002)

Para "descubrir" como se hace esto lo que hice fue simplemente desde el libro donde quiero poner el vínculo, escribir '=', y después, seleccionar el rango en el *otro* libro.  Ahí me apareció esta sintaxis:

=[Resumen.xls]Hoja1!SanMartin

al darle Enter, como este nombre es global, cambió a:

=Resumen.xls!SanMartin

o ya cuando cerré "Resume.xls" quedó:

='D:ProyectosResumen.xls'!SanMartin

espero que le ayude esto.


----------



## juliodepalma (Sep 5, 2002)

Hola Pablo:

Gracias por tu contestación. Quizás con este código de ejemplo consiga explicar mejor lo que quiero...

Sub miPruebaRangos()
Dim misNombres As Names
Dim esteNombre As Name
Dim esteRango As Range
Dim pathBaseDatosTareas, libroXlsDatosTareas, hojaXlsDatosTareas As String
Dim miFormula As String

Set misNombres = ActiveWorkbook.Names

' pathBaseDatosTareas = misNombres.Item("DIRBASE_DAT").RefersToRange.Value
' Así es como obtengo el valor de pathBaseDatosTareas, para el ejemplo utilizaré asignación directa.

' Quiero crear un rango que se refiera a "='C:Mis Documentos[2002. Análisis.xls]datos'!$1:$65536"

pathBaseDatosTareas = "c:Mis Documentos"
libroXlsDatosTareas = "2002. Análisis.xls"
hojaXlsDatosTareas = "datos"
miFormula = "'" & pathBaseDatosTareas & "["  & libroXlsDatosTareas & "]" & hojaXlsDatosTareas & "'!$1:$65536"

' NOTA: Así sí que funciona (si en el libro existe una hoja con el nombre "partidas")
' miFormula = "partidas!$A1:$A33"

Set esteRango = Range(miFormula)
Set esteNombre = misNombres.Add Name:="MI_RANGO", RefersTo:=esteRango
End Sub

El error que recibo es un código "1004", con la descripción " Falló en el método 'Range' de objeto '_Global' "

Después en Excel si en una celda escribo la formula "=indirecto(MI_RANGO, 1, 1)" debería ver el valor de la celda "A1" de la hoja "datos" del libro "2002. Análisis.xls"

Muchas gracias por anticipado.

Saludos desde Palma de Mallorca

-- Julio


----------



## Juan Pablo González (Sep 5, 2002)

Creo que el RefersTo espera un texto, no un rango.

Hay una forma más facil de hacer eso, por si acaso:

Range(miFormula).Name = "MI_RANGO"


----------

