Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Logboek aanmaken

39 views
Skip to first unread message

Dirk

unread,
Dec 3, 2001, 12:42:52 PM12/3/01
to
Hallo,

Kan iemand me helpen met volgend probleem : ik heb een
kolom waar ik waarde wijzig en/of bijvoeg. Telkens dat dit
gebeurt zou in de cel naast de gewijzigde cel de datum +
tijd moeten komen wanneer die wijziging gebeurde ( dus een
soort logboek )
De formule if(A2 <> "";now();"") lost niets op want bij de
wijziging van cell A2 , worden ook alle andere reeds
bestaande datums aangepast .
De oplossing die me geboden werd :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Target.Offset(0, 1) = Date
End if
End Sub
werkt ook niet want het is voldoende dat ik even in een
cel ga staan om de datum reeds te voorschijn doen komen in
de aanpalende cell, dus niet enkel wij invoer of wijziging

Dank voor de hulp alvast

Dirk

Roland Greve

unread,
Dec 3, 2001, 1:21:38 PM12/3/01
to
Hallo Dirk,

Om precies te zijn berekent het Worksheet_Change-Event het werbblad
opnieuw als je in een cel gaat staan en met ENTER afsluit.

Mocht je geen veranderingen in de cel hebben voorgenomen, kun je met
ESCAPE of met het rode kruisje naast de werkbalk afsluiten. Dit voorkomt
de herberekening.

Groet,
Roland

dirk

unread,
Dec 4, 2001, 1:06:21 PM12/4/01
to
Hallo Roland,

dank je voor je hulp , maar het change event werkte bij mij zelfs als ik
met het pijltje van de ene cel naar de ander ging of met de muis in een cel
klikte, dus niet enkel bij een wijziging( of toevoeging) wat wel de
uiteinndelijke bedoeling was.
Dus ik heb nog steeds geen oplossing voor wat ik dacht simpel op te lossen.
In MsAccess was ik er al lang uit geweest, maar mijn VBA kennis van Excell
is te beperkt
Dus heb je nog een suggestie

Dirk

"Roland Greve" <rolan...@yahoo.com> schreef in bericht
news:3C0BC2B...@yahoo.com...

Desart Eric

unread,
Dec 4, 2001, 7:51:33 PM12/4/01
to
Dirk

Vondt je mijn oplossing niet goed?
Volgens mij doet die perfect wat je wil.
Een beetje verder kijken bij je vorige vraag.

Eric


"dirk" <dirk....@pandora.be> schreef in bericht
news:xg8P7.71639$XM4....@afrodite.telenet-ops.be...

Desart Eric

unread,
Dec 5, 2001, 6:16:52 PM12/5/01
to
Dag Dirk

Bedankt voor je privé mailtje. Maar ik heb de indruk dat mijn vorig berichtje
niet op jouw server verscheen.
Ik verzeker je ik heb het geprobeerd en het werkt zoals ik begrijp dat jij
verwacht.
Ik herneem daarom even het vroegere berichtje, met wat extra uitleg.
Jouw probleem is dat de NU() formule wel goed werkt maar VOLATILE is (ken het
Nederlandse woord hier niet voor, werk in Engelstalige versies en ben eigenlijk
nog altijd Macro4 programmeur, dus ken VBA niet zo goed).
VOLATILE wil zeggen dat een functie (formule) telkens automatisch herberekend
als het blad herberekend wordt.
Zo kent Exel een aantal functies die volatile zijn. De meeste zijn dit niet.
Bij een aantal valt dit op zoals NU() en RAND() en RANDBETWEEN() (maar dan voor
jou de Nederlandstalige versies hiervan), voor andere valt dit niet op en kunnen
herberekenen, zonder dat je dit ziet omdat alle waarden gelijk blijven. Het is
vaak best om zo'n volatile functies te mijden, als het mogelijk is natuurlijk,
omdat deze er voor zorgen dat ook alle afhankelijke formules constant
herberekend worden zonder dat dit nodig is.
Met merkt dat soms aan zware rekenbladen waar, telkens men een getal, zelfs in
een lege cell zet, deze nieuwe waarde precies blijft plakken, het invoeren vlot
niet meer. De reden hiervoor is dat deze invoer er voor zorgt dat de volatile
functies, met alles wat hier van afhankelijk is telkens onnodig herberekend
worden.
Ik geef hier een lijste van de Engelstalige volatile functies (weet niet zeker
of dit volledig is), en je moet maar het Nederlandse alternatief hiervoor
bedenken, of Ron kan deze misschien opgeven in de groep, vanuit zijn artikel.

The following is from MS Knowledge Base article Q81856 and article Q248179:
In Microsoft Excel, when you use the:
AREAS(), INDEX(), OFFSET(), CELL(), INDIRECT(), ROWS(), COLUMNS(), NOW(),
RAND(), or TODAY()

INDEX(): became partly non-volatile in MS Excel 97 but not for all
cuircumstances, and still should be seen as volatile.
RANDBETWEEN(): not mentioned in MS Knowledge Base article Q81856 and article
Q248179 but also volatile.
Some of Excel's functions are obviously volatile: RAND(), RANDBETWEEN(), NOW(),
TODAY()
Others are less obviously volatile: AREAS(), INDEX() OFFSET(), CELL(),
INDIRECT(), ROWS(), COLUMNS()
Note: RANDBETWEEN() is part of the .XLA Analysis Toolpak. The name differs in
any language version of MS Excel.

Nu jouw probleem is de NU() functie (zie de NOW() functie in het lijstje)

Als je hier nu een UDF (User Defined Function) van maakt wordt in feite de NU()
functie automatisch non-volatile. Dit wil dan zeggen dat zij alleen herberekent
als een van haar argumenten wijzigt. Maar de NU() functie heeft geen
argumenten, wat wil zeggen dat bij invoer als non-volatile functie de datum en
tijd krijgt van het ogenblik dat de formule ingevoerd werd en verder niet meer
wijzigt (behoudens speciale uitzonderingen). Dit is vervelend en onbruikbaar.
Je kan dit oplossen door aan de functie een argument mee te geven, waar zij in
feite niets rekentechnisch mee doet, maar die wel acteert als een trigger voor
de functie om te herberekenen.
Vandaar dat ik dit argument ook trigger noem.
Voordeel is dat je dit trigger argument nu aan een cel kan koppelen naar keuze.
In jouw geval de cel links van waar de datum moet komen. Maar je kan die
formule eigenlijk overal op je blad zetten en koppelen aan gelijk welke cel.
Je kan er een extraatje in steken, zodat zolang je trigger cell of leeg of geen
getal bevat, de formule een lege textwaarde teruggeeft (de twee dubbelle
aanhalingstekens). De formule zal nu alleen een datum en tijd geven vanaf dat:
1) een getal aanwezig is en 2) telkens dit getal gewijzigd wordt door een ander
getal.
Je kan deze techniek (eventueel aangepast aan de omstandigheden) toepassen op
alle volatile functies zoals de random functies enz.

Uiteindelijk is dit veel uitleg voor een simpele functie:

In een module of persnlk.xls copieren. Beter is natuurlijk .xla add-in van
maken.

Function Data(Trigger)
If IsNumeric(Trigger) And Not IsEmpty(Trigger) Then
Data = Now
Else
Data = ""
End If
End Function

I.p.v. nu de formule NU() te gebruiken, gebruik je gewoon de formule Data(A1)
(vb in B1) waar A1 hier de cel is waar je het getal wil plaatsen.
Zolang A1 leeg is blijft B1 ook (schijnbaar) leeg.
Vanaf A1 een getal krijgt, verschijnt de datum in B1
Vanaf dat je een nieuw getal in A1 zet verschijnt de nieuwe datum.

Het werkt, ik heb het geprobeerd, en zowel opslaan, als sluiten en openen van
het document doet de datum niet wijzigen.

ER IS ECHTER EEN PROBLEEM
Misschien kunnen de VBAers dit oplossen
Een forced recalculation met Control+Alt+F9 triggered de functie tot
herberekenen. Dit is niet abnormaal want dit doet alles herberekenen, zelfs
meer dan bij het openen van een document (wat je hier kan zien) F9 of Shift F9,
sluiten, opslaan en heropenen niet.
Mogelijk Dirk heb je die combinatie nog nooit gebruikt: Control+Alt+F9 maar het
blijft riskant.
Als iemand je wil plagen en dit weet, staan plots al je datums gelijk.
Misschien dat de VBAers dit via Caller of een event kunnen onderscheppen.
Ik heb geprobeerd in Macro4, maar daar gaat het niet (was ook veel beperkter op
dat terrein).

Op zich boeiend om te kijken of Control+Alt+F9 kan geïndentificeerd worden. Zou
ik ook graag weten.

Groetjes

Eric

Roland

unread,
Dec 6, 2001, 7:07:46 AM12/6/01
to
Hallo Eric en Dirk,

Met de OnKey-methode kun je CTRL+ALT+F9 deaktiveren.

Zet deze code in de ThisWorkbook-module van het betreffende bestand:

'Deaktiveren
Private Sub Workbook_Open()
Application.OnKey "%^{F9}", ""
End Sub

'Weer aktiveren
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "%^{F9}"
End Sub

Groet,
Roland


"Desart Eric" <af...@belgacom.net> wrote in message news:<uJVyWYefBHA.1580@tkmsftngp04>...

Desart Eric

unread,
Dec 6, 2001, 10:44:09 AM12/6/01
to
Dag Roland en Dirk

Inderdaad een oplossing, had ik niet direct aan gedacht, maar ken de ON-Key
methode (dom van mij).
Ik was meer aan het denken, aan iets in de stijl van de Caller of zo, waardoor
dit deel kon blijven uitmaken van de UDF (check en stop als......). Vaak kan je
de caller van de functie identificeren, maar in dit geval lijkt het of
Cntr+Alt+F9 gewoon de constantes terug re-entered (maar een gok).
Maar waarschijnlijk kan dit niet.

Dirk, met de combinatie van Roland's en mijn voorstel moet je in elk geval
verder kunnen nu.

Groetjes

Eric

"Roland" <rola...@my-deja.com> schreef in bericht
news:28fb26fb.01120...@posting.google.com...

dirk

unread,
Dec 7, 2001, 12:00:51 PM12/7/01
to

Eric,

dank voor je hulp, het was heel begrijpelijk en het werkt zoals ik het wilde
behalve het doet dit niet als ik een cell inhoud wijzig dus van een 1 bv een
2 maken. want uw (functie vraagt alleen dat de naast liggende cell numeriek
is of niet leeg.)

Maar ik ben al een hele stap verder

Dirk


Desart Eric

unread,
Dec 7, 2001, 3:32:45 PM12/7/01
to
Hier klopt iets niet Dirk,

Heb je het echt al geprobeerd?
Het invoeren van een getal doet hetvolgende:
1) dwingt de functie tot herrekenen
2) functie checked of argument van jou een getal is of niet en of de cell leeg
is.
a) als argument een getal is: geeft nieuwe datum/tijd
b) als iets anders: geeft lege cell (empty text waarde).
Was dat niet wat je wou?
......(functie vraagt alleen dat de naast liggende cell numeriek
| is of niet leeg.)......

Functie checked of argument gekoppeld aan de cell die jij zelf bepaald een getal
is en doet dit automatisch weer en weer elke keer je dit getal veranderd.

Anders gebeurt er nog iets anders bij jou.

Eric


"dirk" <dirk....@pandora.be> schreef in bericht

news:7B6Q7.2065$va....@afrodite.telenet-ops.be...

dirk

unread,
Dec 10, 2001, 11:34:41 AM12/10/01
to
Dank Eric en Roland,

Zeker ook voor je uitleg
Het werkt

Dirk

"Desart Eric" <af...@belgacom.net> schreef in bericht
news:#EwO371fBHA.2028@tkmsftngp05...

0 new messages