Contenuto techknowledge
Domanda: è stato scritto codice VBA che confronta due valori di valuta. Di seguito è riportato un esempio di codice:
If ccur(cost) > ccur(1000) then
Quando questa riga di codice viene eseguita, causa un messaggio di errore di incompatibilità del tipo di dati o di tipo non corrispondente. Le Windows valuta sono attualmente definite come simbolo inglese "sterline" per il simbolo di valuta. Se si modifica il simbolo di valuta in "$", il codice viene eseguito correttamente. Che cosa si verifica qui e c'è un modo per risolvere questo problema?
Risposta: in VBA la funzione Ccur() rispetta sempre le impostazioni di valuta del Pannello di controllo durante la valutazione di questo campo. Poiché l'implementazione di Dynamics VBA passerà sempre i relativi valori di campo come stringhe, questo problema si verifica ogni volta che viene valutato un valore di valuta che non corrisponde alle impostazioni di valuta in Windows. Nel file della Guida di VBA indica che le funzioni di conversione del tipo di dati devono essere usate al posto di Val per fornire conversioni internazionali da un tipo di dati a un altro. Ad esempio, quando si usa la funzione CCur(), separatori decimali diversi, diversi separatori delle migliaia e varie opzioni di valuta vengono riconosciuti correttamente a seconda delle impostazioni locali del computer. In base a queste informazioni, tenere presente questa procedura sull'uso di Microsoft Dynamics GP:-
CCur("œ1000") sarà uguale a una mancata corrispondenza di tipo( ad esempio, questa stringa non è una valuta valida) se l'impostazione Windows Currency non è impostata su "pound".
-
Se è impostato su "pound", CCur("œ1000") restituirà il valore 1000, ma CCur("$1000") sarà uguale a un errore di mancata corrispondenza del tipo.
Il modo migliore per gestire le valute di VBA è scrivere una funzione che converta qualsiasi stringa con simboli non numerici davanti a un valore numerico (o valuta). Ad esempio, in questo modo:
If CurrencyValueFromDynField(cost) > ccur(1000) then
dove la funzione denominata CurrencyValueFromDynField è definita nel modo seguente. Questo codice gestisce correttamente i numeri negativi che hanno segni meno procedenti o finali, racchiusi tra parentesi quadre o che hanno spazi tra il simbolo di valuta e il numero.
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
Questo articolo è stato ID documento TechKnowledge:10036