- ベストアンサー
Excel VBAのエラー原因が分かりません
- データ入力シート「Hit Data」とデータ表示シート「User Sheet」に「次へ」「前へ」「最初へ」「最後へ」とボタンをつくり、データ入力シートからデータを呼び出せるようにするプログラムを作成しましたが、エラーが出てしまいます。
- プログラム中に問題があるかどうか確認するために、エラーメッセージが表示される部分を詳しく調べると、以下のエラーが出ています。
- ・saisyo:アプリケーション定義またはオブジェクト定義のエラーです。 ・saigo:同上 ・mae:オブジェクト変数またはWithブロック変数が設定されていません ・tsugi:同上
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
puyopaさん こんにちは。 > 一度私のファイルを確認していただくことは可能でしょうか? 確認しました。 コードは間違っていないようです。 「Hit Data」シートがなぜか壊れていると思われいます。 ※Worksheets("Hit Data")がエラーを起こしている。 対策としては、 1.「Hit Data」シートをコピーして、別シートを作成する。 2.コピー元のシート「Hit Data」を削除する。 3.コピー後のシート名を「Hit Data」にする。 これで直るかと思います。 エラーを探し出すことが、VBAの技術アップになると思います。 それには、ステップ実行やイミディエート・ウィンドウ等を使ってデバッグの経験を 積むことだと思います。 puyopaさん、色々大変ですが頑張って勉強してください。
その他の回答 (3)
- nayuta_lot
- ベストアンサー率64% (133/205)
こんにちは エラーのでる状況はどういう状況の時にでますか? こちらで試したところ、最初または、最後を一回押した後、前、次を押すと問題なく 動作しました。 エラーは、最初または、最後を押さずに前、または次を押すと 『オブジェクト変数またはWithブロック変数が設定されていません』 がでましたが、 『アプリケーション定義またはオブジェクト定義のエラーです。』 はでませんでした。 理由としては、最初または最後で、Set trg = ・・・を行っているので、この動作を 行わずに、前、または次の動作を行うといきなり、何も格納されていないtrgとの比較 にはいるので、エラーになると思われます。 また、ステップで検証しているときに、途中で■で中断して、前、次の処理を行っても エラーになります。 エクセル起動直後には、最初または最後の処理をしていないので、前、次のボタンを 押すとエラーになります。 一度エラーがでるともう一度、trgにセットする必要がありますので、最初または最後 のようななんらかのtrgにセットする処理が必要になります。 シートがアクティブになった場合に最初の処理をしていますが、起動時に自動的にやる ように、ThisWorkbookモジュールの中に Sub Workbook_Open() Call Saisyo End Sub を入れてしまいましょう。 これをしておけば、最初の処理がマクロ有効時に自動的に 行われます。 もし、エラーがでるようでしたら、状況もあわせて補足してください。 それでは
お礼
いつも回答ありがとうございます。 >エラーのでる状況はどういう状況の時にでますか? 何れのプロシージャでもマクロの実行しようとすると、エラーが発生します。 「最初へ」「最後へ」のコマンド実行時のエラーは、やはり『アプリケーション定義またはオブジェクト定義のエラーです。』で 実行時エラー’32809':と表示されています。 アドバイス頂いたとおりに ThisWorkbookモジュールの中に Sub Workbook_Open() Call Saisyo End Sub を入れてみた所、起動時に『最初』プロシージャで 『アプリケーション定義またはオブジェクト定義のエラーです」』が表示されました。実行時エラー'57121':です。 一度、パソコンの何らかの設定の問題でしょうか。今度違うパソコンで挑戦してみようかなと思います。
補足
私のファイルを下記アプロダに上げさせていただきました。 すみません、まことに申し上げにくいのですが、差し支えなければで結構なのですが、 一度私のファイルを確認していただくことは可能でしょうか? ウィルスソフトでしているパソコンなので、ファイル自体問題はないはずです。 NO4505(※パス等はありません。) http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi
- jcctaira
- ベストアンサー率58% (119/204)
puyopaさん 問題はないと思いますよ。 > オブジェクト変数またはWithブロック変数が設定されていません これが起きる原因は「trg」に設定されていない時になります。 サンプルコードではきちんと設定しているので起きないはずです。 ※シート名の名前が間違っているかもと思いましたが、それだと違うエラーメッセージになります。 提示したコードが全てでなければ「trg」をどこかでクリアーしたり、他に原因あるのだと思われます。 できればステップ実行でどこでエラーになっているのか「trg」にきちんと設定しているのか等を確認してください。
お礼
回答ありがとうございます。 私もtrgが認識されていないのかなって思っています。 なぜ私だけがうまくいかないのか、不可解です。 宣言の仕方を変えてみようかなと思います。
- DreamyCat
- ベストアンサー率56% (295/524)
2010版ですが何の問題もなく実行されます。 (データが転記されますし、エラーも起こりません。データがなければメッセージも出ます。) 版によって動作できないようなコードでもなさそうです。 間違ったところにコードを書いているのではないかと思いますがわかりません。
お礼
回答ありがとうございます。 私はWINDOWS2000ですが、どうしてもうまくいきません。 これ以外にコードは書いておりませんが、どうしてもエラーが出てしまいます。 うーん。悩ましいです。
お礼
jcctaira様のおっしゃる通りにすれば、見事にうまくいきました。 シートが壊れるだなんて、そんな事が起こりえるんですね!? 普通に新規シートを作成して作ったファイルなんですが、なぜ壊れるのかが自分でもよくわかりません。 本当にありがとうございます。 ベストアンサーを選ぶのは難しいのですが、最終的に原因を見つけてくださった jcctaira様 とさせていただきます。 皆様、本当にありがとうございました。