Subform beschikbaar maken na invullen gegevens op mainform

Status
Niet open voor verdere reacties.

LodewijkG

Gebruiker
Lid geworden
6 dec 2012
Berichten
98
Beste,

Is er een mogelijkheid om een subform in een mainform te blokkeren voor wijzigingen, tot de gebruiker alle gegevens op het mainform heeft ingevuld?
 
Ja, dat kan. Begin met het formulier dicht te zetten (eigenschappen op tabblad <Gegevens>. Check vervolgens met een functie die je bij elk veld dat ingevuld moet worden of aan de voorwaarden is voldaan, en als dat zo is pas je de instellingen van het subformulier aan zodat het bewerkt kan worden.
 
Ja, dat kan. Begin met het formulier dicht te zetten (eigenschappen op tabblad <Gegevens>. Check vervolgens met een functie die je bij elk veld dat ingevuld moet worden of aan de voorwaarden is voldaan, en als dat zo is pas je de instellingen van het subformulier aan zodat het bewerkt kan worden.

Dag OctaFish,

Merci beaucoup! Ik denk alleen niet dat ik je helemaal begrijp.

Ik zou de subform moeten dicht zetten, dan de mainform updaten met functies (ik denk IfNull) waarna ik de subform weer moet aanzetten. Zorgt deze stap er dan voor dat mijn subform pas ingeschakeld wordt nadat de nodige velden zijn ingevuld?

Ik heb voor de IfNull functie de volgende code gevonden:
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If IsNull(Me.[YourControlName]) Then
        Cancel = True
        MsgBox "You must enter a value for 'YourControlNameOrYourDescription'. Please make a valid entry or press ESC to Cancel"
        'You could set the focus on the specific control if your wish, change the background color, ...
    End If
End Sub

Kan ik dit ook zover krijgen dat ik kan bepalen welk veld in mijn mainform als eerst ingevuld wil hebben?
 
Zonder je db te zien wordt het een beetje lastig om precies te zien wat je nodig hebt. Zelf zou ik een functie maken op het formulier die alle verplichte waarden (velden dus) doorloopt en (bijvoorbeeld met een teller) registreert of alles is ingevuld. Een simpel voorbeeldje:
Code:
Private Sub Knop19_Click()
Dim ctl As Control
Dim i As Integer
    For Each ctl In Me.Controls
        If Left(ctl.Name, 3) = "txt" Then
            If Not Me(ctl.Name) = vbNullString Then i = i + 1
        End If
    Next ctl
    If i < 10 Then MsgBox "Niet voldoende controls ingevuld" Else: MsgBox "Prima!"
End Sub
 
Dag OctaFish,

Hierbij de file:
http://www.filedropper.com/25-1-2016v37

Het zit hem in frmOrder

Ik zou graag willen dat de volgende velden ingevuld moeten zijn:
cboSalesRep
cboCompany
cboCredit
cboFreight
En dan wanneer deze vier zijn ingevuld, de focus komt op de mainform completed knop. Waarna met een DoCmd.RunCommand acCmdSaveRecord & een Me.Refresh de sfmOrder toegankelijk gemaakt wordt. deze is nu namelijk gelocked als er geen invulling is in de salesrep...
 
Beste,

Ik heb na een tijdje een break te nemen van het proberen op te lossen van bovenstaand eigenlijk nog geen oplossing kunnen vinden.

Ik bedacht met dit probleem van twee kanten aan te kunnen pakken.

1) Bij het openen van het formulier, focus te leggen op bepaalde velden om bij het verlaten een pop up te tonen die zegt "velden Z,Y &Z moeten nog ingevuld worden"

Ik heb momenteel, wat beperkt werkt:

Code:
If Me.cboSalesRep = "" Then
MsgBox "ClientStatus has not been completed, please complete before proceeding"
DoCmd.GoToControl "cboSalesRep"
End If

If IsNull blijk bij bovenstaande niet te werken...

Is er een manier waarop ik voor bovenstaande cbo boxen dit in 1 stuk code kan plaatsen i.p.v. voor alle vier bovenstaande moet toepassen?

2) Bij het openen van het formulier, velden pas open te stellen voor bewerking als een waarde in een veld geen "" is.

Code:
Private Sub cboCompany_Click()
If IsNull(Me.cboSalesRep) Then
   Me.cboCompany.Locked = False
       Else: Me.cboCompany.Locked = True
       End If
End Sub

Dit stukje code wat ik had gevonden werkt ook niet, wellicht kunnen jullie mij de goede richting op wijzen.:thumb:


Het fijne is echter, beide opties heb ik niet eerder toegepast en weet eigenlijk ook niet goed hoe ik het aan moet pakken. Misschien dat ik hier op het goede pad gestuurd kan worden.:shocked:
 
Je 2e procedure kan nooit werken; als een object gelocked is, kun je er namelijk niet op klikken. Dus kun je de klik ook nooit afvangen. De status van bestaande velden kun je het beste checken bij de gebeurtenis <Bij aanwijzen>.
Wil je controleren of alle invoer correct is, dan zul je toch alle velden af moeten lopen. Daar zit weinig anders op.
 
Dag OctaFish,

Bedankt voor je feedback.

Dus mocht ik bijvoorbeeld een veld beschikbaar willen maken op basis van of een ander veld wel of niet is ingevuld, is dus geen mogelijkheid? Ik dacht hiermee een volgorde af te dwingen van hoe ik het formulier ingevuld zou willen hebben.

Ik heb voor het controleren of de invoer van mijn vier velden het volgende stukje gevonden en aangepast, echter werkt de 1e wel alleen stukje 2,3 & 4 niet. Moet ik hier wat tussen plaatsen of anders aanpakken?

Code:
Private Sub cmdSave_Click()

If Me.cboSalesRep = "" Then
MsgBox "Orderform (Champrix Rep) has not been completed, please complete before proceeding"
DoCmd.GoToControl "cboSalesRep"
End If

If Me.cboCompany = "" Then
MsgBox "Orderform (Customer) has not been completed, please complete before proceeding"
DoCmd.GoToControl "cboCompany"
End If

If Me.cboCredit = "" Then
MsgBox "Orderform (Payment) has not been completed, please complete before proceeding"
DoCmd.GoToControl "cboCredit"
End If

If Me.cboFreight = "" Then
MsgBox "Orderform (Destination) has not been completed, please complete before proceeding"
DoCmd.GoToControl "cboFreight"
End If

End Sub

Wederom bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan