• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

macro aanpassing

Status
Niet open voor verdere reacties.

NiekvanMeer

Gebruiker
Lid geworden
30 sep 2013
Berichten
129
Beste,

Onderstaande simpel in elkaar gezette macro zegt dat wanneer ik een cel in kolom C invoer, de huidige datum in kolom O ingevoerd wordt.

Code:
Private Sub worksheet_change(ByVal Target As Range)

If Target.Address = Range("C4").Address Then Range("O4") = Date
If Target.Address = Range("C5").Address Then Range("O5") = Date
If Target.Address = Range("C6").Address Then Range("O6") = Date
If Target.Address = Range("C7").Address Then Range("O7") = Date
If Target.Address = Range("C8").Address Then Range("O8") = Date
If Target.Address = Range("C9").Address Then Range("O9") = Date
If Target.Address = Range("C10").Address Then Range("O10") = Date
If Target.Address = Range("C11").Address Then Range("O11") = Date
If Target.Address = Range("C12").Address Then Range("O12") = Date
If Target.Address = Range("C13").Address Then Range("O13") = Date
If Target.Address = Range("C14").Address Then Range("O14") = Date
If Target.Address = Range("C15").Address Then Range("O15") = Date
If Target.Address = Range("C17").Address Then Range("O17") = Date
If Target.Address = Range("C18").Address Then Range("O18") = Date
If Target.Address = Range("C19").Address Then Range("O19") = Date
If Target.Address = Range("C20").Address Then Range("O20") = Date
If Target.Address = Range("C22").Address Then Range("O22") = Date
If Target.Address = Range("C23").Address Then Range("O23") = Date
If Target.Address = Range("C24").Address Then Range("O24") = Date
If Target.Address = Range("C25").Address Then Range("O25") = Date
If Target.Address = Range("C27").Address Then Range("O27") = Date
If Target.Address = Range("C28").Address Then Range("O28") = Date
If Target.Address = Range("C29").Address Then Range("O29") = Date
If Target.Address = Range("C30").Address Then Range("O30") = Date
If Target.Address = Range("C32").Address Then Range("O32") = Date
If Target.Address = Range("C33").Address Then Range("O33") = Date
If Target.Address = Range("C34").Address Then Range("O34") = Date
If Target.Address = Range("C35").Address Then Range("O35") = Date
If Target.Address = Range("C36").Address Then Range("O36") = Date
If Target.Address = Range("C37").Address Then Range("O37") = Date
If Target.Address = Range("C39").Address Then Range("O39") = Date
If Target.Address = Range("C40").Address Then Range("O40") = Date
If Target.Address = Range("C41").Address Then Range("O41") = Date
If Target.Address = Range("C42").Address Then Range("O42") = Date
If Target.Address = Range("C43").Address Then Range("O43") = Date
If Target.Address = Range("C44").Address Then Range("O44") = Date
If Target.Address = Range("C45").Address Then Range("O45") = Date
If Target.Address = Range("C46").Address Then Range("O46") = Date
If Target.Address = Range("C50").Address Then Range("O50") = Date
If Target.Address = Range("C51").Address Then Range("O51") = Date
If Target.Address = Range("C52").Address Then Range("O52") = Date
If Target.Address = Range("C56").Address Then Range("O56") = Date
If Target.Address = Range("C57").Address Then Range("O57") = Date
If Target.Address = Range("C58").Address Then Range("O58") = Date
If Target.Address = Range("C59").Address Then Range("O59") = Date
If Target.Address = Range("C60").Address Then Range("O60") = Date
If Target.Address = Range("C61").Address Then Range("O61") = Date

End Sub

Nu zou ik dit graag ****** proof willen maken.
Het is de bedoeling dat wanneer ik de cel in kolom C invoer, hij dus de datum moet invullen in kolom O,
maar wanneer er al een waarde in kolom C staat, bijvoorbeeld 20, en ik vul dezelfde waarde in, dus 20, dan moet de datum in kolom 'O' NIET veranderen.

Is dit überhaupt mogelijk?
Het gaat mijn pet helaas te boven.
Bijgevoegd het bestand.
Bekijk bijlage Tankstanden_MD_test.xlsm
 
Met dit achter het werkblad:
Code:
Dim CelWaarde As Variant

Private Sub worksheet_change(ByVal Target As Range)
    If Intersect(Target, Range("C4:C61")) Is Nothing Then Exit Sub
    If Target.Value <> CelWaarde Then
        Range("O" & Target.Row) = Date
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("C4:C61")) Is Nothing Then Exit Sub
    CelWaarde = Target.Value
End Sub
 
hoi Edmoor,

Wanneer ik dit in thisworkbook plaats, dan veranderd er niets.
Als ik dan de waarde '80' opnieuw invoer, wederom '80' dus, veranderd de datum alsnog naar vandaag.
 
Het werkt hier prima in je eigen document dat je als voorbeeld plaatste.
 
Dient de macro de huidige te vervangen?
Of moet ik deze inderdaad achter ThisWorkbook plakken?
Iets doe ik dus blijkbaar fout :)
 
Wat ik plaatste is ter vervanging van wat je had.
Dat kan ook niet anders omdat de Sub namen gelijk zijn.

Ik plaatste dus 2 macro's en een globale variabele.
 
Dan doe ik iets verkeerd :(
Wanneer ik nu de eerste waard, '80', opnieuw invoer, dan veranderd de datum van 296-2016 naar 8-7-2016
 
Plaats je document dan nog eens zodat ik kan zien of je het juist hebt overgenomen.
 
Je hebt die globale variabele er niet in gezet.
 
Graag gedaan :)
 
Ik ben niet zo'n liefhebber van het SelectionChange event. Met alles binnen het Change event.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C4:C61")) Is Nothing And Target.Count = 1 Then
    With Application
        .EnableEvents = False
        nieuw = Target
        .Undo
        If Target <> nieuw Then
            Target = nieuw
            Target.Offset(, 12) = Date
        End If
        .EnableEvents = True
    End With
End If
End Sub
 
Het gebruik van Application.Undo is leuk gevonden :)
 
Ooit een keer gelezen/gekregen van HSV. Ere wie ere toekomt;)
 
Beste,

Nu heb ik de macro van Edmoor er in staan, maar ik zou graag een kleine toevoeging doen.
Wanneer ik een waarde invul (in een al ingevulde cel) en het verschil is maximaal 4 (groter of kleiner) dan moet ook de al ingevulde datum blijven staan.
Is de nieuwe waarde die ik invul dus wel meer dan 4 dan mag de datum veranderen.
Hopelijk weet iemand hier raad mee :)
 
Probeer het zo maar eens.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C4:C61")) Is Nothing And Target.Count = 1 Then
    With Application
        .EnableEvents = False
        nieuw = Target
        .Undo
        If Target <> nieuw Then
            If nieuw + 4 < Target Or nieuw - 4 > Target Then Target.Offset(, 12) = Date
            Target = nieuw
        End If
        .EnableEvents = True
    End With
End If
End Sub
 
Of:
Code:
 With Application             
             .EnableEvents = False
                nieuw = Target
             .Undo
      If abs(nieuw - target) > 4 Then Target.Offset(, 12) = Date
             Target = nieuw
             .EnableEvents = True
    End With
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan