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 CurrencyDim i As IntegerDim TempChar, TempString As String' Strip off all non-numeric charactersTempString = ""For i = 1 To Len(FieldString)TempChar = Mid(FieldString, i, 1)If InStr("1234567890.,-()", TempChar) > 0 ThenTempString = TempString & TempCharEnd IfNextFieldString = 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.