Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

TechZnáme obsah

Otázka: Napísaný kód VBA porovnáva dve hodnoty meny. Nižšie je uvedený príklad tohto kódu:

If ccur(cost) > ccur(1000) then

Po vykonaní tohto riadka kódu sa zobrazí chybové hlásenie o nekompatibilite typu údajov alebo nezhode typu údajov. Nastavenie Windows mena je momentálne definované ako symbol mriežky pre symbol meny v angličtine. Ak zmením symbol meny na $, kód sa úspešne spustí. Čo sa tu deje a existuje nejaký spôsob, ako vyriešiť tento problém?


Odpoveď: Funkcia Ccur() v jazyku VBA pri vyhodnocovaní tohto poľa vždy rešpektuje nastavenia meny ovládacieho panela. Keďže implementácia jazyka Dynamics VBA vždy prejde hodnoty polí ako reťazce, tento problém sa vyskytne vždy, keď sa vyhodnotí hodnota meny, ktorá nezodpovedá nastaveniam meny v Windows.


V súbore Pomocníka VBA znamená, že funkcie na konverziu údajových typov by sa mali používať namiesto funkcie Val na poskytovanie konverzie jedného údajového typu na druhý s medzinárodnou možnosťou. Ak napríklad použijete funkciu CCur(), v závislosti od miestneho nastavenia počítača sa správne rozpozná rôzne oddeľovače desatinných miest, oddeľovače tisícov a možnosti meny.


Pod týmto princípom si všimnite nasledovné informácie o práci s aplikáciou Microsoft Dynamics GP:

  • Hodnota CCur("pomôžete1000") sa bude rovnať nezhode typu (t. j. tento reťazec nie je platnou menou), ak nastavenie Windows Mena nie je nastavené na hodnotu libra.

  • Ak je nastavený na hodnotu libra, potom hodnota CCur("pomôžete1000") vráti hodnotu 1 000, ale potom hodnota CCur("$1000") sa bude rovnať chybe nezhody typov.

Najlepším spôsobom, ako sa zaoberať menami z jazyka VBA, je napísať funkciu, ktorá prekonvertuje reťazec s nečíselnou hodnotou na číselnú hodnotu (alebo menu). Napríklad takto:

If CurrencyValueFromDynField(cost) > ccur(1000) then

pričom funkcia s názvom CurrencyValueFromDynField je definovaná nasledovne. Tento kód správne spracováva záporné čísla, ktoré majú v zátvorkách znamienko mínus alebo ktoré sú medzi symbolom meny a číslom, medzery.

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

Tento článok bol TechZnámená identifikácia dokumentu:10036

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×