こんにちは。VBAの実行時エラーで困っています。
内容を抜粋したものが、下記のものになります。
If Worksheets(sname1).Range("M6") <> Empty Then
MsgBox (sname1)
MsgBox (Worksheets(sname1).Range("M6"))
'該当入力シートの一番下の行を探す
Worksheets(sname1).Range("M65536").End(xlUp).Offset(1).Select
sname1はシート名の変数です。
2つのMsgBoxが間違いなく表示されますので、sname1に存在するシート名は入っていると思います。
今の状態で、該当入力シートの一番下の行を探す時点で実行時エラーが出てしまうのですが、なぜでしょうか?
No.2
- 回答日時:
一見して問題なさそうなので、コード全体を見てみないとわからないですね。
コードの提示は可能ですか?それから、こういうときはステップイン(F8)で実行すると糸口がみつかるかもしれません。
試しに、
Worksheets(sname1).Range("M65536").End(xlUp).Select
のように、Offset を除いてみたらどうなりますか?
ここに載せるため、コードの余計な部分を削除しているうちに、何とか解決できそうになってきました。
お手数をおかけしました、ありがとうございました。
No.3
- 回答日時:
#1 さんの答えで間違いないのですが、基本的なことですが、それは、「標準モジュール」に書かれていないのではありませんか?
ともかく、その点を調べてみてください。
…まさにその通りです。集計するシートのオブジェクトに書いています。
標準モジュールにコピペしたら、問題なく動きました。
もしよろしければ、なぜ違いが出るのかを教えていただけませんでしょうか。
No.5
- 回答日時:
>なぜ違いが出るのかを教えていただけませんでしょうか。
基本的には、マクロは、標準モジュールに書くようにしてくださいね。シート・モジュールに書くものは、シートのイベントやボタン・コントロールのイベントだけにしてください。
その違いですが、#1さんの回答がなぜダメだったかというのは、ちょっと難しいことですが、Rangeオブジェクトには、シートに直結しているものと、そうでないものがあるということです。シート・モジュールに書くとシートに直結してしまうのですね。
Range("M65536").End(xlUp).Offset(1).Select
これは、シートモジュールに書くと、そのシートに属したM65536というアドレスですよ、という意味になってしまいます。別のシートにしてしまうと、そのシートがActiveでないのに、そのシートのセルをSelectしてください、といわれてもできませんという、エラーが出ます。
つまり、SelectやActivateでなければ、問題が出ません。
'<標準モジュール>で書くと
Worksheets(sname1).Select '.Active でも可
'シートをアクティブにして、
Range("M65536").End(xlUp).Offset(1).Select
'自由に選択(Select)することができるようになります。
ただ、これで間違いがないのですが、きちんと書くなら、
やっぱり、#4 のpapayukaさんがお書きになっているように、シートを明示するというのが、プログラムとしての正しい書き方だと思っています。
(以下は、With で省略しています)
With Worksheets(sname1)
.Select
.Range("M65536").End(xlUp).Offset(1).Select
End With
でも、本当に、Selectする必要があるかどうかを見極める、というのが、次の課題になってきますね。
ご丁寧にありがとうございました。
(書く場所ですが、ゆくゆくはボタンコントロールで行う予定のものですので、このままにしておこうかと思っています)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
エクセルの2つのシートを並び...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
EXCELの「シートの見出し」のフ...
-
エクセルのシート連番の振り直し
-
エクセル シート同士の引き算
-
ワークシートそのものの色を変...
-
InputBoxに入力した言葉をシー...
-
エクセルのシー名を二段表示に...
-
エクセル、別のシートの表をポ...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
DATE関数 4月31日などのあ...
-
【ExcelVBA】マクロの入ったシ...
-
Accessのテーブルを既存のExcel...
-
accessへエクセルの複数のシー...
-
エクセルの非表示シートを一括表示
-
Numbersについてお伺いです。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報