Isso melhora a situação?
Function InRange(Range1 As Range, Range2 As Range) As Boolean
'returns True if Range1 is within Range2
Dim InterSectRange As Range
InRange = False
If Range1 Is Nothing Then
MsgBox "Range1 is nothing"
Exit Function
End If
If Range2 Is Nothing Then
MsgBox "Range2 is nothing"
Exit Function
End If
Set InterSectRange = Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function
EDIT # 1
Além disso, no sub OptionField () , os intervalos nomeados são provavelmente especificados em excesso. Mudança:
ActiveSheet.Range(nm)
para simplesmente:
Range(nm)
EDIT # 2
por exemplo
Sub demo2()
Dim r As Range
Set r = ActiveSheet.Range("A1")
MsgBox r.Address
MsgBox ActiveSheet.r.Address
End Sub
o primeiro MsgBox funciona, mas o segundo falha ........... isso ocorre porque uma vez que r tenha sido totalmente qualificado, ele não precisa de uma planilha para qualificá-lo novamente.