Dat is niet helemaal wat ik wil... in de 1e plaats: alleen de velden van het record waar het vinkje in is gezet moeten geblokkeerd worden.
Dat snap ik, en als je dat echt wilt, moet je een Enkelvoudig formulier gebruiken. Dan heb je in beginsel hetzelfde probleem, alleen dan zie je het niet

. Wat is namelijk het probleem: in je formulier heb je voor elk veld in je tabel/query één tekstvak of keuzelijst staan. Dat object laat per record de bij dat record behorende veldwaarde zien. So far so good. Maar wat is het geval? Op je formulier heb je maar
een exemplaar van dat object staan: het
veld PersoonID hangt weliswaar aan het
object PersoonID, maar dat object kan maar één waarde (uit het actieve record) laten zien; je ziet niet gelijk alle persoonID's in dat ene tekstobject. Gelukkig maar natuurlijk!
In een enkelvoudig formulier heb je van dat beginsel geen last, want je
ziet maar één record. Op een meervoudig formulier zit je echter een beetje in de penarie, omdat je nu meerdere exemplaren ziet van elk object. Staan er 20 records op je doorlopende formulier, dan zie je ook 20 PersoonID's. In 20 tekstvakken. Maar je weet zelf natuurlijk ook wel dat je bij het ontwerpen van het formulier maar één tekstvak op het formulier hebt gezet! En als je dat ene tekstvak met een klik op een selectievakje uitschakelt, dan is dus ook echt dat ene tekstvak uitgeschakeld. Inclusief de 19 andere 'neefjes', want dat
zijn geen 19 andere tekstvakken, dat is gewoon hetzelfde tekstvak. En dat heb je net uitgezet. Of aan, dat maakt natuurlijk voor het verhaal niets uit.
Er is dus (gelukkig) wel een workaround, waar je mee kunt stoeien. Gek genoeg heb je die al bijna gevonden

. Je hebt een code bedacht die wordt uitgevoerd bij het
openen van het formulier. Dat openen doe je maar één keer, dus de code wordt ook maar één keer uitgevoerd. En wel voor de status van het eerste record. De rest van de records is dan de sjaak.... Je kunt de code dus veel beter bij de gebeurtenis <Bij aanwijzen> zetten; die procedure wordt uitgevoerd als je een ander record selecteert. En dat is exact het moment dat je de controle wilt uitvoeren!
Code:
Private Sub Form_Current()
If Me.Afgedaan = True Then
Me.AllowEdits = False
Else
Me.AllowEdits = True
End If
End Sub
Overigens zit hier een vet probleem in..... Op het moment dat je de code uitvoert bij een niet-beveiligd record, is
alles gelocked. Je kunt dus ook niet meer op het selectievakje klikken! Ergo: de status is onomkeerbaar! Het heeft ook geen zin om een ander niet-beveiligd record te selecteren (al staat dan wel dus het hele formulier in bewerkingsmodus) want zodra je de cursor verplaatst naar het gelockte record, ben je weer net zo ver van huis. Ik zou dat dus anders aanpakken.... Maar wel bij deze gebeurtenis.