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 CurrencyDim i As IntegerDim TempChar, TempString As String' Strip off all non-numeric charactersTempString = ""For i = 1 To Len(FieldString)TempChar = Mid(FieldString, i, 1)If InStr("1234567890.,-()", TempChar) > 0 ThenTempString = TempString & TempCharEnd IfNextFieldString = 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