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

juliodepalma

New Member
Joined
Sep 4, 2002
Messages
6
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
 

Excel Facts

Excel Joke
Why can't spreadsheets drive cars? They crash too often!

Juan Pablo González

MrExcel MVP
Joined
Feb 8, 2002
Messages
11,959
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

New Member
Joined
Sep 4, 2002
Messages
6
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

MrExcel MVP
Joined
Feb 8, 2002
Messages
11,959
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"
 

Forum statistics

Threads
1,144,290
Messages
5,723,522
Members
422,502
Latest member
barakgahtan

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Top