TechKnowledge コンテンツ

質問: 2 つの通貨値を比較する VBA コードが記述されています。 このコードの例を次に示します。

If ccur(cost) > ccur(1000) then

このコード行を実行すると、データ型の非互換性または型の不一致型エラー メッセージが発生します。通貨Windows設定は、現在、通貨記号の英語の "ポンド" 記号として定義されています。 通貨記号を "$" に変更すると、コードは正常に実行されます。 ここで何が起こっていますか。この問題を回避する方法はありますか? 回答: VBA では、Ccur() 関数は、このフィールドを評価するときにコントロール パネルの通貨設定を常に尊重します。 Dynamics VBA の実装では常にフィールド値が文字列として渡されます。そのため、Windows の通貨設定と一致しない通貨値が評価される場合は常に、この問題が発生します。VBA ヘルプ ファイルでは、国際的に認識されているデータ型から別のデータ型への変換を提供するために、Val の代わりにデータ型変換関数を使用する必要があることを示します。 たとえば、CCur() 関数を使用すると、コンピューターのロケール設定に応じて、小数点区切り記号、桁区切り記号、さまざまな通貨オプションが正しく認識されます。この理解の下で、Microsoft Dynamics GP の操作について次の点に注意してください。

  • Windows Currency 設定が "pound" に設定されていない場合、CCur(" 1000") は型の不一致と等しくなります (つまり、この文字列は有効な通貨ではありません)。

  • "pound" に設定されている場合、CCur(" 1000") は値 1000 を返しますが、CCur("$1000") は型の不一致エラーと等しくなります。

VBA から通貨を扱う最善の方法は、数値以外の記号を持つ文字列を数値 (または通貨) 値に変換する関数を記述する方法です。 たとえば、次のようになります。

If CurrencyValueFromDynField(cost) > ccur(1000) then

ここで、CurrencyValueFromDynField という名前の関数は次のように定義されます。 このコードは、進むか末尾にマイナス記号が付いた負の数、角かっこで囲まれている負の数、通貨記号と数値の間にスペースがある負の数を正しく処理します。

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

この記事は TechKnowledge Document ID:10036 でした

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。