• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MSアクセスVBAでメモリ不足?)

MSアクセスVBAでメモリ不足?

このQ&Aのポイント
  • MSアクセスのVBAマクロを使い、テーブルから取得したデータをエクセルブックに貼り付けるアプリを作成しています。
  • しかし、値をセットする際に『実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーです』というエラーが発生します。
  • 問題の原因はメモリ不足かもしれませんが、処理中にエクセルブックを保存したり再度開いたりしてもエラーは解消しません。

質問者が選んだベストアンサー

  • ベストアンサー
  • catpow
  • ベストアンサー率24% (620/2527)
回答No.2

エクセルVBAに限らず、C言語とか、C#でも開発したプログラムを実行していると、よく分らないエラーが発生することあります。 そして「もしかするとメモリ不足かも?」と思えるようなことあります。 でも、そんな予想ができたとしても、あるいは、明確にメモリー不足とエラーが表示されていようが、そのエラーが出ないようにしないといけない・・・。 そして、ソースを見ていても、問題の箇所が見つからない・・・。 こんなときは、エラーが無くなるまでコードを削っていく「消去法」で調べるのが早いでしょう。(元のソースはバックアップしておく) たとえば、 1.テーブルからデータを読み込む 2.データを加工する 3.データをシートに貼り付ける っていう処理を繰り返しているなら、2と3の処理を抜きにして、1.だけを繰りかえしてみる。 これでエラーが出ないなら2.も処理に加えてみる。 それでもエラーが出ないなら3.を加える。ここでエラーが出たら3.が怪しそう、となります。 まあ、こんな感じで問題箇所を絞りこんでいけばいいと思いますね。 ちなみに私も先日、千件~300万件を越えるいくつかのデータをOracleから読んで処理するC#のプログラムを書いてテストしていました。 そうしたら、およそ110万件以下はOKだけど、それを越えるようなデータを処理すると、メモリー不足で中断するデータがいくつか発生しました。 「ソースでは、処理の途中で、確保したメモリを解放しているから、メモリー不足になるはずない!」 と思っていたのですが、上記の方法で調べていたら、実際にはクリアされてない部分があって、そのメモリが肥大化していたようでした。 それをクリアする命令を追加したら正常動作しました。 泥臭い方法だとは思いますが「訳わか」状態になったときは、この手法がいいと思います。

fxgame1224
質問者

お礼

実経験からの的確なアドバイスありがとうございます。 他の方の回答も参考にしながらコピー&ペーストしている箇所をコメントアウトするとエラーは発生しなくなり、原因が絞り込めました。 各シートの中で 1.罫線&書式を揃える為に前の行(x-1行)をコピー 2.(x行に)貼り付け 3.Cells(x,y)value = 取得したデータ 4.Cells(x,y+1)value = 取得したデータ ・・・ というロジックになっており、3.でエラーが発生していました。 おそらく貼り付け処理が完了する前に値をセットしようとしてエラーになっていたものと思われます。 3.と4.の間にDoEvents命令を入れることで解決しました。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

> エクセルに値をセットするステップ(Cells(x,y)value = 取得したデータ)で > 『実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーです』 > というエラーが発生します。 指定したセル番地やシート名などが存在しない時にでるエラーですね。Cells(x,y).valueの xかyが0とかマイナスとか最大行数や列数を超えてるとかですが、次の行でもエラーという事ですので、それとは別のような気もしますが、次の行のコードがわからないので、とりあえず参考までに。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.3

sheetの参照後Nothingで開放してますか?Excelオブジェクトも何度も起動させていることは無いとは思いますが念のため見直してください。 そして何よりもExcel側のタイミングがあってないのでは?Excelを待つ処理を入れるべきでしょう。 シートを移るときにWaitなどで1秒ほど待った方がよいでしょう。

fxgame1224
質問者

お礼

ありがとうございます。 エクセルのタイミングにも気を配らないといけないのですね。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.1

わけのわからないエラーが出るときがありますよね。 データベースの最適化をすると直る時が多々あります。 とくにデータベースが大きくなった時。

fxgame1224
質問者

お礼

ありがとうございます。 今回は別の原因だったようですが、何かのときに思い出して参考にさせて頂きます。

関連するQ&A