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