Pierakstīties, izmantojot Microsoft
Pierakstīties vai izveidot kontu
Sveicināti!
Atlasīt citu kontu.
Jums ir vairāki konti
Izvēlieties kontu, ar kuru vēlaties pierakstīties.

TechKnowledge saturs

Jautājums: VBA kods ir rakstīts, kas salīdzina divas valūtas vērtības. Tālāk ir parādīts šī koda piemērs:

If ccur(cost) > ccur(1000) then

Ja tiek izpildīta šī koda rindiņa, tas izraisa nesaderības datu tipu vai tipa neatbilstības tipa kļūdas ziņojumu. Šīs Windows valūtas iestatījumi pašlaik ir definēti kā angļu valodas mārciņas simbols valūtas simbolam. Ja mainīju valūtas simbolu uz "$", kods tiek sekmīgi izpildīts. Kas šeit notiek, un vai ir kāds veids, kā novērst šo problēmu?


Atbilde: VBA gadījumā funkcija Ccur() vienmēr ievēro vadības paneļa valūtas iestatījumus, novērtējot šo lauku. Tā kā Dynamics VBA ieviešana vienmēr nodod tās lauku vērtības kā virknes, šī problēma rodas katru reizi, kad tiek novērtēta valūtas vērtība, kas neatbilst valūtas iestatījumiem Windows.


VBA palīdzības failā tas norāda, ka datu tipa konvertēšanas funkcijas ir jāizmanto, nevis Val, lai nodrošinātu starptautisku konvertēšanu no viena datu tipa uz citu. Piemēram, ja izmantojat funkciju CCur(), dažādi decimāldaļu atdalītāji, dažādi tūkstošu atdalītāji un dažādas valūtas opcijas tiek pareizi atpazītas atkarībā no datora lokalizācijas iestatījuma.


Ņemiet vērā šo informāciju par darbu ar Microsoft Dynamics GP:

  • CCur("œ1000") būs vienāda ar tipa neatbilstību (t.i., šī virkne nav derīga valūta), ja Windows valūtas iestatījums nav iestatīts uz "mārciņa".

  • Ja tas ir iestatīts uz "mārciņa", CCur("œ1000") atgriezīs vērtību 1000, bet pēc tam CCur("$1000") būs vienāda ar tipa neatbilstības kļūdu.

Labākais veids, kā rīkoties ar VBA valūtām, ir rakstīt funkciju, kas konvertēs jebkuru virkni ar simboliem, kas nav skaitliski, par skaitlisku (vai valūtas) vērtību. Piemēram, šādi:

If CurrencyValueFromDynField(cost) > ccur(1000) then

kur funkcija Ar nosaukumu CurrencyValueFromDynField tiek definēta šādi. Šis kods pareizi apstrādā negatīvos skaitļus, kas ir turpināti vai beigu mīnusa zīmes, kas ir iekavās vai kuros ir atstarpes starp valūtas simbolu un skaitli.

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 raksts bija TechKnowledge dokumenta ID:10036

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.

Kopienas palīdz uzdot jautājumus un atbildēt uz tiem, sniegt atsauksmes, kā arī saņemt informāciju no ekspertiem ar bagātīgām zināšanām.

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar valodas kvalitāti?
Kas ietekmēja jūsu pieredzi?
Nospiežot Iesniegt, jūsu atsauksmes tiks izmantotas Microsoft produktu un pakalpojumu uzlabošanai. Jūsu IT administrators varēs vākt šos datus. Paziņojums par konfidencialitāti.

Paldies par jūsu atsauksmēm!

×