Elaborar, vamos a decir que tengo dos rangos con nombre en mi libro. Ambos rangos nombrados tienen el mismo nombre (digamos "myName"), pero uno tiene un alcance de Sheet1 y el otro tiene un ámbito en el Workbook.Obtener un rango con nombre de cadena en el libro de Excel cuando se duplica Nombre
Dado un nombre (cadena) del rango con nombre, quiero agarrar el nivel del libro denominado rango.
Si utilizo la llamada nativa: wb.Names.Item("myName")
, devuelve la hoja de ámbito rango con nombre.
Si por el contrario lo hago: wb.Names.Item("Sheet1!myName")
, que, obviamente, devuelve la hoja con ámbito rango nombre. He descubierto que puedo usar esto para especificar los específicos de la hoja, pero no uno de libro de trabajo.
¿Hay alguna forma de especificar Quiero el libro de ámbito uno?
Mi solución es actualmente la iteración en la lista de todos los nombres, y la comparación de la propiedad .Nombre para agarrar el alcance libro rango con nombre. Esto funciona porque la propiedad .Name agrega un "Sheet1!" a la hoja con alcance Named Range. Sin embargo, esto es muy costoso de hacer, y quiero evitarlo.
No es 100% claro cómo se utiliza el distancia. Si estaba intentando establecer un objeto de rango en una cadena de nombre, 'Set rng1 = Range (" myName ")' devolverá el rango desde el nombre de la hoja local si * sheet1 está activo * else devolverá el rango del nombre del libro de trabajo . Creo que esta es la solución más limpia, es decir, probar que la hoja activa es diferente de la hoja que aloja el nombre local antes de buscar usar el nombre como el alcance del libro de trabajo. ¿Tener sentido? :) – brettdj
también puede comparar parent.name con el nombre del libro de trabajo, pero aún necesita recorrer los nombres para extraer esa colección. – nutsch
re: @ brettdj's comment. Dependiendo de lo que intente lograr, lo más fácil podría ser simplemente agregar una hoja temporal al comienzo de su macro, que se eliminará al final de su código. – nutsch