El código de JS20'07'11 es realmente increíble simple y directo. Una sugerencia que me gustaría dar es poner un signo de exclamación en las condiciones:
InStr(1, objName.RefersTo, sWsName+"!", vbTextCompare)
Debido a esto evitará que la adición de un NamedRange en una hoja incorrecta. Por ejemplo: Si el NamedRange se refiere a una hoja denominada Plan11 y tiene otro hoja denominada Plan1 el código puede hacer un poco de lío cuando añadir los rangos si no se utiliza el signo de exclamación.
ACTUALIZACIÓN
Una corrección: Lo mejor es utilizar una expresión regular evaluar el nombre de la hoja. Una función sencilla que se puede utilizar es la siguiente (adaptado por http://blog.malcolmp.com/2010/regular-expressions-excel-add-in, permitirá a Microsoft VBScript expresiones regulares 5.5):
Function xMatch(pattern As String, searchText As String, Optional matchIndex As Integer = 1, Optional ignoreCase As Boolean = True) As String
On Error Resume Next
Dim RegEx As New RegExp
RegEx.Global = True
RegEx.MultiLine = True
RegEx.pattern = pattern
RegEx.ignoreCase = ignoreCase
Dim matches As MatchCollection
Set matches = RegEx.Execute(searchText)
Dim i As Integer
i = 1
For Each Match In matches
If i = matchIndex Then
xMatch = Match.Value
End If
i = i + 1
Next
End Function
Por lo tanto, se puede usar algo así:
xMatch("'?" +sWsName + "'?" + "!", objName.RefersTo, 1) <> ""
en lugar de
InStr(1, objName.RefersTo, sWsName+"!", vbTextCompare)
Esto cubrirá Plan1 y 'Plan1' (WH en el rango hace referencia a más de una celda) variaciones
CONSEJO: Evite los nombres de las hojas con comillas simples ('), :).
Este código parece cambiar el alcance de los rangos establecidos en el libro de trabajo a la hoja de trabajo. Pensé que se suponía que debía hacer lo contrario. es decir, cambie el alcance de la hoja de trabajo al libro de trabajo. –
La pregunta original me parece clara: "Por ejemplo, 'testName' se refiere a 'sheet1'! A1: B2 con scope Workbook. ¿Cómo cambiaría eso a 'testName' se refiere a 'sheet1'! A1: B2 con 'sheet1 'alcance? –
Gracias por el complemento. Funciona muy bien. – Anthony