Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Περιεχόμενο TechKnowledge

Ερώτηση: Έχει συνταχθεί κώδικας VBA που συγκρίνει δύο νομισματικές τιμές. Εμφανίζεται παρακάτω ένα παράδειγμα αυτού του κώδικα:

If ccur(cost) > ccur(1000) then

Όταν εκτελείται αυτή η γραμμή κώδικα, προκαλεί μια ασυμβατότητα τύπου δεδομένων ή ένα μήνυμα σφάλματος τύπου ασυμφωνίας. Οι Windows νομισματικής μονάδας ορίζονται αυτή τη στιγμή ως αγγλικό σύμβολο "λίρες" για το σύμβολο νομισματικής μονάδας. Εάν αλλάξω το σύμβολο νομισματικής μονάδας σε "$", ο κώδικας εκτελείται με επιτυχία. Τι συμβαίνει εδώ και υπάρχει τρόπος να επιλύσετε αυτό το πρόβλημα;


Απάντηση: Στη VBA, η συνάρτηση Ccur() σέβεται πάντα τις ρυθμίσεις νομισματικής μονάδας του Πίνακα Ελέγχου κατά την αξιολόγηση αυτού του πεδίου. Δεδομένου ότι η εφαρμογή Dynamics VBA θα μεταβιβάσει πάντα τις τιμές πεδίου ως συμβολοσειρές, θα έχετε αυτό το πρόβλημα κάθε φορά που υπολογίζεται μια τιμή νομισματικής μονάδας που δεν συμφωνεί με τις ρυθμίσεις νομισματικής μονάδας στο Windows.


Στο αρχείο βοήθειας της VBA, υποδεικνύει ότι οι συναρτήσεις μετατροπής τύπου δεδομένων θα πρέπει να χρησιμοποιούνται αντί για το Val για την παροχή διεθνώς γνώσεων μετατροπών από έναν τύπο δεδομένων σε έναν άλλο. Για παράδειγμα, όταν χρησιμοποιείτε τη συνάρτηση CCur(), διαφορετικά διαχωριστικά δεκαδικών ψηφίων, διαφορετικά διαχωριστικά χιλιάδων και διάφορες επιλογές νομισματικής μονάδας αναγνωρίζονται σωστά, ανάλογα με τις τοπικές ρυθμίσεις του υπολογιστή σας.


Στο πλαίσιο αυτής της κατανόησης, σημειώστε το εξής σχετικά με την εργασία με το Microsoft Dynamics GP:

  • Η CCur("œ1000") θα ισούται με ασυμφωνία τύπου (π.χ. αυτή η συμβολοσειρά δεν είναι έγκυρη νομισματική μονάδα) εάν η ρύθμιση νομισματικής μονάδας του Windows δεν έχει οριστεί σε "δίεση".

  • Εάν έχει οριστεί σε "δίεση", τότε η συνάρτηση CCur("œ1000") θα επιστρέψει μια τιμή 1000, αλλά, στη συνέχεια, η συνάρτηση CCur("1000 $") θα ισούται με ένα σφάλμα ασυμφωνίας τύπου.

Ο καλύτερος τρόπος για να ασχοληθείτε με νομίσματα από τη VBA θα ήταν να συντάξετε μια συνάρτηση που θα μετατρέψει οποιαδήποτε συμβολοσειρά με μη αριθμητικά σύμβολα μπροστά σε μια αριθμητική τιμή (ή νομισματική μονάδα). Για παράδειγμα, ως εξής:

If CurrencyValueFromDynField(cost) > ccur(1000) then

όπου η συνάρτηση με το όνομα CurrencyValueFromDynField ορίζεται ως εξής. Αυτός ο κώδικας χειρίζεται σωστά τους αρνητικούς αριθμούς που έχουν σύμβολα μείον, που βρίσκονται μέσα σε αγκύλες ή που έχουν διαστήματα μεταξύ του συμβόλου νομισματικής μονάδας και του αριθμού.

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

Αυτό το άρθρο ήταν Αναγνωριστικό εγγράφου TechKnowledge:10036

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

Οι κοινότητες σάς βοηθούν να κάνετε και να απαντάτε σε ερωτήσεις, να δίνετε σχόλια και να ακούτε από ειδικούς με πλούσια γνώση.

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×