Wat bedoel je hiermee precies? Als je een nieuw record hebt, staan daar nog geen gegevens in
De knop die je hebt, zoekt een bestellingsrecord op, en laat dan de daarin aanwezige gegevens zien.
Ik vermoed, dat je een nieuw record wilt maken vanuit het formulier Offerte, en gegevens mee wilt nemen naar Bestelling. Dat kun je doen met het OpenArgs element van het fomulier.
Hoe werkt het?
Om te beginnen: maak een apart formulier, kan uiteraard een kopie zijn van het huidige formulier, en zet daar de eigenschappen van op <Eigenschappen>, <Gegevens>,<Gegevensinvoer>=Ja. Hiermee wordt dit formulier altijd gebruikt om nieuwe records te maken, en dat is uiteraard wat je wilt.
Er zijn twee dingen die je moet regelen als je gegevens wilt meenemen van formulierA naar een nieuw record op formulierB. Ten eerste: je moet een string vastleggen in een variabele, die je meegeeft aan het commando waarmee je formulierB opent. Een beetje vergelijkbaar met het commando
DoCmd.OpenForm stDocName, , , , , , stLinkCriteria
In de string stLinkCriteria leg je de waarden uit de formuliervelden vast die je mee wilt nemen naar het nieuwe record op formulierB, waarbij je een string maakt met een specifiek scheidingsteken.
Voorbeeldje:
Ik heb de velden [KlantID], [OfferteID]; [OfferteDatum] die in het nieuwe record moeten komen.
De string wordt dan:
Code:
stLinkCriteria=Me.[KlantID].Value & "|" & Me.[OfferteID].Value & "|" & Me.[OfferteDatum].Value
De opdracht om het formulier te openen luidt nu:
Code:
DoCmd.OpenForm stDocName, , , , , , stLinkCriteria
In Formulier moeten de gegevens uiteraard weer worden 'ontleed', en op het formulier gezet. Dat doe je bij het OnLoad event van het formulier. Dat ziet er ongeveer zo uit:
Code:
Private Sub Form_Load()
'------------------------------------------------------------------------------------------------
'Inlezen van de variabelen
'------------------------------------------------------------------------------------------------
If Not IsNull(Me.OpenArgs) Then
Dim strLijst() As String
On Error Resume Next
strLijst = Split(Me.OpenArgs, "|", -1)
Me.[KlantID]= strLijst(0)
Me.OfferteID= strLijst(1)
Me.OfferteDatum= strLijst(2)
End If
De bedoeling is als volgt: je kunt aan een formulier maar één variabele meegeven, dus als je meer velden wilt vullen, zul je een variabele moeten maken waar alle variabelen inzitten. Dat hebben we gedaan door tussen alle variabelen het teken | te zetten.
Op het tweede formulier moet de variabele gesplitst worden; dat doe je met de opdracht Split. De regel strLijst = Split(Me.OpenArgs, "|", -1) wijst alle elementen in de OpenArgs variabele toe aan een matrix variabele, op basis van het scheidingsteken. In het voorbeeld is de waarde van de eerste variabele geplaatst in strLijst(0), de tweede in strLijst(1) en zo verder.
Als laatste stap zet je de variabelen op het formulier, met bijv. Me.KlantID=strLijst(0).
Volgens mij is dit wat je ongeveer wilt...
Michel