データ入力シート「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・・・同上
No.4ベストアンサー
- 回答日時:
puyopaさん こんにちは。
> 一度私のファイルを確認していただくことは可能でしょうか?
確認しました。
コードは間違っていないようです。
「Hit Data」シートがなぜか壊れていると思われいます。
※Worksheets("Hit Data")がエラーを起こしている。
対策としては、
1.「Hit Data」シートをコピーして、別シートを作成する。
2.コピー元のシート「Hit Data」を削除する。
3.コピー後のシート名を「Hit Data」にする。
これで直るかと思います。
エラーを探し出すことが、VBAの技術アップになると思います。
それには、ステップ実行やイミディエート・ウィンドウ等を使ってデバッグの経験を
積むことだと思います。
puyopaさん、色々大変ですが頑張って勉強してください。
jcctaira様のおっしゃる通りにすれば、見事にうまくいきました。
シートが壊れるだなんて、そんな事が起こりえるんですね!?
普通に新規シートを作成して作ったファイルなんですが、なぜ壊れるのかが自分でもよくわかりません。
本当にありがとうございます。
ベストアンサーを選ぶのは難しいのですが、最終的に原因を見つけてくださった jcctaira様 とさせていただきます。
皆様、本当にありがとうございました。
No.3
- 回答日時:
こんにちは
エラーのでる状況はどういう状況の時にでますか?
こちらで試したところ、最初または、最後を一回押した後、前、次を押すと問題なく
動作しました。
エラーは、最初または、最後を押さずに前、または次を押すと
『オブジェクト変数またはWithブロック変数が設定されていません』
がでましたが、
『アプリケーション定義またはオブジェクト定義のエラーです。』
はでませんでした。
理由としては、最初または最後で、Set trg = ・・・を行っているので、この動作を
行わずに、前、または次の動作を行うといきなり、何も格納されていないtrgとの比較
にはいるので、エラーになると思われます。
また、ステップで検証しているときに、途中で■で中断して、前、次の処理を行っても
エラーになります。
エクセル起動直後には、最初または最後の処理をしていないので、前、次のボタンを
押すとエラーになります。
一度エラーがでるともう一度、trgにセットする必要がありますので、最初または最後
のようななんらかのtrgにセットする処理が必要になります。
シートがアクティブになった場合に最初の処理をしていますが、起動時に自動的にやる
ように、ThisWorkbookモジュールの中に
Sub Workbook_Open()
Call Saisyo
End Sub
を入れてしまいましょう。 これをしておけば、最初の処理がマクロ有効時に自動的に
行われます。
もし、エラーがでるようでしたら、状況もあわせて補足してください。
それでは
この回答への補足
私のファイルを下記アプロダに上げさせていただきました。
すみません、まことに申し上げにくいのですが、差し支えなければで結構なのですが、
一度私のファイルを確認していただくことは可能でしょうか?
ウィルスソフトでしているパソコンなので、ファイル自体問題はないはずです。
NO4505(※パス等はありません。)
http://www.kent-web.com/pubc/book/test/uploader/ …
いつも回答ありがとうございます。
>エラーのでる状況はどういう状況の時にでますか?
何れのプロシージャでもマクロの実行しようとすると、エラーが発生します。
「最初へ」「最後へ」のコマンド実行時のエラーは、やはり『アプリケーション定義またはオブジェクト定義のエラーです。』で 実行時エラー’32809':と表示されています。
アドバイス頂いたとおりに
ThisWorkbookモジュールの中に
Sub Workbook_Open()
Call Saisyo
End Sub
を入れてみた所、起動時に『最初』プロシージャで 『アプリケーション定義またはオブジェクト定義のエラーです」』が表示されました。実行時エラー'57121':です。
一度、パソコンの何らかの設定の問題でしょうか。今度違うパソコンで挑戦してみようかなと思います。
No.2
- 回答日時:
puyopaさん
問題はないと思いますよ。
> オブジェクト変数またはWithブロック変数が設定されていません
これが起きる原因は「trg」に設定されていない時になります。
サンプルコードではきちんと設定しているので起きないはずです。
※シート名の名前が間違っているかもと思いましたが、それだと違うエラーメッセージになります。
提示したコードが全てでなければ「trg」をどこかでクリアーしたり、他に原因あるのだと思われます。
できればステップ実行でどこでエラーになっているのか「trg」にきちんと設定しているのか等を確認してください。
回答ありがとうございます。
私もtrgが認識されていないのかなって思っています。
なぜ私だけがうまくいかないのか、不可解です。
宣言の仕方を変えてみようかなと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String""から型'Double'への変...
-
UserForm1.Showでエラーになり...
-
On ErrorでエラーNoが0
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
VBでSQL文のUPDATE構文を使った...
-
【Access】Excelインポート時に...
-
Excel vbaについての質問
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
実行時エラー 438 の解決策をお...
-
ExecuteNonQueryメソッドの戻り値
-
ActiveCell.FormulaR1C1の変数
-
VB.NETでMessageBoxが表示され...
-
文字列内で括弧を使うには
-
エクセルVBAで今まで使えていた...
-
【VBAエラー】Nextに対するFor...
-
VBA データ(特定値)のある最...
-
Excel VBA のFunctionプロシー...
-
ApplicationとWorksheetFunctio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
ActiveCell.FormulaR1C1の変数
-
ApplicationとWorksheetFunctio...
-
「実行時エラー '3167' レコー...
-
【VB.NET】 パワポ操作を非表示で
-
フランスの生年月日(jj/mm/aaaa)
-
【マクロ】 IFERROR関数をマク...
おすすめ情報