2012-01-21 12 views
0

オーバーフローエラーがよく分かりません。ここではかなり迷っています。double型のExcelでVBAオーバーフローエラーが発生しました

は書き込みがVBAで私は(私はの内臓にアクセスできません)DLLからC++の関数のラッパーでVBA関数を呼び出しています。 VBA/C++関数はdoubleを返します。数値的方法を用いたデリバティブ評価である。時間

昨日(それが今なくなっている場合があります)doubleとして宣言された変数への関数の戻り値を代入しようとしたとき、私はオーバーフローエラーを得ていました。 しかしエラーが停止すると、ローカルウィンドウ(8.17 ...)でダブルに割り当てられた正しい値がわかりました。代わりに、関数の戻り値を代入変数に代入すると、エラーなしで同じ値が得られます。その変種はVariant/Double型です。

何が起こっているのでしょうか?私は完全に失われています。事前に感謝の意を表します。 R

編集:私が試したもう1つのことは、バリアントに割り当てるときに関数戻り値にCDblを適用することでした。ここではいくつかの擬似コードは、ちょうど私の例を明確にするために、です:

Dim db as Double, va as Variant 

db = DerivativeValue(a, b, c...) 

これはオーバーフローを与えるが、dbがエラーで、地元の人々のウィンドウに正しい値を持っています。

va = DerivativeValue(a, b, c...) 

エラーはなく、同じ値です。タイプはバリアント/ダブルタイプ

va = CDbl(DerivativeValue(a, b, c...)) 

もう一度オーバーフローします。私はVAが、この場合の[ローカル]ウィンドウに何をしたか忘れてしまったが、おそらくそれはケース1

答えて

0

私の推測では、関数は、二重のように見えるがない値を返していることにあるのと同じです。

バリアントは任意のタイプの値を取るように設計されており、割り当てによってコンバージョンが実行されます。返り値をdoubleに変換できるので、バリアントへの代入が機能するのだろうかと思います。次しようとした場合どうなります

:これが動作する場合

va = DerivativeValue(a,b,c...) 
db = va 

、それはあなたが関数が実際に返しているものを発見するために待機することなく開発を継続できるようになります。

追加ポイント。 doubleは64ビットの浮動小数点数です。 FPUをお持ちの場合は、80ビットの浮動小数点数が返されている可能性があります。

+0

ありがとうございました。私の間違いは現時点では修正されているようです。しかし、私はこれらを行い、それが再び起こった場合は別の方法で報告します。 – RomnieEE2

関連する問題