Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

"TechKnowledge" turinys

Klausimas: parašytas VBA kodas, kuris lygina dvi valiutos reikšmes. Toliau pateiktas šio kodo pavyzdys:

If ccur(cost) > ccur(1000) then

Kai ši kodo eilutė vykdo, ji sukelia duomenų tipo nesuderinamumą arba tipo neatitikimo tipo klaidos pranešimą. Valiutos Windows šiuo metu apibrėžiami kaip valiutos simbolio anglų kalbos "svarų" simbolis. Jei valiutos simbolį pakeisiu į "$", kodas bus sėkmingai vykdomas. Kas čia vyksta ir ar yra koks nors būdas išspręsti šią problemą?


Atsakymas: VBA funkcija Ccur() vertina šį lauką visada gerbia valdymo skydo valiutos parametrus. Kadangi "Dynamics VBA" įdiegtis visada perduos lauko reikšmes kaip eilutes, šią problemą turėsite bet kada įvertinę valiutos reikšmę, kuri neatitinka valiutos parametrų Windows.


VBA žinyno faile jis nurodo, kad duomenų tipo konvertavimo funkcijos turėtų būti naudojamos vietoj Val, kad būtų galima atlikti tarptautiniu mastu žinomas konvertavimo iš vieno duomenų tipo į kitą funkcijas. Pvz., kai naudojate funkciją CCur(), skirtingi dešimtainiai skyrikliai, skirtingi tūkstančių skyrikliai ir įvairios valiutos parinktys tinkamai atpažįstamos atsižvelgiant į kompiuterio lokalės parametrą.


Pagal šį supratimą atkreipkite dėmesį į tai, kaip dirbti su "Microsoft Dynamics GP":

  • CCur("œ1000") bus lygu tipo neatitikimui (t. y. ši eilutė nėra galiojanti valiuta), jei Windows Valiutos parametras nėra nustatytas kaip "svaras".

  • Jei nustatyta reikšmė "pound", CCur("œ1000") grąžins reikšmę 1000, bet tada CCur("$1000") bus lygi tipo neatitikimo klaidai.

Geriausias būdas spręsti vba valiutos klausimą būtų parašyti funkciją, kuri konvertuos bet kurią eilutę su neskaitinėmis simboliais priekyje į skaitinę (arba valiutos) reikšmę. Pvz., pavyzdžiui:

If CurrencyValueFromDynField(cost) > ccur(1000) then

kur funkcija Pavadinimu CurrencyValueFromDynField apibrėžiama taip. Šis kodas tinkamai apdoroja neigiamus skaičius, kurie ima arba užsakina minuso ženklus, kurie yra apsupti skliaustais arba tarp jų yra tarpų tarp valiutos simbolio ir skaičiaus.

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

Šis straipsnis buvo "TechKnowledge" dokumento ID:10036

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×