Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyData As String
Dim OldData As Range
Dim NewData As Range
Dim Nms, r As Long
Set Nms = ActiveWorkbook.Names
For r = 1 To Nms.Count
If Not Intersect(Target, Range(Nms(r))) Is Nothing Or _
Not Intersect(Target.Offset(-1), Range(Nms(r))) Is Nothing Then
MyData = Nms(r).Name
Exit For
End If
Next
Set OldData = Range(MyData)
If Not Intersect(Target, OldData) Is Nothing Then
Set NewData = OldData
ElseIf Not Intersect(Target, OldData.Offset(1)) Is Nothing Then
Set NewData = Union(OldData, OldData.Offset(1))
Else
Exit Sub
End If
NewData.Sort Key1:=NewData.Cells(1), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ActiveWorkbook.Names.Add Name:=MyData, RefersTo:="=" & ActiveSheet.Name & "!" & _
Range(NewData.Cells(1), NewData.Cells(1).End(xlDown)).AddressLocal
Range(MyData).Interior.ColorIndex = 6
MsgBox "Range " & MyData
Range(MyData).Interior.ColorIndex = xlNone
Set Nms = Nothing
Set OldData = Nothing
Set NewData = Nothing
End Sub
|