"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