Zichtbaarheid Knop

Status
Niet open voor verdere reacties.

Marcotica

Gebruiker
Lid geworden
20 sep 2007
Berichten
83
Hallo,

Ik heb in een formulier een knop gemaakt die een weer een formulier opend. Deze laatste geeft de inhoud van een query weer. Het te openen formulier houdt rekening met de inhoud het formulier waarin wordt gewerkt.

De knop in het formulier moet alleen zichtbaar zijn of in iedergeval oplichten als de inhoud het te openen formulier gevuld is (door die query).

Wie kan mij helpen?

Ik weet dat dit mogelijk is, maar hoe?
 
Je kan deze code eens proberen:

Dim rst As DAO.Recordset, intI As Integer, tmp As String

DoCmd.OpenForm "JouwFormulier", , , , , acHidden
Set rst = Forms![JouwFormulier].Recordset
intI = rst.RecordCount
DoCmd.Close acForm, "JouwFormulier"
MsgBox intI

If intI > 0 Then Me.[JouwKnop].Enabled = True

Wat hier gebeurt is het volgende: je opent het subformulier, maar laat het niet zien. Vervolgens tel je m.b.v. een recordset het aantal records, en sluit je het formulier weer.
Deze code moet je achter een object hangen op het moment dat de recordset van het tweede formulier is bepaald; als ik jouw verhaal zo lees zou dat bijvoorbeeld kunnen bij:

Private Sub Form_Current()

Oftwel: als het formulier is geopend, en je naar een volgend record gaat.
Bij het formulierontwerp zet je de knop standaard op Enabled=False, bijvoorbeeld bij het laden van het formulier.

Private Sub Form_Current()
Me.[JouwKnop].Enabled = False

Succes!

Michel
 
Laatst bewerkt:
Je kan deze code eens proberen:



Wat hier gebeurt is het volgende: je opent het subformulier, maar laat het niet zien. Vervolgens tel je m.b.v. een recordset het aantal records, en sluit je het formulier weer.
Deze code moet je achter een object hangen op het moment dat de recordset van het tweede formulier is bepaald; als ik jouw verhaal zo lees zou dat bijvoorbeeld kunnen bij:



Oftwel: als het formulier is geopend, en je naar een volgend record gaat.
Bij het formulierontwerp zet je de knop standaard op Enabled=False, bijvoorbeeld bij het laden van het formulier.



Succes!

Michel



Michel,

Bedankt voor je reactie :thumb:, maar ik denk niet dat lukt. Ik ben echt een beginner met VB, dus..
Nog een andere optie?

Gr. Marcotica
 
Misschien.... Maar dan heb ik wat meer informatie nodig.

Om te beginnen: ik vrees, dat je er niet aan ontkomt om iets met VB te doen, omdat je een variabele situatie wilt kunnen ondervangen op een formulier. Dat betekent dus, dat er op een gegeven moment iets moet worden gecontroleerd op het formulier, en dat kan alleen met VB. :confused:

Volgende vraag: zijn de gegevens in het tweede formulier afhankelijk van de gegevens van het eerste formulier? Of is het een formulier dat je bijvoorbeeld ook zelfstandig kan starten? In het eerste geval zal je elke keer als je het formulier opent een andere hoeveelheid records met andere gegevens zien, in het tweede geval is de uitkomst van het formulier altijd hetzelfde.

Misschien is het mogelijk om een voorbeeld db te posten, want dan kan ik e.e.a. wel voor je in elkaar sleutelen. Tis namelijk niet heel moeilijk, al snap ik dat het wat lastig is om te doen als je er geen ervaring mee hebt!

Als de db te groot is, zal ik proberen de juiste code voor je te maken, maar dan heb ik in ieder geval de naam van de query nodig die je voor het tweede formulier gebruikt, en de naam van de knop.
De voorbeeldcode die ik heb neergezet heb ik overigens getest op een aparte knop, dus dat zou je ook nog kunnen proberen.... Je maakt dan een nieuwe knop op het formulier, en klikt vervolgens gelijk op Annuleren om de Wizard af te sluiten. Vervolgens klik je op de knop Eigenschappen, ga je naar het tabblad Gebeurtenis, en ga je in de regel <Bij Klikken> staan. Daarna klik je op de knop met de 3 puntjes, en kies je uit het menu <Gebeurtenis opbouwen>. Als het goed is, zit je nu in de Visual Basic Editor.
Daar plak je vervolgens de code, en pas je uiteraard de namen van de knop en de query nog aan. Als je dan het formulier draait, zou er een venstertje moeten komen met het aantal records in de query.

Nogmaals: het handigst is het als je een voorbeeldje kunt uploaden!

Michel
 
Misschien.... Maar dan heb ik wat meer informatie nodig.

Om te beginnen: ik vrees, dat je er niet aan ontkomt om iets met VB te doen, omdat je een variabele situatie wilt kunnen ondervangen op een formulier. Dat betekent dus, dat er op een gegeven moment iets moet worden gecontroleerd op het formulier, en dat kan alleen met VB. :confused:

Volgende vraag: zijn de gegevens in het tweede formulier afhankelijk van de gegevens van het eerste formulier? Of is het een formulier dat je bijvoorbeeld ook zelfstandig kan starten? In het eerste geval zal je elke keer als je het formulier opent een andere hoeveelheid records met andere gegevens zien, in het tweede geval is de uitkomst van het formulier altijd hetzelfde.

Misschien is het mogelijk om een voorbeeld db te posten, want dan kan ik e.e.a. wel voor je in elkaar sleutelen. Tis namelijk niet heel moeilijk, al snap ik dat het wat lastig is om te doen als je er geen ervaring mee hebt!

Als de db te groot is, zal ik proberen de juiste code voor je te maken, maar dan heb ik in ieder geval de naam van de query nodig die je voor het tweede formulier gebruikt, en de naam van de knop.
De voorbeeldcode die ik heb neergezet heb ik overigens getest op een aparte knop, dus dat zou je ook nog kunnen proberen.... Je maakt dan een nieuwe knop op het formulier, en klikt vervolgens gelijk op Annuleren om de Wizard af te sluiten. Vervolgens klik je op de knop Eigenschappen, ga je naar het tabblad Gebeurtenis, en ga je in de regel <Bij Klikken> staan. Daarna klik je op de knop met de 3 puntjes, en kies je uit het menu <Gebeurtenis opbouwen>. Als het goed is, zit je nu in de Visual Basic Editor.
Daar plak je vervolgens de code, en pas je uiteraard de namen van de knop en de query nog aan. Als je dan het formulier draait, zou er een venstertje moeten komen met het aantal records in de query.

Nogmaals: het handigst is het als je een voorbeeldje kunt uploaden!

Michel


Michel,

Ja, de gegevens van het 2e zijn afhankelijk van het eerste.
Het gaat om een relatie met een 2e adres. Het tweede adres staat ook in het tabel van de overige adressen, maar wordt in een apart formulier weergegeven m.b.v. een query.
Niet iedereen heeft een 2e adres, dus dan hoeft de knop ook niet zichtbaar te zijn. Maar uitsluitend wanneer in het adres is gevuld.

Ik ga nogmaals in de weer met je gegevens. Sommige dingen lukken me wel aardig in VB, maar dan wel heel basic.


Oja. Dit is overigens de knop nu:
Private Sub Postadres_Afrekeningen_Click()
On Error GoTo Err_Postadres_Afrekeningen_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "FrmQryPostadresAfrekeningen"

stLinkCriteria = "[Nummer]=" & Me![Nummer]
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Postadres_Afrekeningen_Click:
Exit Sub

Err_Postadres_Afrekeningen_Click:
MsgBox Err.Description
Resume Exit_Postadres_Afrekeningen_Click

End Sub

Wederom bedankt voor je tijd en aandacht.

gr. Marco
 
Laatst bewerkt:
Hoi Marco,

Probeer deze code eens onder de knop:

Private Sub Postadres_Afrekeningen_Click()
On Error GoTo Err_Postadres_Afrekeningen_Click
Dim stDocName As String, stLinkCriteria As String
Dim rst As DAO.Recordset
Dim intI As Integer

stDocName = "FrmQryPostadresAfrekeningen"
stLinkCriteria = "[Nummer]=" & Me![Nummer]

DoCmd.OpenForm "FrmQryPostadresAfrekeningen", , ,stLinkCriteria , , acHidden
Set rst = Forms![FrmQryPostadresAfrekeningen].Recordset
intI = rst.RecordCount
DoCmd.Close acForm, "FrmQryPostadresAfrekeningen"
If intI=0 Then
MsgBox "Geen records in het subformulier..."
exit sub
Else
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If
rst.Close
Set rst=Nothing

Exit Sub

Err_Postadres_Afrekeningen_Click:
MsgBox Err.Description

End Sub

Deze variant zou een boodschap moeten laten zien als er geen records zijn, en dan sluiten. Het formulier wordt dan niet geopend.
Kunnen we zien of je de juiste instellingen gebruikt...

Michel
 
Compileerfout.

Hoi Marco,

Probeer deze code eens onder de knop:

Deze variant zou een boodschap moeten laten zien als er geen records zijn, en dan sluiten. Het formulier wordt dan niet geopend.
Kunnen we zien of je de juiste instellingen gebruikt...

Michel

Hoi Michel,

Helaas krijg ik een compileerfout wanneer ik deze code in de plaats van zet:

GroteFoto-7DQOK4W7.jpg


Wat nu?

gr.Marco
 
Je mist een verwijzing naar een libary. Ga naar de VBA editor (Alt+F11). Naar menu "Extra" ---> "Verwijzingen".

Vink in de lijst "Microsoft DAO ......." aan. Dan zou het opgelost moeten zijn.
 
Je mist een verwijzing naar een libary. Ga naar de VBA editor (Alt+F11). Naar menu "Extra" ---> "Verwijzingen".

Vink in de lijst "Microsoft DAO ......." aan. Dan zou het opgelost moeten zijn.

Hoi

Het werkt!!! Thnx.
Alleen bij het formulier waarin wel de data zit, geeft hij de volgende melding bij het openen van hiervan.
GroteFoto-7WSNMGLA.jpg


De formule is:
Private Sub Postadres_Afrekeningen_Click()
On Error GoTo Err_Postadres_Afrekeningen_Click
Dim stDocName As String, stLinkCriteria As String
Dim rst As DAO.Recordset
Dim intI As Integer

stDocName = "FrmQryPostadresAfrekeningen"
stLinkCriteria = "[Nummer]=" & Me![Nummer]

DoCmd.OpenForm "FrmQryPostadresAfrekeningen", , , stLinkCriteria, , acHidden
Set rst = Forms![FrmQryPostadresAfrekeningen].Recordset
intI = rst.RecordCount
DoCmd.Close acForm, "FrmQryPostadresAfrekeningen"
If intI = 0 Then
MsgBox "Er is geen separaat adres voor de afrekeningen aanwezig..."
Exit Sub
Else
DoCmd.OpenForm stDocName, , , stLinkCriteria
End If
rst.Close
Set rst = Nothing

Exit Sub

Err_Postadres_Afrekeningen_Click:
MsgBox Err.Description

End Sub
Wat is dan fout?

gr. marco
 
Laatst bewerkt:
Is het mogelijk om een voorbeeldje mee te sturen? Dit is een foutmelding die mij niet zo heel veel zegt....

Je kunt nog wel iets proberen, om te onderzoeken op welk punt het probleem ontstaat door een Onderbrekingspunt vast te leggen. Bijvoorbeeld door links van de code op de grijze balk vóór het commando Docmd.Openform te klikken. Je ziet dan een rode stip verschijnen.

Als je nu op de knop klikt, zal de procedure tot het onderbrekingspunt worden uitgevoerd. Daarna kun je met <F8> elke keer een regel verder springen, tot je (vermoedelijk) tegen de fout aanloopt.
Dat punt is dan dus de oorzaak van de foutmelding, en als je dat weet, zijn we ook weer wat verder!

Michel

(overigens kun je een procedure, als je in onderbrekingsmodus werkt, met <F5> weer door laten lopen.)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan