Waarmee ik nog geen antwoord gekregen heb op mijn vraag...
Ongeduldig...

. Maar ik moest het voorbeeld uit een db op het werk halen, en dat kon pas vandaag. Dit is hoe ik het doe:
Ik heb een apart popup formulier voor de memovelden, waarop een groot tekst staat. En een knop <Opslaan>. Dat formulier wordt vanuit verschillende memovelden bij mij gebruikt, daarom is het geheel generiek gemaakt met een functie die in een losse module staat. Als het veld nog leeg is krijg je de vraag of je een nieuwe tekst wilt toevoegen (zie je zo wel), anders wordt het formulier geopend met de huidige tekst. De aanroep van die module ziet er zo uit:
Code:
=NotitieBewerken([reden_afsluiting_toelichting])
En die code wordt gestart bij de gebeurtenis <Bij klikken>. Daar staat bovenstaande opdracht dus letterlijk in. In jouw geval zul je de naam van het veld (tussen de haken) moeten aanpassen.
In mijn geval wordt het veld [reden_afsluiting_toelichting] dus ingelezen in het formulier fNotitie. Dat formulier is dus van het type Pop-Up, bevat één tekstvak (<Notitie>) en een knop om te sluiten. Dat formulier wordt geopend met deze functie:
Code:
Function NotitieBewerken(ctl As Control)
Dim bC As Integer
On Error GoTo Hell
Application.TempVars.Remove "varNotitie"
If ctl.Text & "" = vbNullString Then
bC = MsgBox("Wil je nieuwe tekst invoegen?", vbYesNo, "Nieuwe notitie")
If bC = vbYes Then
Application.TempVars.Add "varNotitie", ""
DoCmd.OpenForm "fNotitie", WindowMode:=acDialog, OpenArgs:=TempVars("varNotitie")
Else
Exit Function
End If
Else
Application.TempVars.Add "varNotitie", ctl.Value
DoCmd.OpenForm "fNotitie", WindowMode:=acDialog
End If
ctl.Value = TempVars("varNotitie") & ""
Hell:
End Function
In de functie wordt een Tempvar aangemaakt (varNotitie) en die wordt dan op het notitieformulier weer uitgelezen. Hier zit dus ook de check in of het tekstveld leeg is of niet; bij abuis klikken in het (lege) veld wil je natuurlijk niet dat er wat wordt weggeschreven.
Op het formulier krijg je dan deze code die wordt uitgevoerd bij het laden van het formulier:
Code:
Private Sub Form_Load()
Dim tmpD As Variant
tmpD = Now
If Len(TempVars("varNotitie")) > 0 Then
With Me.notitie
.SetFocus
.Value = tmpD & vbCrLf & vbCrLf & TempVars("varNotitie")
.SelStart = Len(tmpD & vbCrLf)
End With
End If
If Len(TempVars("varNotitie")) > 2000 Then
Me.notitie.ScrollBars = 2
Me.Repaint
Else
Me.notitie.ScrollBars = 0
End If
End Sub
Deze code zet eerst de datum+tijd in een variabele, en vervolgens wordt deze variabele in het tekstvak gezet samen met de bestaande tekst, die uit de Tempvar komt. In de code zitten twee <Enters>, en de cursor wordt na de eerste gezet, dus op de nieuwe lege regel. Volgens mij is dat wat je wilt. Er zit verder geen check in of je ook daadwerkelijk wat intypt; ik kan mij voorstellen dat je, als je nikst typt om wat voor reden dan ook, dat je eigenlijk de waarde niet wilt opslaan. Maar die code zit er nu dus niet in.
Bij het sluiten van het formulier wordt de Tempvar gevuld met de nieuwe inhoud, zodat die in het formulierveld kan worden ingevuld.
Code:
Private Sub cmdSluiten_Click()
TempVars("varNotitie").Value = Me.notitie.Value
DoCmd.Close acForm, Me.Form.Name
End Sub
Dat bijwerken gebeurt dus in de laatste regel van de functie:
Code:
ctl.Value = TempVars("varNotitie") & ""
Kijk maar eens of je dit kan bouwen.