Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

TechKnowledge-inhoud

Vraag: VBA-code is geschreven die twee valutawaarden vergelijkt. Hieronder wordt een voorbeeld van deze code weergegeven:

If ccur(cost) > ccur(1000) then

Wanneer deze coderegel wordt uitgevoerd, veroorzaakt dit een foutbericht van een gegevenstype dat niet incompatibiliteit bevat of een foutbericht typt dat niet overeenkomend is. De Windows valuta-instellingen worden momenteel gedefinieerd als Engelse 'ponden'-symbool voor het valutasymbool. Als ik het valutasymbool wijzig in $, wordt de code uitgevoerd. Wat gebeurt er hier en is er een manier om dit probleem te voorkomen?


Antwoord: In VBA respecteert de functie Ccur() altijd de valuta-instellingen van het Configuratiescherm bij het evalueren van dit veld. Aangezien de Dynamics VBA-implementatie altijd de veldwaarden als tekenreeksen zal doorgeven, heeft u dit probleem wanneer een valutawaarde wordt geëvalueerd die niet overeenkomen met de valuta-instellingen in Windows.


In het VBA Help-bestand wordt aangegeven dat de conversiefuncties voor gegevenstype moeten worden gebruikt in plaats van Val om internationaal bekende conversies van het ene gegevenstype naar het andere te leveren. Als u bijvoorbeeld de functie CCur() gebruikt, worden verschillende scheidingstekens voor decimalen, verschillende duizend scheidingstekens en verschillende valutaopties correct herkend, afhankelijk van de locale instelling van uw computer.


Houd er onder dit begrip rekening mee dat u werkt met Microsoft Dynamics GP:

  • CCur("œ1000") is gelijk aan een typefout (dat wil zeggen dat deze tekenreeks geen geldige valuta is) als de instelling Windows Valuta niet is ingesteld op 'pond'.

  • Als deze waarde is ingesteld op 'pond', geeft CCur("œ1000") een waarde van 1000 als resultaat, maar dan is CCur("$1000") gelijk aan een fout van het type mismatch.

De beste manier om met valuta's van VBA om te gaan, is door een functie te schrijven die elke tekenreeks met niet-numerieke symbolen voor een numerieke waarde (of valutawaarde) converteert. Bijvoorbeeld:

If CurrencyValueFromDynField(cost) > ccur(1000) then

waarbij de functie CurrencyValueFromDynField als volgt is gedefinieerd. Met deze code worden negatieve getallen verwerkt die doorgaande of achtereen mintekens hebben, die tussen vierkante haken staan of die spaties tussen het valutasymbool en het getal hebben.

Public Function CurrencyValueFromDynField(FieldString As String) As Currency
Dim i As Integer
Dim TempChar, TempString As String

' Strip off all non-numeric characters
TempString = ""
For i = 1 To Len(FieldString)
TempChar = Mid(FieldString, i, 1)
If InStr("1234567890.,-()", TempChar) > 0 Then
TempString = TempString & TempChar
End If
Next
FieldString = TempString

' Return the numeric value of the string (as a currency data type )
CurrencyValueFromDynField = CCur(FieldString)
End Function

Dit artikel was TechKnowledge Document ID:10036

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?
Als u op Verzenden klikt, wordt uw feedback gebruikt om producten en services van Microsoft te verbeteren. Uw IT-beheerder kan deze gegevens verzamelen. Privacyverklaring.

Hartelijk dank voor uw feedback.

×