Konten TechKnowledge

Pertanyaan: Kode VBA telah ditulis yang membandingkan dua nilai mata uang. Diperlihatkan di bawah ini adalah contoh kode ini:

If ccur(cost) > ccur(1000) then

Saat baris kode ini dijalankan, menyebabkan ketidakcocokan tipe data atau pesan kesalahan tipe ketidakcocokan tipe. The Windows Currency settings are currently defined as English "pounds" symbol for the currency symbol. Jika saya mengubah simbol mata uang ke "$", kode akan berjalan dengan sukses. Apa yang terjadi di sini dan apakah ada cara untuk mengatasi masalah ini? Jawaban: Di VBA, fungsi Ccur() selalu menghargai pengaturan mata uang Panel Kontrol ketika mengevaluasi bidang ini. Karena terapkan Dynamics VBA akan selalu melewati nilai bidangnya sebagai string, Anda akan mengalami masalah ini setiap kali nilai mata uang dievaluasi yang tidak cocok dengan pengaturan mata uang di Windows.Dalam file bantuan VBA, ini menunjukkan bahwa fungsi konversi tipe data harus digunakan, bukan Val untuk memberikan penilaian secara internasional tentang konversi dari satu tipe data ke tipe data lain. Misalnya, ketika Anda menggunakan fungsi CCur(), pemisah desimal berbeda, pemisah ribuan berbeda, dan berbagai opsi mata uang dapat dikenali dengan benar, tergantung pada pengaturan lokal komputer Anda.Di bawah pemahaman ini, perhatikan hal ini tentang bekerja dengan Microsoft Dynamics GP:

  • CCur("œ1000") akan sama dengan ketidakcocokan tipe (misalnya string ini bukan mata uang yang valid) jika pengaturan Mata Uang Windows tidak diatur ke "pound".

  • Jika diatur ke "pound" maka CCur("œ1000") akan mengembalikan nilai 1000, tetapi kemudian CCur("$1000") akan sama dengan kesalahan ketidakcocokan tipe.

Cara terbaik untuk menangani mata uang dari VBA adalah dengan menulis fungsi yang akan mengonversi string apa pun dengan simbol non-numerik di depan ke nilai numerik (atau mata uang). Misalnya, seperti ini:

If CurrencyValueFromDynField(cost) > ccur(1000) then

di mana fungsi yang bernama CurrencyValueFromDynField ditetapkan sebagai berikut. Kode ini dengan benar menangani angka negatif yang telah dilanjutkan atau di belakang tanda minus, yang dia dikelilingi oleh tanda kurung siku, atau yang memiliki spasi antara simbol mata uang dan angka.

Public Function CurrencyValueFromDynField(FieldString As String) As CurrencyDim i As IntegerDim TempChar, TempString As String' Strip off all non-numeric charactersTempString = ""For i = 1 To Len(FieldString)TempChar = Mid(FieldString, i, 1)If InStr("1234567890.,-()", TempChar) > 0 ThenTempString = TempString & TempCharEnd IfNextFieldString = TempString' Return the numeric value of the string (as a currency data type )CurrencyValueFromDynField = CCur(FieldString)End Function

Artikel ini adalah TECHKnowledge Document ID:10036

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.