2014-01-13 234 views
0

我在工作表中有一堆範圍名稱(大多數是單個單元格)。當我更改名爲「Grade」的單元格時,我希望它的值出現在另一個名爲「GrdSrchSttng」(6 x 1範圍)的範圍中作爲最後一個值。但是爲了做到這一點,我需要知道名爲「成績」的特定單元格發生了變化。 The solution to this question does not work.返回範圍的名稱。

我嘗試這樣做:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim isIn As Boolean 
Dim i As Integer 
Dim r As Range 


Set r = ActiveSheet.Range("GrdSrchSttng") 

    If Target.Name.Name = "Search!Grade" Then ' <== this si the line I have the issue with 
     Select Case Target.Value 
      Case "All" 
       r.ClearContents 
       r.Cells(1, 1).Value = "All" 
      Case "" 
       r.ClearContents 
       Target.Value = "All" 
       r.Cells(1, 1).Value = "All" 
      Case Else 
       If r(1, 1).Value = "All" Then 
        r.ClearContents 
       End If 

       i = 1 
       Do While r(i, 1).Value <> "" 
        If r(i, 1).Value = Target.Value Then 
         isIn = True 
        End If 
        i = i + 1 
       Loop 

       If Not isIn Then 
        r(i, 1).Value = Target.Value 
       End If 
     End Select 
    End If 
End Sub 

回答

1

就個人而言,使用Target.Name.Name是有點棘手。我更喜歡使用替代方法,因爲它實現了基本相同的結果。除非你特別要跟蹤的命名範圍的名字,我建議做類似如下:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Whatever = Range("Grade").Address 
    If Target.Address = Whatever Then 
     Range("GrdSrchSttng").Cells(1, 6).Value = Target.Value 
    End If 
End Sub 

截圖:

設置:

enter image description here

編輯Grade時的結果:

enter image description here

讓我們知道這是不是適合或以其他方式。 :)

+0

嗨,謝謝,很好的解決方法。我決定使用這個而不是我的「下一個單元格檢查」,因爲我更喜歡這個。仍然不明白爲什麼.name.name不起作用。有點沮喪。但無論如何,非常感謝。 – PBD10017

+0

不客氣,謝謝你的接受。 :) – Manhattan

+0

@ BK201我有相同的方法,但在測試期間,我沒有得到所需的結果。這張紙上什麼都沒有發生。所以我沒有發佈它作爲答案。任何想法爲什麼? :) – L42