人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excel VBAで変数宣言されていないプログラムに’option explicit’をつけて全ての変数に宣言文を付け加えました。
ところがこのプログラムを実行すると「オーバーフロー」エラーが発生してしまいます。
宣言の仕方が悪いと思われるのですがVBAのメモリ管理に関して熟知していないのでよくわかりません。どなたか教えて頂けないでしょうか?
なお、作成したプログラムはXMLを解析するものでループ制御を多用しており、サブルーチンで細かく切り分けています。

●質問者: stray_sheep
●カテゴリ:コンピュータ
✍キーワード:Excel VBA XML エラー オーバーフロー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● upride
●20ポイント

http://google.co.jp/

Google

URLダミーです

宣言仕方がまずかったのではないでしょうか

宣言前は小数が入ってる変数を、int型で宣言してみたり・・

とかが考えられます

◎質問者からの返答

ありがとうございます。

int宣言した変数に少数の値を入れようとした、

ということでしょうか?

今回のプログラムでは小数は出てきませんが

似たようなことをやってしまっているのかも知れませね。調べてみます。


2 ● hidemi
●20ポイント

http://www.keep-on.com/excelyou/2000lng4/200004/00040095.txt

はじめまして。

私の経験としては変数宣言することによって、今まで自動的に型変換されていた変数に、型を超えるデータが詰め込まれ、オーバーフローしたものと思われます。

エラー時に何か変数がオーバーフローした旨のメッセージが表示されていませんか?

単純な話、Int型のループカウンタにLong型のカウンタ値が入ってしまうとか。またあまり参考になるかわかりませんが算術時の場合の回避例が載っているURLを紹介いたします。

http://www.keep-on.com/excelyou/2000lng4/200004/00040121.txt

◎質問者からの返答

はじめまして。ありがとうございます。

やはり、型宣言がまずかったようですね。

オーバーフローと言われて「メモリが解放されていないのでは?」と早とちりしてしまいました。


3 ● kamicha1
●20ポイント

http://www.moug.net/

スキルアップ・問題解決はモーグにおまかせ! 情報コミュニティサイト モーグ

URLは、ダミー(Excel等関連)です。

整数型(Integer)の範囲外の数値を使うのに、整数型(Integer)で変数を宣言しているからではないでしょうか?

Integerではなく、Longにしてみればいいと思います。

たとえば、次のマクロを実行してみてください。

TestNGだけオーバーフローします。

Sub TestNG()

Dim i As Integer

For i = 1 To 32768

i = i + 1

If i > 32760 And i < 32770 Then MsgBox i

Next

MsgBox ”処理結果は” & i & ”です”

End Sub

Sub TestOK()

Dim i As Integer

For i = 1 To 32767 ’整数型(Integer)の範囲は-32768〜32767

i = i + 1

If i > 32760 And i < 32770 Then MsgBox i

Next

MsgBox ”処理結果は” & i & ”です”

End Sub

Sub TestOK2()

Dim i As Long

For i = 1 To 32768 ’長整数(Long)の範囲は-2147483648〜2147483647

i = i + 1

If i > 32760 And i < 32770 Then MsgBox i

Next

MsgBox ”処理結果は” & i & ”です”

End Sub

◎質問者からの返答

サンプルまでつけて頂き、ありがとうございます。

どうやらXML上の日付データを数値として取り込もうとしていたようです。

泥沼にはまる前に助けて頂き、皆さんありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ