• 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.

Oorspronkelijke formule terugzetten

Status
Niet open voor verdere reacties.

adile

Gebruiker
Lid geworden
2 mrt 2014
Berichten
202
Goedemiddag,

Ik heb een bestand waarin in kolom A een dag invul. als ik deze invul komt in kolom C de tijd van invullen te staan op basis van volgende code:
Code:
=ALS(ISLEEG(A5);"";NU())
.

Wanneer ik in A1 wat invul komt de de tijd van invullen te staan in cel C1, echter wanneer ik in Cel A2 iets invul veranderd ook de tijd van C1 naar de tijd van nu. zo gebeurde dat in de hele kolom.

dit heb ik opgelost doorde volgende VBA code.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo einde

If Target.Column = 1 Then
    Target.Offset(, 2).Value = IIf(Target.Offset(, 2) = vbNullString, _
        Date, Target.Offset(, 2))

        
End If
einde:
End Sub

Echter als ik de waarde uit cel A1 weer wis dan blijft de tijd staan waarop ik de waarde in Cel A1 had ingevoerd.

Nu wil ik dat wanneer ik cel A wis dat de oorspronkelijke formule weer terug in de cel komt te staan en deze weer blanco wordt.
ik denk dat ik er iets van ELSE tussen moet plaatsen, maar wat moet in invullen om de oorspronkelijke formule terug te krijgen.

voor C5 is dit dus:

Code:
=ALS(ISLEEG(A5);"";NU())
.

en voor C6

Code:
=ALS(ISLEEG(A6);"";NU())
.

enzovoorts.

alvast bedankt

Adile
 
Ik vind het een beetje warrig verhaal. Bedoel je zoiets?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
    If .Column = 1 And .Count = 1 Then
        If .Value = vbNullString Then .Offset(, 2).Value = vbNullString Else .Offset(, 2) = Now
    End If
End With
End Sub
 
Iets robuuster.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column = 1 Then
    If .Count = 1 Then
      If .Value > 0 Then
        .Offset(, 2) = Now
      Else
       .Offset(, 2).ClearContents
      End If
    Else
       .Offset(, 2).ClearContents
    End If
  End If
 End With
Application.EnableEvents = True
End Sub
 
Goedenavond,

@ VenA

hoewel het een warrig verhaal was, heb je toch voor elkaar gekregen wat ik wilde. :)
hartelijk dank daarvoor.

alleen bleven bij jouw formule soms de tijden staan, en dit was niet het geval bij de formule van HSV.

@HSV jij ook dank voor je hulp.

Ik wil de code ook toepassen op kolommen K,L,M.

als ik iets aanpas in K komt de datum in L en de tijd in M te staan.

zelf had ik dat dus door onderstaande code,

maar hoe bouw ik dat erbij in jouw code?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo einde

If Target.Column = 1 Then
    Target.Offset(, 2).Value = IIf(Target.Offset(, 2) = vbNullString, _
        Date, Target.Offset(, 2))
End If

If Target.Column = 11 Then
    Target.Offset(, 1).Value = IIf(Target.Offset(, 1) = vbNullString, _
        Date, Target.Offset(, 1))
End If

If Target.Column = 11 Then
    Target.Offset(, 2).Value = IIf(Target.Offset(, 2) = vbNullString, _
        Date, Target.Offset(, 2))
        
End If
einde:
End Sub

Alvast hartelijk dank voor jullie hulp.

Adile
 
Altijd handig als je geen gebruik maakt vaan de aangereikte oplossingen. Verder geef je niet aan waar de tijd moet komen als er iets in kolom K,L of M ingevuld wordt.

In de aangepaste code van HSV worden de tijden drie cellen verschoven. Als dit anders moet worden dan zal je dat met IF moet ondervangen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A:A, K:M")) Is Nothing Then
    With Target
        If .Count = 1 Then
            If .Value > 0 Then
                .Offset(, 3) = Now
            Else
                .Offset(, 3).ClearContents
            End If
        Else
            .Offset(, 3).ClearContents
        End If
    End With
End If
Application.EnableEvents = True
End Sub
 
goedemiddag VenA,

ik heb een bestand toegevoegd met de rijen zoals ik ze daadwerkelijk heb staan.
Ik heb jouw aangepaste formule van HSV gebruikt, alleen de range en de 3 cellen verschuiving naar 2 cellen.
de formule werkt voor de kolommen C en M perfect,
alleen hoe kan ik hem zo ombouwen dat hij hetzelfde voor kolom L ook doet, dat is wat lastiger denk ik.

Adile
 

Bijlagen

Altijd handig als je geen gebruik maakt vaan de aangereikte oplossingen.
niet gelezen?

Vul in het voorbeeldbestand ook even in wat je wil bereiken want volgens mij klopt het niet met de vraagstelling.

Edit.
Volgens mij haal je datum en tijd ook een beetje door elkaar. Je zal wel dit bedoelen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A:A, K:K")) Is Nothing Then
    With Target
        If .Count = 1 Then
            If .Value > 0 Then
                If .Column = 1 Then .Offset(, 2) = Time Else .Offset(, 1).Resize(1, 2) = Array(Date, Time)
            Else
                If .Column = 1 Then .Offset(, 2).ClearContents Else .Offset(, 1).Resize(1, 2).ClearContents
            End If
        Else
            If .Column = 1 Then .Offset(, 2).ClearContents Else .Offset(, 1).Resize(1, 2).ClearContents
        End If
    End With
End If
Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
ik had het wel gelezen, maar ik wist niet hoe ik die if erin verwerken moest.
ik heb je laatste code getest en die werkt helemaal top.:)
alle problemen zijn verholpen,

ik wil je daar hartelijk voor danken.:)
ik zal hem op opgelost zetten.

gr adile
 
Ik zie nu dat ik #4 niet goed gelezen had. Waren we 2 reacties sneller klaar geweest:d Maar mooi dat het opgelost is.
 
VenA

ik ben ietsje te voorbarig geweest. :o
er moet toch een kleine aanpassing komen voor kolommen L en M.
als ik bv cellen K5 t/m K9 invul en ze daarna wis dan worden cellen L5 en M5 leeggemaakt, maar de rest niet.

bij Kolommen A en C werkt dit wel zoals het moet.

Adile
 

Bijlagen

Haal de 1 uit de functie 'resize'.

De schrijfwijze die @VenA er op nahoudt is ook zeer ongebruikelijk en onoverzichtelijk.
Het lijkt mooi kort, maar erg verwarrend.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("A:A, K:K")) Is Nothing Then
    With Target
         If .Count = 1 Then
             If .Value > 0 Then
                If .Column = 1 Then
                   .Offset(, 2) = Time
                 Else
                    .Offset(, 1).Resize(1, 2) = Array(Date, Time)
              End If
            Else
                If .Column = 1 Then
                  .Offset(, 2).ClearContents
                Else
                .Offset(, 1).Resize(, 2).ClearContents
              End If
            End If
        Else
            If .Column = 1 Then
                 .Offset(, 2).ClearContents
               Else
                 .Offset(, 1).Resize(, 2).ClearContents
             End If
        End If
    End With
End If
Application.EnableEvents = True
End Sub
 
Al een tijdje toch? (zie mijn profiel).
Mijn oudste dochter had wel eerst wat klussen. :d
 
Harry, en VenA,

Hoe het de schrijfwijze ook is, voor mij is het toch een heel ontcijfer werk ;)
Maar met de laatste formule werkt alles ECHT goed na een uitgebreide test :)

nogmaals mijn dank voor alles.

Adile
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan