Veld beschikbaar maken in formulier als een ander veld een waarde heeft

Status
Niet open voor verdere reacties.

LodewijkG

Gebruiker
Lid geworden
6 dec 2012
Berichten
98
Beste Helpmij gebruikers,

Is er de mogelijkheid om via VBA een veld/subform te blokkeren op basis van de waarde groter dan 0 of "" zodat ik de gebruiker kan sturen in hoe een formulier ingevuld dient te worden?

Ik kom er via googlen niet helemaal uit.

Bij voorbaad dank!
 
Ja; dat is niet eens zo heel moeilijk. De actie bestaat (vermoed ik) uit minstens 2 elementen:
1. beveiliging aanpassen op het moment dat de waarde in het veld verandert
2. beveiliging instellen op basis van de waarde in het veld op de gebeurtenis <Bij aanwijzen>

De actie zelf is steeds hetzelfde: zet het betreffende veld op Enabled = False. Actie 2 is nodig omdat je, als je door de records bladert, het veld/formulier geblokkeerd wilt hebben (of niet natuurlijk) als je een volgend of vorig record leest.
 
Goedemorgen OctaFish,

Ik heb de oplossing enigzins gevonden in de vorm van:

Eigenlijk wil ik trapsgewijs het volgende doen:

cboSalesRep (een veld met Lijst met waarde waarop de standaardwaarde = "") - Stap 1 invullen
cboCompany (tabel/query) - Stap 2 invullen - mits in cboSalesRep een waarde is ingevuld
cboCredit (tabel/query) - Stap 3 invullen - mits in cboCompany een waarde is ingevuld (en daarmee dus ook cboSalesRep)
cboFreight (tabel/query) - Stap 4 invullen - mits in cbo...
Overige velden - worden vrijgemaakt op het momente dat cboFreight een waarde heeft.

Dat zijn de vier velden die ik trapsgewijs wil laten invullen. Ik heb het volgende geprobeerd. Ik krijg in deze de juiste If functie niet gevonden, wellicht dat jij mij hiermee kunt helpen?:thumb::shocked:

Code:
Private Sub cboCompany_GotFocus()
If IsNotNull(cboSalesRep) Then
     Me.cboCompany.Locked = True
Else
     Me.cboCompany.Locked = False
     MsgBox "Please enter your name"
     Me.cboSalesrep.SetFocus
End If
End Sub
 
Laatst bewerkt:
Ik denk niet dat je het op deze manier kan doen. Ik zou het zo doen:

Code:
Private Sub cboSalesRep_Click()
    With Me.cboCompany
        .Requery
        If .ListCount > 1 Then
            .Locked = False
            .Enabled = True
            .SetFocus
            .Dropdown
        ElseIf .ListCount = 1 Then
            .Locked = False
            .Enabled = True
            .Value = .ItemData(0)
        Else
            .Locked = True
            .Enabled = False
        End If
    End With
End Sub

Code:
Private Sub cboCompany_Click()
    With Me.cboCredit
        .Requery
        If .ListCount > 1 Then
            .Locked = False
            .Enabled = True
            .SetFocus
            .Dropdown
        ElseIf .ListCount = 1 Then
            .Locked = False
            .Enabled = True
            .Value = .ItemData(0)
        Else
            .Locked = True
            .Enabled = False
        End If
    End With
End Sub

Code:
Private Sub cboCredit_Click()
    With Me.cboFreight
        .Requery
        If .ListCount > 1 Then
            .Locked = False
            .Enabled = True
            .SetFocus
            .Dropdown
        ElseIf .ListCount = 1 Then
            .Locked = False
            .Enabled = True
            .Value = .ItemData(0)
        Else
            .Locked = True
            .Enabled = False
        End If
    End With
End Sub

Oftewel: bij elke keuzelijst krijg je een eigen actie. De laatste keuzelijst krijgt dan de extra code om de tekstvakken los te gooien.
 
Thanks! dit is een mooie stap in de richting die ik op wilde.:thumb::)

Ik heb echter nu alleen het probleem dat hij de velden niet locked, dus ik kan nog steeds halverwege beginnen. Zeg maar bij bijvoorbeeld cboCredit, het probleem wat ik hiermee krijg is dat de gebruiker een nare error krijgt voor het aanmaken van het Id. Ik zou daarom deze velden echt graag "locken" zodat ze deze error niet kunnen tegenkomen. Met het toepassen van onderstaande code krijg ik dit nog niet voor elkaar.

Mijn idee was om jou code te gebruiken met ook:
Code:
Private Sub cboCompany_GotFocus()
If Me.cboSalesRep = 0 Or Me.cboSalesRep = "" Then
     Me.cboCompany.Locked = True
Else
     Me.cboCompany.Locked = False
End If
End Sub

Deze locked dan cboCompany voor het invoegen van waarde zonder dat er een waarde is ingevoerd voor cboSalesRep. Maar ik zou graag een msgbox willen oproepen die dan ook aangeeft dat bij focus, en de waarde in cboSalesRep voldoet niet, de gebruiker verteld dat hier eerst een waarde ingevoegd moet worden. Dit lijkt me niet heel lastig maar als ik msgbox = "" na Me.cboCompany.Locked = False invoeg, werkt het nog niet. Moet ik hier nog wat meer bij voegen? Zo ja, kan je mij misschien ook uitleggen waarom?:shocked:
 
Je kan volgens mij geen object locken dat de focus heeft. Daarom doe ik dat soort zaken altijd vanuit het vorige object.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan