subformulier

Status
Niet open voor verdere reacties.

kreydt

Nieuwe gebruiker
Lid geworden
8 aug 2023
Berichten
4
Ik heb een subformulier gemaakt met 2 onafhankelijke tekstvakken. Nu wil ik vanuit een knop in het hoofdformulier één tekstvak onzichtbaar maken. Maar het lukt me maar niet. Kan iemand me helpen?
Naam; hoofdformulier = “main” met een knop = “knop”
Naam; subformulier = “sub” met twee tekstvakken = “vak1” en “vak2”
 
Laatst bewerkt:
Allereerst welkom bij HelpMij :).
Je vraag is niet zo moeilijk te beantwoorden. I.p.v. een opmerking als "Maar het lukt me maar niet" is het voor ons een stuk handiger als je vertelt wát je al geprobeerd hebt. Nu is het voor ons ook maar gokken. Zonder de db te zien, moeten we dan ook nog eens zelf de situatie nabouwen om te testen, en die tijd had ik ook liever in iets anders gestoken :). Maar goed, ik kom tot dit:

Code:
Private Sub Knop1_Click()
   Me.Sub.Form!Vak1.Visible = Not Me.Sub.Form!Vak1.Visible
End Sub

En daarmee zet je de zichtbaarheid dus uit of aan. Het lijkt mij een beetje onzinnig om een knop te maken waarmee je een tekstvak alleen onzichtbaar maakt, want waarom zou je dat met een knop doen? Kun je hem net zo goed gelijk verbergen.
 
Dank voor uw reactie maar helaas werkt het niet. Het doel van mijn opzet is, om een visueel plan te maken waarbij ik selectief kan beslissen wat en waar de voorwerpen staan. Ik heb echt van alles geprobeerd. Daarom heb ik een eenvoudig ontwerp gemaakt om de syntax te testen maar meestal krijg ik als resultaat dat er geen koppeling tussen het hoofdformulier en het sub-formulier bestaat. (me, parent,.,!)

Compileerfout:
Kan methode of het gegevenslid niet vinden
Me.Sub.Form!Vak1.Visible = Not Me.Sub.Form!Vak1.Visible
 
Laatst bewerkt:
Naam; subformulier = “sub” met twee tekstvakken = “vak1” en “vak2”
Kijk, en nú zie je dus het voordeel van het meesturen van een database, want zonder db zijn we afhankelijk van de informatie die jíj aangeeft. En je schrijft dus letterlijk dat jouw formulier “Sub” heet. Ik heb daarom in een formulier het subformulier hernoemdnaar “Sub”, en bijgevoegde code uitgetest. Werkt echt perfect….

De enige reden dat het bij jou níet werkt, is dus omdat jouw subformulier tóch een andere naam heeft. Kijk eens bij de eigenschappen van je subformulier. Dan zal hopelijk alles duidelijk worden :).
 
ik heb het probeersel opnieuw gemaakt met de voorgestelde namen "formulier1 en 2" en nog steeds geen gewenste reactie van het programma. is er iets verkeerd ingestelt in mijn access? want uw code had ik ook al eens geprobeerd in mijn origineel project. enig idee?
 
Ja, post de database mee :). Nee dus, ik zou dan echt de db moeten zien. Overigens heb ik nergens de namen formulier1 en formulier2 gebruikt; sterker nog: ik heb in mijn voorbeeldje een nieuw formulier met de naam 'main' gemaakt (die naam doet er overigens niet toe) en daar een reeds bestaand formulier op geplakt. In dat formulier een tekstvak met de naam 'vak1' gemaakt, en een knop op het hoofdformulier. Aan de naam van het subformulier (dat dus een bestaand formulier is) heb ik niets veranderd; wél heb ik de naam van het Object veranderd. En daar gaat het vermoed ik fout.

Object Eigenschappen.png

Ik heb het in bovenstaand plaatje proberen uit te leggen met pijlen. Links zie je het formulier [Scootmobiel_Invoeren], en het lege formulier [Main]. Ik heb het formulier [Scootmobiel_Invoeren] in het ontwerpscherm naar het formulier Main gesleept, en daar een knop boven gezet. Mijn (nieuwe) subformulier heet uiteraard geen "Sub", en zoals je ziet heb ik het formulier ook niet hoeven hernoemen.

Wat ik wél heb gedaan: ik heb het formulier eenmaal aangeklikt, zodat het formulier geselecteerd is. En nu zeg ik iets wat eigenlijk helemaal fout is: ik héb het formulier namelijk niet geselecteerd, maar het object waar het formulier in is geplaatst! Dát is namelijk wat Access doet: het zet een frame op het formulier, en daar wordt het subformulier gezet. Dat object kun je herkennen aan de kleine vierkante oranje blokjes op de hoeken en in het midden van de randen. En dat heeft wat extra complicaties, want dat object heeft óók eigenschappen. En dáár moet je dus naar verwijzen in de code! Ik heb in het Eigenschappenvenster dan ook met een rode pijl en een rode cirkel aangegeven wat ik heb gedaan. En dat is: op het tabblad <Overige> de naam van het Object veranderd naar "Sub". Daarbij verandert er dus niets aan de naamgeving van het formulier, want dat heet nog steeds [Scootmobiel_Invoeren].

Lang verhaal, maar ik vermoed dus dat je deze werkwijze niet hebt toegepast :).
Code:
[COLOR=#3E3E3E]Me.Sub.Form!Vak1.Visible[/COLOR]
Dan is nu hopelijk ook de code duidelijker. Me. verwijst naar het huidige actieve formulier (Main dus). Sub.Form verwijst naar het object Sub, en wel naar het formulier dat in dat object ligt. !Vak1 is dan de volgende laag: het object Vak1 dat zich op dat subformulier bevindt. En met .Visible bepaal je of iets zichtbaar is of niet. In de code wordt die zichtbaarheid aan- of uitgezet.

Hopelijk is het nu wat duidelijker!
 
In de eerste plaats, bedank ik je voor al de moeite en tijd die je aan mijn probleem besteedde.
Omdat je suggereerde dat de namen verkeerd waren heb ik een nieuwe db gemaakt met de namen die access voorstelde. Vandaar de namen “formulier1” enz. en de code aangepast met die namen. !!! noppes!!!
Nu ben ik helemaal in de war. De instelling in de rode cirkel is bij mij automatisch ingesteld. Bij uitvoeren van de code krijg ik het volgende; “fout 438 de eigenschap of methode is niet van toepassing op dit object” en als ik true of false invul heb ik een compileer-fout.
Zoals je opmerkte, geeft niet gekoppelde formulieren problemen. het gekke is dat het bij jou lukt en bij mij niet dus moet er een verschil zijn in access want de test-db is toch zéér eenvoudig.
 
De instelling in de rode cirkel is bij mij automatisch ingesteld.
Dat klopt, elk object dat je maakt krijgt automatisch ofwel een standaardnaam (Knop1, Knop2, Formulier1 etc) als het een object is dat niet herleidbaar is tot een bron. Hebben objecten wél een bron, dan is de naam gelijk aan die bron. Dus een tekstvak dat je koppelt aan een tabelveld met de naam [Registratiedatum] krijgt de naam "Registratiedatum" (te zien op de plek van de rode cirkel). Zet je echter éérst een tekstvak op het formulier, en koppel je dat achteraf aan hetzelfde tabelveld, dan krijgt het nie de naam van dat veld, maar blijft het object gewoon "Vak2" o.i.d. heten.

De reden is simpel: objecten (en dat geldt voor alle objecten) moeten een unieke naam hebben, anders crasht het systeem. (beetje dramatisch overdreven :)). Maar de naam van een object hoeft dus niet hetzelfde te zijn als de bron waar het aan gekoppeld is.

Nogmaals: ik kan je niet meer helpen dan dat ik nu doe; wil je betere hulp, dan zul je toch echt de database mee moeten sturen. Vermoedelijk krijg je hem dan 6 seconden later (gerepareerd) weer terug, want ik vermoed dat het toch echt heel simpel is.
 
En hopelijk geeft dit je het laatste zetje: de database die ik gebruikt heb om de test te doen. Met exact de omstandigheden zoals ik ze beschreven heb, + een leuk extraatje :).
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan