Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel 2007] invoegen datum *

Pagina: 1
Acties:

  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Ik zit met het volgende. Ik heb een heel overzicht gemaakt, waarbij verschillende mensen data in velden invoegen. Op enig moment loop ik er doorheen en kan dan een veld "doorbelast" wijzigen van "NEE" naar "JA".

Ik zou dan graag willen, dat er automatisch de datum van vandaag achter het veld Doorbelast komt te staan.
Dat lukt prima; ik zoek in het veld waar de datum moet komen of het veld Doorbelast op JA staat en dan krijg ik de datum van vandaag er wel in (hetzij met =NU() hetzij met =VANDAAG() )
Probleem is alleen: als ik dan over een bepaalde tijd het sheet weer open, wordt het veld bij herrekenen uiteraard weer aangepast naar de datum van dat moment.

Samenvattend: ik wil dus dat op het moment dat ik het invul, de actuele datum wordt ingevoegd, terwijl als ik het sheet over 1 maand open, die datum dan vastgehouden wordt en de actuele datum weer wordt ingevoegd bij de andere velden waar ik van NEE, JA maak..

Leg ik het wat helder uit? Het lukt me maar niet...

  • racoon
  • Registratie: Februari 2002
  • Laatst online: 27-11 08:13

racoon

mooowwww

Welke office pakket en versie betreft dit?

24 flesjes in een krat 24 uur in een dag toeval??


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 15-10 13:46
Ik bedenk 2 oplossingen

* een actieknop maken die, als je erop klikt de huidige datum opvraagt en in een daarvoor bestemde cel wegschrijft.
* een procedure die bij openen van je sheet gestart wordt en controleert of een cel leeg is, en zo ja, daar de huidige datum in wegschrijft

Houdoe


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
racoon schreef op vrijdag 09 januari 2009 @ 08:45:
Welke office pakket en versie betreft dit?
Sorry, mijn fout. Ik gebruik Microsoft Office 2007.

  • racoon
  • Registratie: Februari 2002
  • Laatst online: 27-11 08:13

racoon

mooowwww

gyedema schreef op vrijdag 09 januari 2009 @ 11:01:
[...]

Sorry, mijn fout. Ik gebruik Microsoft Office 2007.
En is dit in excel of word?

24 flesjes in een krat 24 uur in een dag toeval??


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
racoon schreef op vrijdag 09 januari 2009 @ 11:03:
[...]


En is dit in excel of word?
Excel.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:43

Reptile209

- gers -

Dan kan je een macro aan het OnChange event van de sheet hangen die reageert op een wijziging in de Doorbelast-velden. Die macro kan Now() gebruiken voor het verkrijgen van de datum van dat moment, en hem als waarde (en dus niet als formule) in de juiste cel plaatsen. Dan verandert er dus niets meer bij het later opnieuw openen van de sheet.

Zo scherp als een voetbal!


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Reptile209 schreef op zaterdag 10 januari 2009 @ 09:55:
Dan kan je een macro aan het OnChange event van de sheet hangen die reageert op een wijziging in de Doorbelast-velden. Die macro kan Now() gebruiken voor het verkrijgen van de datum van dat moment, en hem als waarde (en dus niet als formule) in de juiste cel plaatsen. Dan verandert er dus niets meer bij het later opnieuw openen van de sheet.
Klinkt heel goed, maar zover reikt mijn excel kennis niet echt. Kun je me met een voorbeeld op weg helpen?

Verwijderd

gyedema schreef op maandag 12 januari 2009 @ 12:56:Klinkt heel goed, maar zover reikt mijn excel kennis niet echt. Kun je me met een voorbeeld op weg helpen?
ik had graag gehad dat je met de door de gebruikers geposte hints even opnieuw op zoek ging in het forum, want dat levert namelijk het volgende op :
[Excel] automatisch datum aanmaken bij invoeren

  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Verwijderd schreef op maandag 12 januari 2009 @ 15:15:
[...]
ik had graag gehad dat je met de door de gebruikers geposte hints even opnieuw op zoek ging in het forum, want dat levert namelijk het volgende op :
[Excel] automatisch datum aanmaken bij invoeren
Je hebt gelijk. Ik heb wel gezocht, maar blijkbaar onvoldoende. Ik duik in dit topic!! En bedankt overigens!

  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Het topic heb ik eens helemaal doorgewroet. Nu begrijp ik de code grotendeels en kom daar wel mee uit de voeten. Waar ik minder goed mee ben, is wat nu precies wáár moet komen. Wanneer zet je nu iets in een macro, wanneer in een module, wanneer in worksheet (de laatste twee in de VBA editor). Het verschil tussen macro(recorder) en VBA editor is mij nog niet helemaal duidelijk.

Om even te quoten:
VBA is de macrotaal van office, dus een macro is een publieke vba (sub)routine(end sub). Strikt genomen hoort eventafhandelingcode in het werkblad, overige functies in een module. Maar gemakshalve pleurt men veelal alle code in het werkbladdeel
Dus als ik nu inderdaad in mijn spreadsheet op gezette momenten een cel wijzig van Doorbelast: NEE naar Doorbelast: JA, dan zou ik willen dat dan daarachter de huidige datum komt te staan, die dus volgende week, als ik opnieuw ga doorbelasten, uiteraard niet meer wijzigt. En dat dan de velden van de bedragen die ik DAN doorbelast, uiteraard ook weer met de vigerende datum wordt gevuld.

Komt die vraag: wat vul ik dan waar in? Wat via macro, wat via VBA editor? En dat laatste: dan in module, of werkblad...??

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

De macrorecorder genereert VBA code, dus als je een macro bekijkt zit je gewoon in de VBA editor te werken. Er is géén verschil.

Omdat je wilt reageren op het wijzigen van een cel op het werkblad plaats je de code in een subroutine in het codeblok van het werkblad.
code:
1
Sub Worksheet_Change(byval Target as Range)


Een lege subroutine met de correcte syntax wordt automatisch aangemaakt als je in het VBE editor het werkblad selecteert, en dan boven in het codevenster de dropboxjes Worksheet kiest en rechts ervan Change()

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Het gaat nog niet zoals ik wil. Ik voer deze code in in de VBA editor:

code:
1
2
3
4
5
6
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B37")) Is Nothing Then
    ActiveSheet.Range("A37").Select
    Selection = "=Vandaag()"
End If
End Sub


Daarna druk ik op F5, maar dan opent het macro window en die wil een nieuwe macro maken. Die geef ik een naam, maar daarna opent een nieuw scherm waar enkel een sub/endsub instaat en uitvoering gebeurt uiteraard niets. Wat doe ik nou fout? (wat er dus moet gebeuren is dat als B37 leeg is, er geen datum komt, en als ie gevuld is, er wél de huidige datum komt)

[ Voor 11% gewijzigd door GurbY{nl} op 15-01-2009 11:29 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dit is geen macro maar een 'eventhandler'ofte wel een een gebeurtenis-afhandelaar. De code loopt bij iedere wijziging in het werkblad en doet het volgende:

1: Code aanroep, target is de cel die gewijzigd is
2: Check of het cel B37 is die gewijzigd is
3+4: Zo ja schrijf: in A37 dë tekst "=vandaag()", wat waarschijnlijk een foutmelding in de cel oplevert.

Hoe het wel moet: Lustucru in "[Excel 2007] Automatisch datum invoegen*"

code:
1
2
3
4
5
6
'Pseudo
Sub WorksheetChange(Target)
 Is target een cel binnen de kolom doorbelast?
       Heeft target de waarde 'ja'?
            Schrijf de huidige systeemdatum in het sheet
End

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Ik weet het, het ligt aan mij.. maar ik voer jouw code in, geef dan de macro een naam (dat wordt gevraagd, daar kom ik niet omheen). Vervolgens druk ik op F5, maar er veranderd helemaal niets in geen enkele cel...

code:
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert in B60 of B61
If Not (Intersect(Target, ActiveSheet.[B60:B61] Is Nothing) Then
'verander de cel op dezelfde regel in kolom 'j' in de datum van vandaag
         ActiveSheet.Cells(Target.Row, 10) = Now()
End If
End Sub


Maakt het iets uit dat ik Excel 2007 gebruik..??

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dit is geen macro maar een 'eventhandler'ofte wel een een gebeurtenis-afhandelaar. De code loopt bij iedere wijziging in het werkblad en doet het volgende:
Vervolgens druk ik op F5, maar er veranderd helemaal niets in geen enkele cel...
Nergens voor nodig om op F5 te drukken. Je moet ervoor zorgen dat het event gebeurt waar de eventhandler op reageert, of te wel, wijzig eens wat in B60. 8)7

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Lustucru schreef op donderdag 15 januari 2009 @ 13:42:
[...]


[...]


Nergens voor nodig om op F5 te drukken. Je moet ervoor zorgen dat het event gebeurt waar de eventhandler op reageert, of te wel, wijzig eens wat in B60. 8)7
En dat heb ik uiteraard gedaan... ik pas wat aan, voeg wat toe, haal wat weg, maar alles wat er gebeurd, vindt plaats in B60 en nergens anders...
Kortom: er gebeurt dus helemaal niks..

Als ik in VBA op compileren druk overigens, krijg ik met bovenstaande code fouten gemeld.

[ Voor 8% gewijzigd door GurbY{nl} op 15-01-2009 13:53 ]


Verwijderd

Heb je de code wel onder het werkblad gezet waarin je wijzigingen aanbrengt (en niet in een aparte module - kun je links in het VBA-scherm controleren (boomstructuur met werkbladen, 'ThisWorkbook' en modules).

  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Verwijderd schreef op donderdag 15 januari 2009 @ 13:53:
Heb je de code wel onder het werkblad gezet waarin je wijzigingen aanbrengt (en niet in een aparte module - kun je links in het VBA-scherm controleren (boomstructuur met werkbladen, 'ThisWorkbook' en modules).
Ja staat in "Blad 1"

Verwijderd

Ik vind deze notatie ook wel opmerkelijk:

code:
1
ActiveSheet.[B60:B61]


Komt me niet bekend voor - ik zou dit proberen:

code:
1
Range("B60:B61")


Werkt het dan wel?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

gyedema schreef op donderdag 15 januari 2009 @ 13:45:
Als ik in VBA op compileren druk overigens, krijg ik met bovenstaande code fouten gemeld.
Lijkt me tamelijk relevant.
Wat zou je ervan vinden om dan te posten welke fouten dat zijn?
In het eerdere topic wordt ook gesproken over beveiligingsinstellingen. Net zo handig om even te vermelden hoe die staan?

o btw, je mist een haakje

[ Voor 6% gewijzigd door Lustucru op 15-01-2009 15:26 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Lustucru schreef op donderdag 15 januari 2009 @ 15:22:
[...]

Lijkt me tamelijk relevant.
Wat zou je ervan vinden om dan te posten welke fouten dat zijn?
In het eerdere topic wordt ook gesproken over beveiligingsinstellingen. Net zo handig om even te vermelden hoe die staan?

o btw, je mist een haakje
Hij geeft aan: Compileerfout: typen komen niet overeen. Ik heb de range aangepast; de code is dan als volgt:
code:
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert in A11-I39
If Not (Intersect(Target, ActiveSheet.[F10:F60] Is Nothing)) Then
'verander de cel op dezelfde regel in kolom 'j' in de datum van vandaag
         ActiveSheet.Cells(Target.Row, -1) = Now()
End If
End Sub

Beveiligingsinstellingen heb ik als volgt:
- Alle macro's inschakelen
- toegang tot het objectmodel vertrouwen.

Verwijderd

code:
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert in A11-I39
If Not Intersect(Target, ActiveSheet.[F10:F60]) Is Nothing Then
'verander de cel op dezelfde regel in kolom 'j' in de datum van vandaag
         ActiveSheet.Cells(Target.Row, 1) = Now()
End If
End Sub


Er stonden wat haakjes verkeerd, en een negatief celadres levert per definitie een fout op... ;)

  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Verwijderd schreef op donderdag 15 januari 2009 @ 16:21:
code:
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert in A11-I39
If Not Intersect(Target, ActiveSheet.[F10:F60]) Is Nothing Then
'verander de volgende cel op dezelfde regel in de datum van vandaag
         ActiveSheet.Cells(Target.Row, 1) = Now()
End If
End Sub


Er stonden wat haakjes verkeerd, en een negatief celadres levert per definitie een fout op... ;)
Dit werkt! Gekke is: ik heb het met pos. celadres gedaan; deze laatste was typo van mezelf hier zie ik.
Nu reageert ie dus op alles wat veranderd in die celrange. Maar kan ik dan ook op een absolute inhoud controleren? Dus als er wat dan ook staat, maakt niet uit, maar als er bv. JA in komt te staan dat er wél een datum geplaatst wordt?
Ik probeer dat wat te simplificeren:
code:
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
'als er een willekeurige cel verandert range
If ActiveSheet.Cells(Target.Row, 6) <> "Nee" Then
'verander de cel op dezelfde regel in kolom 'j' in de datum van vandaag
         ActiveSheet.Cells(Target.Row, 7) = Now()
End If
End Sub

Dan krijg ik Methode Cells van object_Worksheet is mislukt.

[ Voor 18% gewijzigd door GurbY{nl} op 15-01-2009 16:45 ]


Verwijderd

Gek - bij mij werkt deze code gewoon.

  • GurbY{nl}
  • Registratie: Maart 2004
  • Laatst online: 21:26
Verwijderd schreef op donderdag 15 januari 2009 @ 16:57:
Gek - bij mij werkt deze code gewoon.
En bij mij inmiddels ook.... de foutmelding lijkt te komen van de beveiliging van het sheet. Aangezien ik niet wilde dat de range met de hand werd aangepast, had ik die cellen beveiligd. Waarna dus die foutmelding. Met de beveiliging eraf gaat alles zoals ik het wil.....!!

Verwijderd

...en zelfs het ontveiligen en weer beveiligen van het werkblad zou je kunnen automatiseren middels een macro.
Zorg er dan wel voor dat de macrocode wachtwoord-beveiligd is; anders zouden slimmeriken het wachtwoord voor het ontveiligen van het werkblad zo kunnen achterhalen ;)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Of uiteraard de beveiliging beperken tot de GUI, dan hoef je ook geen wachtwoorden in je code op te nemen. :)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1