Logige sisse Microsofti kontoga
Logige sisse või looge konto.
Tere!
Valige mõni muu konto.
Teil on mitu kontot
Valige konto, millega soovite sisse logida.

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

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.

Kas sellest teabest oli abi?

Kui rahul te keelekvaliteediga olete?
Mis mõjutas teie hinnangut?
Kui klõpsate nuppu Edasta, kasutatakse teie tagasisidet Microsofti toodete ja teenuste täiustamiseks. IT-administraator saab neid andmeid koguda. Privaatsusavaldus.

Täname tagasiside eest!

×