Excel 如果选择与命名范围相交,则选择该命名范围
我的第一个计划是对每个指定的范围重复这个过程,直到我意识到这将是多少Excel 如果选择与命名范围相交,则选择该命名范围,excel,vba,Excel,Vba,我的第一个计划是对每个指定的范围重复这个过程,直到我意识到这将是多少 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(ActiveCell, Range("M_1")) Is Nothing Then Else Range("M_1").Select End If End Sub 首先,您需要将activecell更改为target,因为target作为调用范围是静态的。另外,只需将
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(ActiveCell, Range("M_1")) Is Nothing Then
Else
Range("M_1").Select
End If
End Sub
首先,您需要将
activecell
更改为target
,因为target
作为调用范围是静态的。另外,只需将NOT
条件添加到IF
中,就不必使用ELSE
如果要根据命名范围列表测试target
,查看target
是否与至少一个命名范围相交,可以使用应用程序的union
方法:
If Not Intersect(Target, Union(Range("M_1"), Range("M_2"), Range("M_3")) Is Nothing Then
如果需要更多控制,也可以执行循环:
doIntersect = false
rngCounter = 0
For each strTestRange in Array("M_1", "M_2", "M_3")
If Not Intersect(Target, Range(strTestRange) Is Nothing Then
doIntersect = true
rngCounter = rngCounter + 1
End if
Next strTestRange
If doIntersect Then
msgbox(rngCounter & " named ranges intersect your selection")
Else
msgbox("None of the named ranges intersected your selection")
End if
首先,您需要将
activecell
更改为target
,因为target
作为调用范围是静态的。另外,只需将NOT
条件添加到IF
中,就不必使用ELSE
如果要根据命名范围列表测试target
,查看target
是否与至少一个命名范围相交,可以使用应用程序的union
方法:
If Not Intersect(Target, Union(Range("M_1"), Range("M_2"), Range("M_3")) Is Nothing Then
如果需要更多控制,也可以执行循环:
doIntersect = false
rngCounter = 0
For each strTestRange in Array("M_1", "M_2", "M_3")
If Not Intersect(Target, Range(strTestRange) Is Nothing Then
doIntersect = true
rngCounter = rngCounter + 1
End if
Next strTestRange
If doIntersect Then
msgbox(rngCounter & " named ranges intersect your selection")
Else
msgbox("None of the named ranges intersected your selection")
End if
添加循环以在命名范围内迭代:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nm As Name
Dim nmStr As String
For Each nm In ThisWorkbook.Names
nmStr = nm.Name
If Not Intersect(Target, Range(nmStr)) Is Nothing Then
Application.EnableEvents = False
Range(nmStr).Select
Application.EnableEvents = True
End If
Next nm
End Sub
添加循环以在命名范围内迭代:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nm As Name
Dim nmStr As String
For Each nm In ThisWorkbook.Names
nmStr = nm.Name
If Not Intersect(Target, Range(nmStr)) Is Nothing Then
Application.EnableEvents = False
Range(nmStr).Select
Application.EnableEvents = True
End If
Next nm
End Sub
只需在该工作表中的命名范围上循环即可。@jnevil感谢您的编辑:)@Gary的学生对我来说没那么简单though@JNevill@Scott@Gary在scotts代码中添加了
错误恢复下一步
,效果非常好,谢谢大家!现在,我应该编辑代码还是保持原样?只需在该工作表中的命名范围上循环即可。@jnevil谢谢编辑:)@Gary的学生对我来说没那么简单though@JNevill@Scott@Gary在scotts代码中添加了错误恢复下一步
,效果非常好,谢谢大家!现在,我应该编辑我的代码还是保持原样?我不知道我做错了什么,但我不能让它工作。我不知道我做错了什么,但我不能让它工作。我不确定我是否理解,我有1260个命名范围,从m_1到m_1260,你会怎么写见上面Scott的答案。在那里,他在工作表中的每个命名范围中循环。您可以在该循环中添加一个测试,如如果left(nm.name,2)=“M_3;”,那么如果您有其他命名范围。你也可以设置一个循环,按照编号:从i=1到1260,范围(“M_389;”&i)。DoSomething
有很多方法可以剥这只猫的皮。已经有一段时间了,我被卡住了,我想我理解他的代码是如何工作的,如果我错了,请纠正我,但它会在所有命名区域上运行测试,以查看其中是否有任何区域与选定单元格相交,并选择一个与之相交的命名区域。我不认为我需要在该范围内运行任何其他测试,因为我将使用所有命名范围,所以我基本上只是复制了他的代码,这给我留下了一个运行时错误,告诉我方法“Range”在对象“_Woorksheet”中失败了。这让我学到了很多其他东西,但遗憾的是,没有学会如何正确地实现这一点。我会问scott我是否认为他会回答,可能有一个简单的解决方案,但我看不到,提前谢谢!我不确定我是否理解,我有1260个命名范围,从M_1到M_1260,你会怎么写?见上面斯科特的答案。在那里,他在工作表中的每个命名范围中循环。您可以在该循环中添加一个测试,如如果left(nm.name,2)=“M_3;”,那么如果您有其他命名范围。你也可以设置一个循环,按照编号:从i=1到1260,范围(“M_389;”&i)。DoSomething
有很多方法可以剥这只猫的皮。已经有一段时间了,我被卡住了,我想我理解他的代码是如何工作的,如果我错了,请纠正我,但它会在所有命名区域上运行测试,以查看其中是否有任何区域与选定单元格相交,并选择一个与之相交的命名区域。我不认为我需要在该范围内运行任何其他测试,因为我将使用所有命名范围,所以我基本上只是复制了他的代码,这给我留下了一个运行时错误,告诉我方法“Range”在对象“_Woorksheet”中失败了。这让我学到了很多其他东西,但遗憾的是,没有学会如何正确地实现这一点。我会问scott我是否认为他会回答,可能有一个简单的解决方案,但我看不到,提前谢谢!