所以我在Excel中的SheetChange事件中编码。我想知道更改是否在命名范围内进行。基本上是这样的:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Some code
If ('Target address is a part of one of the named ranges')
'Some code here
请注意,我在不同的表单中有多个命名范围,我想查看。一种方法可以是在某处进行更改时遍历每个命名范围。但我不认为这是一种很好的编码方式。任何帮助,将不胜感激。
答案 0 :(得分:4)
尝试
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Some code
If Not Intersect(Target, Range("MyNamedRange")) Is Nothing Then
'Some code here
End If
修改强>
以上工作用于测试目标是否是一个特定命名范围的一部分。如果您的要求是测试目标是否是任何命名范围的一部分,那么您确实必须遍历现有名称 - 这样的事情会起作用:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Some code
Dim sName As String
sName = InAnyNamedRange(Target)
If Not sName = "" Then
'Some code here
Debug.Print Target.Address & " changed, and is in named range " & sName
End If
End Sub
Function InAnyNamedRange(ByRef rng As Range)
Dim nm As Name
For Each nm In ThisWorkbook.Names
If Not Intersect(rng, Range(nm)) Is Nothing Then
InAnyNamedRange = nm.Name
Exit Function
End If
Next nm
End Function