dポイントプレゼントキャンペーン実施中!

A2から下に値が入れば自動的に数字をいれるというものです。
数字はG2セルに入力された数字の連番となります。
A列2行目に値を入れて、そこから下に選択範囲を伸ばしCtrl+Dでコピーをしています。
その後にA列でコピーをした範囲行で自動的にG2から下に連番が入るとしたいです。


Dim no As Long
Dim r As Long
Dim rmax As Long
no = Range("G2").Value
For r = 3 To Cells(Rows.Count, 1).End(xlUp).Row
Range("G" & r).Value = no + r - 2
Next r

これをWorksheet_Changeで動かそうとしているのですがエラーが出てブックが閉じます。
Rangeメソッドは失敗しました。Globalオブジェクトとでます。


標準モジュールに入れると動くのですが、シートモジュールにいれるとエラ^がでます。
具体的な解決策を教えてください。

A 回答 (2件)

こんにちは


ご質問の内容だけでは、コードに問題があるのか分かりませんが
>Worksheet_Changeで動かそうとしている
との事なので
Worksheet_Changeイベント記載時に必須と思われる処理を追加してみてください
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

処理

Application.EnableEvents = True
End Sub

Application.EnableEventsは処理中に発生するイベントを抑止します
比較的強い命令なのでApplication.EnableEvents = Trueを実行するかアプリケーションを再起動しないと戻らなかったかと思います

テスト中にデバッグが発生してApplication.EnableEvents = True を
実行出来なかった場合は、その後に発生するイベントが実行できない為
プロシージャから単独で実行するか、イミディエイトウィンドウに
Application.EnableEvents = True を記しEnterで実行してください
    • good
    • 0
この回答へのお礼

あははは!と笑いたくなるほどすんなり解決です!
どうも、有難うございます!

お礼日時:2022/05/13 13:37

以下の違いがあるからです。



標準モジュール
 アクティブブックのアクティブシートが対象
ブックモジュール
 アクティブブックのアクティブシートが対象
シートモジュール
 シートモジュールが記述されているシートが対象

Rangeが参照してるシートが違うからです。

解決策:シートを明示する

シート名をsheet1だとすると
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

を追加して
no = ws.Range("G2").Value

For r = 3 To ws.Cells(Rows.Count, 1).End(xlUp).Row

ws.Range("G" & r).Value = no + r - 2

の様に明示する。
    • good
    • 0
この回答へのお礼

なるほど!
ありがとございました!

お礼日時:2022/05/13 13:35

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