TechKnowledge'i sisu
Küsimus: VBA-kood on kirjutatud, mis võrdleb kahte valuutaväärtust. Allpool on toodud selle koodi näide.
If ccur(cost) > ccur(1000) then
Kui see koodirida käivitub, põhjustab see andmetüübi vastuolu või tüübi lahknevuse tõrketeate. Valuuta Windows valuutasätted on praegu määratletud valuutatähise ingliskeelse sümboliga "pounds". Kui muudan valuutatähiseks "$", käivitub kood edukalt. Mis siin toimub ja kas selle probleemi lahendamiseks on mingi võimalus?
Vastus. VBA-s järgib funktsioon Ccur() alati selle välja hindamisel juhtpaneeli valuutasätteid. Kuna Dynamics VBA-d rakendav rakendus täidab alati oma väljaväärtused stringidena, on see probleem ilmnenud igal ajal, kui hinnatakse valuutaväärtust, mis ei vasta Windows. VBA spikrifailis tähendab see, et andmetüübi teisendamise funktsioone tuleks kasutada väärtuse Val asemel, et pakkuda rahvusvaheliselt teadlikke teisendusi ühest andmetüübist teise. Näiteks kui kasutate funktsiooni CCur(), tuvastatakse olenevalt arvuti lokaadi sättest õigesti erinevad kümnendkoha eraldajad, erinevad tuhandelised eraldajad ja erinevad valuutasuvandid. Selle arusaama kohaselt võtke arvesse microsoft Dynamics GP-ga töötamise kohta järgmist.-
CCur("œ1000") võrdub tüübi lahknevuse (st see string pole sobiv valuuta), kui Windows valuutasätte väärtuseks pole seatud "pound".
-
Kui väärtuseks on seatud "nael", tagastab CCur("œ1000") väärtuse 1000, kuid CCur("$1000") võrdub tüübi lahknevuse tõrkega.
Parim viis VBA valuutadega toime tulla on kirjutada funktsioon, mis teisendab mis tahes mittenumbriliste sümbolitega stringi ees arvuliseks (või valuutaks) väärtuseks. Näiteks:
If CurrencyValueFromDynField(cost) > ccur(1000) then
kus funktsioon CurrencyValueFromDynField on määratletud järgmiselt. See kood käsitleb õigesti negatiivseid numbreid, mis on järjestatud või mille lõpus on miinusmärgid, mis on ümbritsetud nurksulgudega või mille valuutatähise ja arvu vahel on tühikud.
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
See artikkel oli TechKnowledge Document ID:10036