Kirjaudu sisään Microsoft-tilillä
Kirjaudu sisään tai luo tili.
Hei,
Käytä toista tiliä.
Sinulla on useita tilejä
Valitse tili, jolla haluat kirjautua sisään.

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

Tarvitsetko lisäohjeita?

Haluatko lisää vaihtoehtoja?

Tutustu tilausetuihin, selaa harjoituskursseja, opi suojaamaan laitteesi ja paljon muuta.

Osallistumalla yhteisöihin voit kysyä kysymyksiä ja vastata niihin, antaa palautetta sekä kuulla lisää asiantuntijoilta, joilla on runsaasti tietoa.

Oliko näistä tiedoista hyötyä?

Kuinka tyytyväinen olet käännöksen laatuun?
Mikä vaikutti kokemukseesi?
Kun valitset Lähetä, palautettasi käytetään Microsoftin tuotteiden ja palveluiden parantamiseen. IT-järjestelmänvalvojasi voi kerätä nämä tiedot. Tietosuojatiedot.

Kiitos palautteesta!

×