vergelijk 2 velden met getal

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
Het zal wellicht simpel zijn maar ik kom er toch niet uit.
In mijn form heb ik twee velden waarin in elk veld een getal wordt ingevuld.
Er is een derde veld die ik vul met een getal middels een TempVars.
In voorbeeld is dit het getal 13.
Nu moet 1 van de twee velden aan dit getal voldoen.
Voldoen beide velden hieraan niet dan wordt dit middels een msgbox vermeld.
Voldoet één van de velden hieraan gaat de procedure verder.
Anders stopt de Functie.
Ik dacht opgelost te hebben met
Code:
if Forms!MyForm!veld1 <> 13 Or Forms!MyForm!veld2 <> 13 then
MsgBox "Fout"
End if

Maar door Or krijg ik toch altijd de melding.
 
Ik zou andersom redeneren:
Code:
If Not Me.veld1.Value = 13 And Not Me.veld2.Value = 13 Then
     MsgBox "Fout"
     Exit Sub
End if
 
Iets betere methode:
Code:
Dim iCheck As Integer

    iCheck = TempVars("Controlegetal")
    Select Case iCheck
        Case Nz(Me.veld1.Value, 0) = iCheck
            GoTo Verder
        Case Nz(Me.veld2.Value, 0) = iCheck
            GoTo Verder
        Case Else
             MsgBox "Fout"
             Exit Sub
    End Select

Verder:
 
Octafish,
wederom bedankt.
Jouw oplossing ziet er een stuk beter uit en werkt dacht ik.
Maar als mijn TempVars(zit in VarUitslag) gelijk is aan iCheck wordt toch de msgbox getoond.
In S1 zit het getal van veld 1 en S2 heeft de inhoud van veld2.
Als beiden velden niet de inhoud hebben van de TempVars komt terecht het MsgBox bericht.

Maar als één van de velden wel voldoet aan het TempVars getal wordt ook de MsgBox getoond.
Met F8 de stapjes nagelopen en de andere oplossing ook geprobeerd maar helaas.

Code:
Dim iCheck As Integer
    iCheck = VarUitslag
    Select Case iCheck
        Case Nz(S1, 0) = iCheck
            GoTo Verder
        Case Nz(S2, 0) = iCheck
            GoTo Verder
        Case Else
    MsgBox "U moet een uitslag invullen die gelijk is aan het ingestelde getal"
             Exit Function
    End Select
Verder:
 
Laatst bewerkt:
En vooral: flexibeler :). Tenminste: als je TempVar van waarde wisselt.
 
of op deze wijze:


Code:
Dim z As Long
Dim pl As Integer

    z = TempVars("Controlegetal")
        If Me.Waarde1 = z Or Me.waarde2 = z Then pl = 1
        If pl = 1 Then Exit Sub
        
    MsgBox "Fout"

End Sub


Gr. Cor
 
@pletter: dat is de oplossing die ik al in bericht #2 had neergezet. Later aangevuld met de TempVar i.p.v. de vaste waarde. Dan kan het natuurlijk nog een heel stuk simpeler:
Code:
    If Me.Waarde1 = TempVars("Controlegetal") Or Me.Waarde2 = TempVars("Controlegetal") Then GoTo Verder
    MsgBox "Fout"
    Exit Sub

Verder:
 
Zie mijn bericht bij #4
Wellicht willen jullie nog een poging doen.
 
Laatst bewerkt:
OctaFish,

Het gaat er niet om dat het simpeler, korter kan, maar om mogelijke manieren aan de TS te geven.

Gr. Cor
 
Nu moet 1 van de twee velden aan dit getal voldoen. Voldoen beide velden hieraan niet dan wordt dit middels een msgbox vermeld. Voldoet één van de velden hieraan gaat de procedure verder.
Niet om het een of ander, maar mijn laatste code voldoet volkomen aan jouw vraag. Ik heb 'm (we hebben de db niet) zo getest:

Code:
Sub test()
    TempVars.Add "Controlegetal", 13
    TestWaarde 12, 14
End Sub

Resultaat: Tekst "Fout!"

Code:
Sub test()
    TempVars.Add "Controlegetal", 13
    TestWaarde 12, 13
End Sub


Resultaat: Tekst "En hoe nu?"

Code:
Function TestWaarde(Waarde1 As Integer, Waarde2 As Integer)

    If Waarde1 = TempVars("Controlegetal") Or Waarde2 = TempVars("Controlegetal") Then GoTo Verder
    MsgBox "Fout!"
    Exit Function

Verder:
MsgBox "En hoe nu?"
    
End Function

Kortom: volgens mij doet-ie het gewoon. Tenzij je toch iets anders bedoelt....
 
Sytse1,

Verander geen voorgaande bericht, dan loopt u het risico dat deze niet gelezen wordt.

Als je goed gekeken zou hebben naar de oplossingen zou je kunnen zien dat een veldnaam in uw geval (S1, S2) vooraf moet gaan met Me. dus Me.S1 En Me.S2.

Tenzij de controle in een ander formulier plaats vindt, dan krijgen we een heel ander verhaal.

Gr. Cor
 
Laatst bewerkt:
OctaFish,

Er is duidelijk een verschil, maar dat doet er niet toe, u mag het laatste woord van mij hebben.

Gr. Cor
 
Pletter,
Om mijn code op dit platform zo kort mogelijk te houden heb ik de variable s1 en s2 gemaakt waarin ik de inhoud van de beide velden stop. Het is een Function waarin dan met Forms! enz wordt gewerkt. Evens om het kort te houden de Tempvars in een korte variabele. Het ging mij er om dat mijn code met or(of) steeds hetzelfde bericht gaf. Ook al werd aan de voorwaarde voldaan.
 
Octafish,
Bij Case Nz(Forms!Frm_Uitslagen!UitslagTegenSpelers.Value, 0) = iCheck (een juiste vergelijking)
of als ik Forms!Frm_Uitslagen!UitslagTegenSpelers in een variabele zet Var2, die is dan ook 13 wordt bij Case Var2 = iCheck
Is de vergelijking juist: 13 = iCheck
Toch wordt GoTo Verder overgeslagen en krijg ik de msgbox
Hieronder alle door mij uitgeprobeerde en niet juist werkende code.

Code:
Dim VarUitslag
VarUitslag = Nz([TempVars]![Max])

If Forms!Frm_Uitslagen!UitslagSpelers <> " " And Forms!Frm_Uitslagen!UitslagTegenSpelers <> " " Then
S1 = Forms!Frm_Uitslagen!UitslagSpelers
s2 = Forms!Frm_Uitslagen!UitslagTegenSpelers
End If

'S1 of S2 moet gelijk zijn aan het cijfer in het veld wedstrijd, de wedstrijd stop bij dit cijfer Then
If S1 = VarUitslag Or s2 = VarUitslag Then GoTo Verder
MsgBox "U moet een uitslag invullen die gelijk is aan het ingestelde getal"
Exit Function
Verder:

'of deze code

If S1 <> [TempVars]![Max] And s2 = [TempVars]![Max] Then GoTo Verder
If S1 = [TempVars]![Max] And s2 <> [TempVars]![Max] Then GoTo Verder
MsgBox "U moet een uitslag invullen die gelijk is aan het ingestelde getal"
Exit Function
Verder:

Dim iCheck As Integer
    iCheck = TempVars("Max")
    Select Case iCheck
        Case Nz(Forms!Frm_Uitslagen!UitslagSpelers.Value, 0) = iCheck
            GoTo Verder
        Case Nz(Forms!Frm_Uitslagen!UitslagTegenSpelers.Value, 0) = iCheck
            GoTo Verder
        Case Else
             MsgBox "Fout"
             Exit Function
    End Select
Verder:
 
Laatst bewerkt:
zou je kunnen zien dat een veldnaam in uw geval (S1, S2) vooraf moet gaan met Me. dus Me.S1 En Me.S2.
Dat is dus niet verplicht; laat je het weg, dan doet de code het ook prima. Alleen heb je dan geen IntelliSense.
 
Stop met het aanhalen van de formuliernaam, maar gebruik Me. Dat is veruit het makkelijkst, en houdt je code leesbaar. En je hebt dus het voordeel van IntelliSense. Ik weet niet wat je aan het doen bent met je code, maar ik snap best dat het niet klopt:
Code:
    If Me.UitslagSpelers.Value <> " " And Me.UitslagTegenSpelers.Value <> " " Then
        S1 = Me.UitslagSpelers.Value
        s2 = Me.UitslagTegenSpelers.Value
    End If
Je test namelijk op spaties. Je wilt toch op een lege cel, of op getallen testen? Dan mag daar geen spatie in staan.

Je vraag had al lang en breed opgelost geweest als je een voorbeeldje had gepost. Nu maak je de verwarring met elk bericht alleen maar groter :).
 
Nog een andere manier:

Code:
Dim pl As Integer

    pl = StrComp(Me.Waarde1, Me.Waarde2, TempVars("Controlegetal"))
     
        Select Case pl
            Case -1, 0
                Exit Sub
            Case 1
                MsgBox "Fout"
        End Select
    
End Sub

Gr. Cor
 
Pletter, bedankt.
Het zat in integer.
Ik vergeleek tekst met getal. Tja dan werkt het niet. Dom of even een blinde vlek.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan