Conectați-vă cu Microsoft
Conectați-vă sau creați un cont
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Conținut TechKnowledge

Întrebare: A fost scris codul VBA care compară două valori monetare. Afișat mai jos este un exemplu cu acest cod:

If ccur(cost) > ccur(1000) then

Atunci când se execută această linie de cod, determină un mesaj de eroare de tip de eroare de tip de nepotrivire tip de date sau tip de date nepotrivit. Setările Windows monetare sunt definite în prezent ca simbol de "greutate" în limba engleză pentru simbolul monetar. Dacă modific simbolul monetar în "$", codul rulează cu succes. Ce se întâmplă aici și există vreo modalitate de a rezolva această problemă?


Răspuns: În VBA, funcția Ccur() respectă întotdeauna setările monetare din Panoul de control atunci când evaluează acest câmp. Deoarece implementarea Dynamics VBA va transmite întotdeauna valorile de câmp ca șiruri, veți avea această problemă oricând este evaluată o valoare de monedă care nu se potrivesc cu setările de monedă din Windows.


În fișierul de ajutor VBA, acesta indică faptul că trebuie utilizate funcțiile de conversie a tipului de date în loc de Val pentru a furniza conversii internaționale de la un tip de date la altul. De exemplu, atunci când utilizați funcția CCur(), separatori zecimali diferiți, separatori de mii diferite și diverse opțiuni de monedă sunt recunoscute corect, în funcție de setarea regională a computerului.


Sub această înțelegere, rețineți acest lucru despre lucrul cu Microsoft Dynamics GP:

  • CCur("œ1000") va avea o nepotrivire de tip (adică acest șir nu este o monedă validă) dacă setarea Windows Currency nu este setată la "liră".

  • Dacă este setată la "liră", atunci CCur("œ1000") va returna o valoare 1000, dar atunci CCur("1000 lei") va avea o eroare de nepotrivire tip.

Cea mai bună modalitate de a face față monedelor de la VBA ar fi să scrieți o funcție care va converti orice șir cu simboluri non-numerice în fața unei valori numerice (sau monetare). De exemplu, astfel:

If CurrencyValueFromDynField(cost) > ccur(1000) then

unde funcția denumită CurrencyValueFromDynField este definită după cum urmează. Acest cod gestionează corect numerele negative care au semne minus care continuă sau la urmă, care sunt înconjurate de paranteze sau care au spații între simbolul monetar și număr.

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

Acest articol a fost TechKnowledge Document ID:10036

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?
Apăsând pe Trimitere, feedbackul dvs. va fi utilizat pentru a îmbunătăți produsele și serviciile Microsoft. Administratorul dvs. IT va avea posibilitatea să colecteze aceste date. Angajamentul de respectare a confidențialității.

Vă mulțumim pentru feedback!

×