Actie volgens een cel met een naam

Status
Niet open voor verdere reacties.

mcs51mc

Gebruiker
Lid geworden
19 feb 2008
Berichten
386
Ik heb een worksheet waarvan een aantal cellen een naam gekregen hebben via de "Name Manager"
Nu wil ik bepaalde acties uitvoeren in VBA wanneer één van die cellen gewijzigd is door de gebruiker, dus via de Private Sub Worksheet_Change(ByVal Target As Range) routine.
Echter de property Target.NameLocal bestaat niet :o
Dus heb ik onderstaande code in elkaar gebokst die mij de naam geeft van de gewijzigde cel.
Ipv de MsgBox komt finaal natuurlijk een call naar een bepaalde functie afhankelijk van de gewijzigde cel.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyName          As Name
Dim strTargetName   As String
    
    'Scroll door alle namen op zoek naar een adres gelijk aan dat van "Target"
    'Eerste test zorgt ervoor dat namen waarvan de cel verwijdert werd geen foutmelding geeft
    'Refers to geeft de waarde [=Sheet1!#REF!] in de Name Manager
    For Each MyName In ActiveWorkbook.Names
        If Not IsError(MyName.RefersToRange.Address) Then
            If MyName.RefersToRange.Address = Target.Address Then
                strTargetName = MyName.NameLocal
                Exit For
            End If
        End If
    Next MyName
    
    'Actie volgens gevonden naam, indien niets gevonden: Case Else
    Select Case strTargetName
        Case "rngFolder"
            MsgBox "1: " & strTargetName
        
        Case "rngDateStart"
            MsgBox "2: " & strTargetName
        
        Case "rngDateEnd"
            MsgBox "3: " & strTargetName
        
        Case "rngTimeStart"
            MsgBox "4: " & strTargetName
        
        Case "rngTimeEnd"
            MsgBox "5: " & strTargetName
        
        
        Case Else
            MsgBox "No name for changed cell!!"
            
    End Select
End Sub

Dit werkt wel maar lijkt mij redelijk omslachtig :confused:
Bestaat hiervoor een kortere manier of een property van Target die ik niet ken.

Alvast bedankt voor uw reactie!
 
Bedankt voor de reactie!
Met aangepaste code gebaseerd op Intersect check ik nu enkel de names cellen die ik wens zonder door alle named cellen te moeten scrollen. Om de code overzichtelijk te houden heb ik de Intersect wel in een aparte functie "InRange" gezet in een module.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'Bepalen welke cel gewijzigd werd en nodige acties uitvoeren
    If InRange(Target, Range("rngFolder")) Then MsgBox "11: rngFolder"
    
    If InRange(Target, Range("rngDateStart")) Then MsgBox "12: rngDateStart"
    
    If InRange(Target, Range("rngDateEnd")) Then MsgBox "13: rngDateEnd"
    
    If InRange(Target, Range("rngTimeStart")) Then MsgBox "14: rngTimeStart"
    
    If InRange(Target, Range("rngTimeEnd")) Then MsgBox "15: rngTimeEnd"
End Sub

Functie in een aparte module.
Code:
Public Function InRange(Range1 As Range, Range2 As Range) As Boolean
'Returns True if Range1 is within Range2
'
Dim InterSectRange As Range

    Set InterSectRange = Application.Intersect(Range1, Range2)
    InRange = Not InterSectRange Is Nothing
    
    'Kill reference
    Set InterSectRange = Nothing
End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan