Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

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

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×