Ik bedenk me ineens dat je een wat ongelukkige manier van uitdrukken hebt gebruikt, en dat je helemaal geen
subformulier wilt openen, maar een nieuw formulier dat is gebaseerd op een projectID uit je projecten formulier. In dat geval valt er uiteraard weinig te koppelen of te filteren zoals je nu probeert, want als je een project hebt zonder detailrecords, valt dat formulier niet te openen met de betreffende selectie.
Daarnaast heb je bij het aanmaken van een nieuw detailrecord op dat tweede formulier niet het voordeel dat je met een subformulier wél hebt, en dat is dat het koppelveld automatisch al wordt ingevuld. Kortom: om (mij nog onduidelijke redenen) wil je een hele simpele oplossing (subformulier op hoofdformulier) vervangen door een hele ingewikkelde constructie die ook nog eens foutgevoelig is. Ach, als je niet tevreden bent met een goed werkende database, dan waarom niet
.
OK, hoe pak je het dan aan?
Niet zo dus
Code:
Private Sub Knop40_Click()
DoCmd.OpenForm "FrmProjectDiscipline", , , "[frmProjectDiscipline]![Projectnummer]=" & Me.[Projectnummer]
End Sub
En ook niet zo (al is dit al veel beter want dit is een werkend filter)
Code:
Private Sub Knop40_Click()
DoCmd.OpenForm "FrmProjectDiscipline", , , "[Projectnummer]=""" & Me.Projectnummer & """"
End Sub
Om te beginnen: je moet het projectnummer meegeven aan het formulier, omdat je dat nodig hebt om a) te filteren (als er records zijn) en b) om de standaardwaarde van het veld ProjectID in te kunnen stellen. Dat doorgeven doe je zo:
Code:
Private Sub Knop40_Click()
DoCmd.OpenForm "FrmProjectDiscipline", OpenArgs:=Me.Projectnummer
End Sub
Maar daarmee ben je er uiteraard nog niet; nu heb je het projectnummer wel meegegeven aan het formulier, maar daar moet het nog verwerkt worden. Je moet het formulier namelijk nog filteren, en je wilt het projectnummer gebruiken bij nieuwe records. Dat kun je bijvoorbeeld zo doen:
Code:
Private Sub Form_Load()
If Not Me.OpenArgs & "" = vbNullString Then
Me.Projectnummer.DefaultValue = Me.OpenArgs
Me.Filter = "[Projectnummer]=""" & Me.OpenArts & """"
Me.FilterOn = True
End If
Maar ook deze oplossing zou voor mij nog niet afdoende zijn, want te onhandig. Zo heb je voor elk (nieuw) project een beginsituatie waarbij je
geen detailrecords hebt; je begint dus altijd op 0 records. In dat geval
moet je dus beginnen met het invoeren van het eerste record, dus in mijn optiek zou je dan altijd moeten beginnen met het formulier in Toevoegmodus, met een leeg record en het projectnummer al ingevuld. Voeg je echter records toe aan een project met bestaande detailrecords, dan wil je wellicht alleen filteren en
kunnen toevoegen. Ik zou dus eerst een check doen op het aantal records op een project, en op basis daarvan bepalen of ik het formulier open in Toevoevmodus of in Edit modus.