我的第一個計劃是對每個命名範圍重複此操作,直到我意識到這將是多少。如果選擇與命名範圍相交,則選擇命名範圍
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
我的第一個計劃是對每個命名範圍重複此操作,直到我意識到這將是多少。如果選擇與命名範圍相交,則選擇命名範圍
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
相交的命名範圍中的至少一個,你如果你需要更多的控制
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
不確定我是否理解,我有1260個命名範圍,從M_1到M_1260,你會如何寫這個 – mrkrister
請參閱上面Scott的回答。在那裏他循環遍歷表中的每個命名範圍。你可以在這個循環中添加一個測試,如果你有其他命名的範圍,那麼就留下(nm.name,2)=「M_」Then'。你也可以設置一個循環來處理數字:'For i = 1 to 1260','Range(「M_」&i).DoSomething'有很多方法可以爲這隻貓蒙皮。 – JNevill
它已經有一段時間了,我被卡住了,我想我明白他的代碼是如何工作的,糾正我,如果我錯了,但它會對所有命名範圍進行測試,看看它們中的任何一個是否與選定單元格交叉,選擇一個名稱範圍。我不相信我需要在其中運行任何額外的測試,因爲我將使用所有命名範圍,所以我基本上只是複製他的代碼,並給我留下一個運行時錯誤,告訴我方法'範圍'失敗對象'_Woorksheet'這使我學到了很多其他的東西,但可惜不是如何得到這個權利 – mrkrister
添加一個循環,可以使用應用程序的union
方法通過命名範圍迭代:
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
不知道我在做什麼錯,但我無法得到這個工作 – mrkrister
只是循環遍歷指定範圍**在這片** –
@JNevill感謝編輯:) – mrkrister
@ Gary的學生對我來說不是那麼簡單,雖然 – mrkrister