TechKnowledge Content
Kysymys: on kirjoitettu VBA-koodi, jossa verrataan kahta valuutta-arvoa. Alla on esimerkki tästä koodista:
If ccur(cost) > ccur(1000) then
Kun tämä koodirivi suoritetaan, se aiheuttaa tietotyypin yhteensopimattomuutta tai tyyppiristiriidan tyypin virheilmoitusta. Valuutta Windows asetukset määritetään tällä hetkellä englannin "paunan" symbolina valuuttasymbolia varten. Jos vaihdan valuuttasymbolin arvoksi $, koodi suoritetaan onnistuneesti. Mitä tapahtuu täällä, ja onko tämän ongelman ratkaisemiseksi mahdollista ratkaisua?
Vastaus: VBA-funktio Ccur()-funktio noudattaa aina Ohjauspaneelin valuutta-asetuksia, kun se arvioi tätä kenttää. Koska Dynamics VBA ottaa käyttöön sen kenttäarvot aina merkkijonoina, tämä ongelma ilmenee aina, kun arvioidaan valuutta-arvo, joka ei vastaa Windows.
VBA-ohjetiedostossa se ilmaisee, että tietotyypin muuntofunktioita tulee käyttää Val-funktion sijaan kansainvälisten muunnoksen suorittamiseen yhdestä tietotyypistä toiseen. Jos esimerkiksi käytät CCur()-funktiota, eri desimaalierottimet, eri tuhaterottimet ja erilaiset valuutta-asetukset tunnistetaan oikein tietokoneen kieliasetuksen mukaan.
Ota huomioon tämä Microsoft Dynamics GP:n käyttöön liittyen:
-
CCur("æ1000") on yhtä suuri kuin tyyppiristiriita (eli tämä merkkijono ei ole kelvollinen valuutta), jos Windows Valuutta-asetukseksi ei ole määritetty "ruutu".
-
Jos arvoksi on määritetty "ruutu", CCur("æ1000") palauttaa arvon 1 000, mutta CCur("$1000") on yhtä suuri kuin tyyppiristiriitavirhe.
Paras tapa käsitellä VBA:n valuuttoja on kirjoittaa funktio, joka muuntaa edustalla merkkijonon, jossa on ei-numeerisia merkkejä, numeerisiksi arvoksi (tai valuutta-arvoksi). Esimerkiksi näin:
If CurrencyValueFromDynField(cost) > ccur(1000) then
jossa CurrencyValueFromDynField-funktio määritetään seuraavasti. Tämä koodi käsittelee oikein negatiiviset luvut, joissa on etu- tai lopussa olevat miinusmerkit, joita ympäröivät hakasulkeet tai joissa on välilyöntejä valuuttatunnuksen ja luvun välissä.
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
Tämä artikkeli oli TechKnowledge Document ID:10036