TechKnowledge Content

Kérdés: A VBA-kód két pénznemértéket hasonlít össze. Az alábbi képen egy példa látható erre a kódra:

If ccur(cost) > ccur(1000) then

Amikor a program végrehajtja ezt a kódsort, az adattípus-inkompatibilitást vagy típuselomlást okozó hibaüzenetet okoz. A Windows pénznem jelenleg angol "font" szimbólumként van definiálva a pénznemszimbólumhoz. Ha a pénznemszimbólumát "$" jelre módosítom, a kód sikeresen lefut. Mi történik itt, és van valamilyen módszer a probléma megoldására? Válasz: A VBA-ban a Ccur() függvény mindig figyelembe veszi a Vezérlőpult pénznembeállítását a mező értékelésekor. Mivel a Dynamics VBA-implement minden esetben karakterláncokként adja át a mezőértékeket, ez a probléma bármikor meg fog egy olyan pénznemértéket kiértékelni, amely nem felel meg a helyi Windows.A VBA-súgófájlban az jelzi, hogy a Val függvény helyett az adattípus-konverziós függvényeket kell használni a nemzetközi szinten is jól ható konverziókhoz az egyik adattípusról a másikra. A CCur() függvény használata esetén például a különböző tizedeselválasztók, ezresválasztók és pénznem-beállítások felismerése a számítógép területi beállításaitól függően megfelelő.Ebben a témakörben a Microsoft Dynamics GP alkalmazással kapcsolatos tudnivalókat jegyezze fel:

  • A CCur("œ1000") típuseltérés (azaz ez a karakterlánc nem érvényes pénznem), ha a Windows Pénznem beállítás nincs "font" értékűre állítva.

  • Ha a "font" értéket adja meg, akkor a CCur("ã1000") függvény 1000 értéket ad vissza, de a CCur("100 000 Ft") hibatípus-eltérést jelez.

A VBA pénznemei esetén a legjobb megoldás egy olyan függvény írása, amely a nem numerikus szimbólumokat tartalmazó karakterláncokat numerikus (vagy pénznem) értékre konvertálja. Például így:

If CurrencyValueFromDynField(cost) > ccur(1000) then

ahol a CurrencyValueFromDynField nevű függvény az alábbiak szerint van definiálva. Ez a kód megfelelően kezeli az olyan negatív számokat, amelyekben a következő vagy záró mínuszjel látható, szögletes zárójelek között vannak, vagy szóközöket tartalmaznak a pénznemszimbólum és a szám között.

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

Ez a cikk a következő volt: TechKnowledge Document ID:10036

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.

A közösségek segítségével kérdéseket tehet fel és válaszolhat meg, visszajelzést adhat, és részletes ismeretekkel rendelkező szakértőktől hallhat.