プロが教える店舗&オフィスのセキュリティ対策術

データ入力シート「Hit Data]
データ表示シート「User Sheet」
とあります。

データ表示シート「User Sheet」に「次へ」「前へ」「最初へ」「最後へ」とボタンをつくり、データ入力シート「Hit Data]から、都度データを呼び出せるようにするプログラムをとあるサイトを参考にして作成しましたが、エラーが出てしまいどうしてもうまくいきません。

どこに問題があるのか見ていただけないでしょうか?



'以下標準モジュールのプログラムです

Public trg As Range
Sub Saisyo()
 Set trg = Worksheets("Hit Data").Range("A3")
 Call Tenki
End Sub

Sub Saigo()
 Set trg = Worksheets("Hit Data").Range("A60000").End(xlUp)
 Call Tenki
End Sub

Sub Mae()
 If trg.Row >= 4 Then
  Set trg = trg.Offset(-1, 0)
  Call Tenki
 Else
  MsgBox "これより前のレコードはありません"
 End If
End Sub

Sub Tsugi()
 If trg.Row < Worksheets("Hit Data").Range("A60000").End(xlUp).Row Then
  Set trg = trg.Offset(1, 0)
  Call Tenki
 Else
  MsgBox "これより後ろのレコードはありません"
 End If
End Sub

Sub Tenki()
 Worksheets("User Sheet").Range("D9").Value = trg.Offset(0, 0)
 Worksheets("User Sheet").Range("D10").Value = trg.Offset(0, 1)
 Worksheets("User Sheet").Range("D11").Value = trg.Offset(0, 2)
 Worksheets("User Sheet").Range("D12").Value = trg.Offset(0, 3)
End Sub


'以下 User Sheet"のシートモジュールに記載されたプログラムです。

Private Sub Worksheet_Activate()
Call Saisyo
End Sub


'表示されるエラーの内容
'saisyo・・・アプリケーション定義またはオブジェクト定義のエラーです。
'saigo・・・同上
'mae・・・オブジェクト変数またはWithブロック変数が設定されていません
'tugi・・・同上

A 回答 (4件)

puyopaさん こんにちは。



> 一度私のファイルを確認していただくことは可能でしょうか?
確認しました。

コードは間違っていないようです。
「Hit Data」シートがなぜか壊れていると思われいます。
※Worksheets("Hit Data")がエラーを起こしている。

対策としては、
1.「Hit Data」シートをコピーして、別シートを作成する。
2.コピー元のシート「Hit Data」を削除する。
3.コピー後のシート名を「Hit Data」にする。

これで直るかと思います。

エラーを探し出すことが、VBAの技術アップになると思います。
それには、ステップ実行やイミディエート・ウィンドウ等を使ってデバッグの経験を
積むことだと思います。

puyopaさん、色々大変ですが頑張って勉強してください。
    • good
    • 1
この回答へのお礼

jcctaira様のおっしゃる通りにすれば、見事にうまくいきました。

シートが壊れるだなんて、そんな事が起こりえるんですね!?

普通に新規シートを作成して作ったファイルなんですが、なぜ壊れるのかが自分でもよくわかりません。

本当にありがとうございます。

ベストアンサーを選ぶのは難しいのですが、最終的に原因を見つけてくださった jcctaira様 とさせていただきます。

皆様、本当にありがとうございました。

お礼日時:2011/07/23 23:04

こんにちは



エラーのでる状況はどういう状況の時にでますか?
こちらで試したところ、最初または、最後を一回押した後、前、次を押すと問題なく
動作しました。

エラーは、最初または、最後を押さずに前、または次を押すと

 『オブジェクト変数またはWithブロック変数が設定されていません』

がでましたが、

 『アプリケーション定義またはオブジェクト定義のエラーです。』

はでませんでした。

理由としては、最初または最後で、Set trg = ・・・を行っているので、この動作を
行わずに、前、または次の動作を行うといきなり、何も格納されていないtrgとの比較
にはいるので、エラーになると思われます。

また、ステップで検証しているときに、途中で■で中断して、前、次の処理を行っても
エラーになります。

エクセル起動直後には、最初または最後の処理をしていないので、前、次のボタンを
押すとエラーになります。

一度エラーがでるともう一度、trgにセットする必要がありますので、最初または最後
のようななんらかのtrgにセットする処理が必要になります。

シートがアクティブになった場合に最初の処理をしていますが、起動時に自動的にやる
ように、ThisWorkbookモジュールの中に

Sub Workbook_Open()

Call Saisyo

End Sub

を入れてしまいましょう。 これをしておけば、最初の処理がマクロ有効時に自動的に
行われます。

もし、エラーがでるようでしたら、状況もあわせて補足してください。
それでは

この回答への補足

私のファイルを下記アプロダに上げさせていただきました。

すみません、まことに申し上げにくいのですが、差し支えなければで結構なのですが、
一度私のファイルを確認していただくことは可能でしょうか?

ウィルスソフトでしているパソコンなので、ファイル自体問題はないはずです。

NO4505(※パス等はありません。)
http://www.kent-web.com/pubc/book/test/uploader/ …

補足日時:2011/07/23 21:29
    • good
    • 0
この回答へのお礼

いつも回答ありがとうございます。

>エラーのでる状況はどういう状況の時にでますか?

何れのプロシージャでもマクロの実行しようとすると、エラーが発生します。

「最初へ」「最後へ」のコマンド実行時のエラーは、やはり『アプリケーション定義またはオブジェクト定義のエラーです。』で 実行時エラー’32809':と表示されています。

アドバイス頂いたとおりに
ThisWorkbookモジュールの中に

Sub Workbook_Open()

Call Saisyo

End Sub

を入れてみた所、起動時に『最初』プロシージャで 『アプリケーション定義またはオブジェクト定義のエラーです」』が表示されました。実行時エラー'57121':です。


一度、パソコンの何らかの設定の問題でしょうか。今度違うパソコンで挑戦してみようかなと思います。

お礼日時:2011/07/23 18:38

puyopaさん



問題はないと思いますよ。

> オブジェクト変数またはWithブロック変数が設定されていません
これが起きる原因は「trg」に設定されていない時になります。
サンプルコードではきちんと設定しているので起きないはずです。
※シート名の名前が間違っているかもと思いましたが、それだと違うエラーメッセージになります。

提示したコードが全てでなければ「trg」をどこかでクリアーしたり、他に原因あるのだと思われます。
できればステップ実行でどこでエラーになっているのか「trg」にきちんと設定しているのか等を確認してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私もtrgが認識されていないのかなって思っています。
なぜ私だけがうまくいかないのか、不可解です。
宣言の仕方を変えてみようかなと思います。

お礼日時:2011/07/23 09:25

2010版ですが何の問題もなく実行されます。


(データが転記されますし、エラーも起こりません。データがなければメッセージも出ます。)

版によって動作できないようなコードでもなさそうです。
間違ったところにコードを書いているのではないかと思いますがわかりません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私はWINDOWS2000ですが、どうしてもうまくいきません。
これ以外にコードは書いておりませんが、どうしてもエラーが出てしまいます。
うーん。悩ましいです。

お礼日時:2011/07/23 09:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!