Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

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 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á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.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

Děkujeme vám za zpětnou vazbu.

×