Foutmelding filter op bedrag

Status
Niet open voor verdere reacties.

Nico84

Gebruiker
Lid geworden
21 jul 2011
Berichten
191
Als ik op mijn formulier in het veld txtBedragvan en txtBedragtm 100 of 150 invoer werkt het filter prima.
Voer ik een getal met een komma in krijg ik de volgende melding:
syntaxixfout (komma) in query expressie.

Ik gebruik de onderstaande code om mijn filter op te bouwen.
Kan iemand mij verder op weg helpen?


Code:
Private Sub Filteren()

Dim itm As Variant, sFilter As String
Dim isel As Integer, i As Integer
Dim tmp As Variant
Dim strSQL As String, stDocName As String
Dim qDF As QueryDef
Dim x As Integer
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
    
    sFilter = ""
    
    If txtJaarvan <> "" And txtJaartm <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = sFilter & "[Jaar] Between " & txtJaarvan & " And " & txtJaartm
    End If
    
    If IsDate(txtDatumvan) And IsDate(txtDatumtm) Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = sFilter & "[Factuurdatum] Between " & Format(txtDatumvan, strcJetDate) & " And " & Format(txtDatumtm, strcJetDate)
    End If
        
    If txtZoekfactuurnr <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = sFilter & "[Factuurnummer] Like '*" & [txtZoekfactuurnr] & "*'"
    End If
    
    If txtbedragvan <> "" And txtBedragtm <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = sFilter & "[BedragIncl] Between " & txtbedragvan & " And " & txtBedragtm
    End If
    
    x = 0
    isel = Nz(Me.lstDebiteur.ItemsSelected.Count, 0)
    If isel > 0 Then
        If sFilter <> "" Then
            sFilter = sFilter & " And " & "(DebiteurID In("
        Else
            sFilter = sFilter & "(DebiteurID In("
    End If
        For Each itm In Me.lstDebiteur.ItemsSelected
            x = x + 1
            tmp = Me.lstDebiteur.ItemData(itm)
            If Not IsNumeric(tmp) Then tmp = "'" & tmp & "'"
            sFilter = sFilter & CStr(tmp)
            If x < isel Then sFilter = sFilter & ","
        Next itm
        sFilter = sFilter & "))"
    End If

Forms!frm_FactuurOverzicht!frm_FactuurOverzichtsub.Form.Filter = sFilter
Forms!frm_FactuurOverzicht!frm_FactuurOverzichtsub.Form.FilterOn = True
Me.cmdFilteruit.Enabled = True
 
Gebruik voor txtBedragVan en txtBedragTm een variabele van het type Double, en zet daar de waarde van je tekstvelden in.
 
Ik heb het volgende toegevoegd OctaFish alleen zonder resultaat.

Code:
Dim Bedragvan As Double
Dim Bedragtm As Double

Bedragvan = Me.txtbedragvan
Bedragtm = Me.txtBedragtm

Weet niet of dit de goede aanpak is.
 
Lees de waarden van BedragVan en BedragTM eens uit met een Msgbox. Staat daar de gehele getalwaarde in, dan moet je het tekstvak nog omzetten, wat ik overigens ook wel verwacht dat moet gebeuren. Alleen een Double variabele declaren is namelijk niet genoeg, omdat je in die variabelen nog steeds gehele getallen opslaat. Ik had dus dit verwacht:

Code:
Bedragvan = CDbl(Me.txtbedragvan.Value)
Bedragtm = CDbl(Me.txtBedragtm.Value)
 
De foutmelding die je krijgt geeft precies aan waar je de oplossing moet zoeken!
In VBA heeft een getal van het type Double een punt als decimaalteken.
Gebruik de Replace functie om de komma die 'wij' als decimaalteken gebruiken, om te zetten naar een punt. Dus zoiets als Replace(MijnGetal, ",", ".")
 
Ik heb beide oplossingen geprobeerd en die van Harry werkte.

OctaFish heb die van jouw ook geprobeerd, maar zonder resultaat.
Waarschijnlijk doe dan toch iets niet helemaal juist.

Bedankt voor de hulp!
 
Landnotaties zijn bij decimalen inderdaad een probleem; je zult op de een of andere manier daar iets mee moeten. Ik heb thuis de punt als decimaalteken, en de komma als duizendtal scheiding. Daarom werkt het bij mij wel, en bij jou niet. Dus dat is de simpelste oplossing!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan