TechKnowledge Content

Otázka: Byl napsán kód jazyka VBA, který porovnává dvě hodnoty měny. Příklad tohoto kódu je uvedený níže:

If ccur(cost) > ccur(1000) then

Při spuštění tohoto řádku kódu se zobrazí chybová zpráva o nekompatibili datového typu nebo neshodě typu. Nastavení Windows měny je aktuálně definováno jako symbol libry v angličtině pro symbol měny. Pokud změním symbol měny na $, kód se úspěšně spustí. Co se tady děje a existuje nějaký způsob, jak tento problém vyřešit? Odpověď: Funkce Ccur() v jazyce VBA vždy respektuje nastavení měny Ovládacích panelů při vyhodnocování tohoto pole. Vzhledem k tomu, že implementace Jazyka VBA Dynamics vždy předá hodnoty polí jako řetězce, budete mít tento problém pokaždé, když se vyhodnotí hodnota měny, která neodpovídá nastavení měny v Windows.V souboru nápovědy jazyka VBA označuje, že funkce převodu datového typu by měly být místo funkce Val použity k poskytování převodů z jednoho datového typu do druhého s mezinárodním povědomím. Když například použijete funkci CCur(), budou v závislosti na nastavení národního prostředí počítače správně rozpoznány různé oddělovače desetinných míst, různé oddělovače tisíců a různé možnosti měny.V tomto principu si všimněte, že pracujete s Microsoft Dynamics GP:

  • CCur("œ1000") se rovná neshodě typu (tj. tento řetězec není platná měna), pokud nastavení Windows Currency není nastavené na "pound".

  • Pokud je nastavená na "pound", vrátí CCur("œ1000") hodnotu 1000, ale CCur("$1000") se rovná chybě neshody typu.

Nejlepší způsob, jak se vypořádat s měnami z jazyka VBA, je napsat funkci, která převede libovolný řetězec s ne numerickými symboly vpředu na číselnou hodnotu (nebo měnu). Třeba takhle:

If CurrencyValueFromDynField(cost) > ccur(1000) then

kde je funkce s názvem CurrencyValueFromDynField definována následujícím způsobem. Tento kód správně zpracovává záporná čísla, která mají znaménka minus, která jsou obklopená hranatými závorkami nebo mají mezery mezi symbolem měny a číslem.

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ánek byl TECHKnowledge Document ID:10036

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.