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 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
Ez a cikk a következő volt: TechKnowledge Document ID:10036