controle probleem

Status
Niet open voor verdere reacties.

ribbetje

Gebruiker
Lid geworden
9 jan 2002
Berichten
250
Public Function fBtwnrcontrole(BTWnr)
fBtwnrcontrole = IIf(((97 - Val(Left(Trim(Str(BTWnr)), 7)) Mod 97)) = Val(Right(BTWnr, 2)), True, False)
End Function

daar krijg ik een fout mee (typen komen niet met elkaar overeen)

dat staat in BTWnr tekstvak (be326-000-111)

ik denk dat mijn be er nog uit moet
 
Misschien...

Je variabele worden allemaal impliciet geinitialiseerd naar een variant.
Code:
Public Function fBtwnrcontrole(BTWnr) 
    fBtwnrcontrole = IIf(((97 - Val(Left([B]Trim[/B](Str(BTWnr)), 7)) Mod 97)) = Val(Right(BTWnr, 2)), True, False) 
End Function
Beter is je variabelen te voorzien van een type.
Code:
Public Function fBtwnrcontrole(BTWnr As Integer) As Boolean
    
    fBtwnrcontrole = IIf(((97 - Val(Left$([B]CStr[/B](BTWnr), 7)) Mod 97)) = Val(Right$(CStr(BTWnr), 2)), True, False)

End Function
Als je een paar extra variabelen gebruikt om tussentijds resultaten op te slaan dan wordt het ook een stuk leesbaarder en dus beter te onderhouden. IIF statements zijn over het algemeen erg traag. Gebruik IF THEN ELSE ENDIF

Je zou je VAL statement ook nog kunnen vervangen door een Clng, Cint of Cdbl... Alhoewel de werking van VAL en de genoemde conversie statements niet helemaal gelijk is. Kijk in de Help

Succes!
 
Laatst bewerkt:
Hallo,

dat gaat niet lukken met de funktie Val.
Deze stopt namelijk op het moment dat de funktie een teken tegenkomt dat niet numeriek is en geen decimaal scheidingsteken is.
Dit

Val(Left$(CStr(BTWnr), 7))

levert in dit gwval dus 0 (getal nul) op.
Met andere conversiefunkties krijg je dit ook niet gedaan.

Opties zijn om alle niet-numerieke tekens uit het BTW nummer te strippen of om geen niet-numerieke tekens in het BTW nummer te zetten.

Groet,

Tardis
 
Want je weet niet wat de input is

Hallo,

dat weet je wel, staat namelijk in de vraagstelling.
Werkt dus niet ;)
Probeer maar eens uit en kijk ook even in Acces Help naar de Val funktie ;) ;)

Groet,

Tardis
 
Helaas...

De eerlijkheid gebied me te zeggen dat Dr Who gelijk heeft. Het is niet anders.

Sloop die "be" eraf met
Code:
Mid$(strInput,3)
gebruik de volgende recursieve functie om een gedeelte van je string te pakken:
Code:
Public Function GetPart(strString As String, strSep As String, intPart As Integer) As String
   Dim intFound As Integer
   Dim intNext  As Integer
   
   intFound = InStr(1, strString, strSep)
   If intFound > 0 Then
      If intPart = 1 Then
         GetPart = Mid$(strString, 1, intFound - 1)
      Else 'intPart > 1
         GetPart = GetPart(Mid$(strString, intFound + 1), strSep, intPart - 1) 'recursive
      End If
   Else 'intFound = 0, no occurence of seperator so return complete string
      GetPart = strString
   End If
   
End Function
en voer de volgende statement uit om het eerste gedeelte, het tweede gedeelte of het derde gedeelte te pakken:
Code:
strEerste = GetPart(mid$(strInput,3), "-", 1)
strTweede = GetPart(mid$(strInput,3), "-", 2)
strDerde = GetPart(mid$(strInput,3), "-", 3)

Enjoy!:p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan