2017-07-06 15 views
0

MS-AccessデータベースのIPアドレス文字列を操作するための一連のVBA関数を構築していますが、IPアドレスの値が整数変数。私はLong型のみを使用していることを確認しようとしましたが、まだこれらのエラーが発生しています。ここでは、オーバーフローで失敗する非常に簡単なデモがあります。なぜそれがわからないのですか?VBA(Ms-Access)2013オーバーフローエラー

Public Function BigNumber() As Long 
Dim N256 As Long 
N256 = 256 
BigNumber = N256 * N256 * N256 * N256 
End Function 

私は式の条件のいずれかが、製品には小さすぎるが、私はそれがこの例で適用されるかを確認できない場合、VBAはオーバーフローエラーを与える可能性について説明し、他のスレッドを読みました。誰でも説明できますか?

+1

あなたは数学をやっていますか? VBAで長い間有効な値(下限と上限)を確認するためにドキュメントをチェックしましたか?私はあなたがオーバーフローが正しいことを見つけるだろうと思う。 (ヒント:理由のためにIPアドレスが0〜255の間です) –

+0

@RacilHilan:これはおそらく良い考えです。私は今、私の掃除をします。あなたを失望させて申し訳ありません。また今度。 :-) –

+1

64ビットアクセスで実行しており、32ビットアクセスと互換性がある必要がない場合は、「LongLong」変数タイプを使用できます。これは大きな数値と互換性があります。 –

答えて

1

VBAでは、Long変数は-2,147,483,648〜2,147,483,647の値を格納できます。それがオーバーフローするので、あなたの計算の結果は、maxより大きい:= 4294967296

* 256 * 256 256 * 256

+0

はい、私はRTFMをしました。 Integer変数は-2,147,483,648と2,147,483,647の間で、Long変数は-9,223,372,036,854,775,808から9,223,372,036,854,775,807までです。だからそれは問題ではありません。 –

+0

あなたはVBAでそれをどこで読んだのですか?私が知っているプログラミング言語はありませんが、それはロングタイプのための大きなストレージを与えます。それは絶対に間違っています。ここに[Accessのデータ型の公式マイクロソフトのページ](https://support.office.com/en-us/article/Set-the-field-size-ba65e5a7-2e6f-4737-8e72-36b93f966a33)があります。 –

+0

あなたは多くのプログラミング言語を認識していません。 https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/data-types/data-type-summaryを参照してください。しかし、これは答えに私を指摘した。 VBAデータ型はVisual Basicデータ型と異なり、VBA Longデータ型はVisual Basic Integerデータ型のように4バイトで、VBA Integerデータ型は2バイトのみです。ダブルデータ型を使用して私の問題を解決しました。 –

関連する問題