
下記マクロだけexcel2021で実行できないのですが、どこを直せば動くでしょうか。。
実行するとちょっと固まってexcelの画面ごと閉じてしまいます。
excel2011では動きます。
他のマクロも入ってるファイルですが、このA列に指定したマクロだけ動きません。
・A列は、ルールに沿った番号以外は入力出来ないようにしている(実行できない)
他の列のセルに計算式が入っています。
D列「=LEFT(A1,10)」
E列「=IFERROR(D1*10+(MOD(D1,7)),"")」
・B列は指定の番号を入力すると指定した文字が入力される(これは実行できる)
---------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("A1:A245")) Is Nothing = False Then
If Val(Worksheets("sheet1").Range("A" & Target.Row).Value) = Val(Worksheets("sheet1").Range("E" & Target.Row).Value) Then
Worksheets("sheet1").Range("A" & Target.Row).Value = "'" & Worksheets("sheet1").Range("A" & Target.Row).Value
Else
MsgBox "番号が違います"
Worksheets("sheet1").Range("A" & Target.Row).Value = "再入力"
End If
ElseIf Intersect(Target, Range("B1:B245")) Is Nothing = False Then
If Worksheets("sheet1").Range("B" & Target.Row).Value = "1" Then
Worksheets("sheet1").Range("B" & Target.Row).Value = "済"
With Worksheets("sheet1").Range("B" & Target.Row)
End With
ElseIf Worksheets("sheet1").Range("B" & Target.Row).Value = "2" Then
Worksheets("sheet1").Range("B" & Target.Row).Value = "未確認"
With Worksheets("sheet1").Range("B" & Target.Row)
End With
End If
Else
Exit Sub
End If
End Sub
---------------------------------------------------------------------------
分かる方いらっしゃいましたら、教えて頂けましたら幸いです。
No.1ベストアンサー
- 回答日時:
イベント処理の基本が全く出来ていない。
これまで動いていたのが奇跡。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A245")) Is Nothing = False Then
If Val(Target.Value) = Val(Range("E" & Target.Row).Value) Then
Application.EnableEvents = False
Target.Value = "'" & Target.Value
Application.EnableEvents = True
Else
MsgBox "番号が違います"
Application.EnableEvents = False
Target.Value = "再入力"
Application.EnableEvents = True
End If
ElseIf Intersect(Target, Range("B1:B245")) Is Nothing = False Then
If Target.Value = "1" Then
Application.EnableEvents = False
Target.Value = "済"
Application.EnableEvents = True
ElseIf Target.Value = "2" Then
Application.EnableEvents = False
Target.Value = "未確認"
Application.EnableEvents = True
End If
End If
End Sub
No.2
- 回答日時:
こんばんは
>どこを直せば動くでしょうか
これは、すでにコードを示されていますので参考にされるのが良いと思います。もっとも、On Error Resume Nextがあるので、実行の初め
On Error Resume Nextの一行下に Application.EnableEvents = False
とプロシージャを抜ける可能性のある Exit Sub と End Subの一行上に
Application.EnableEvents = True を記せば良いと思います。
>このA列に指定したマクロだけ動きません。
A列の変更でA列の変更を行うイベントプロシージャだからです。
つまり、
セルが変更された>>下記を実行
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Range("A1:A245")内が変更された場合、実行条件が成立
If Intersect(Target, Range("A1:A245")) Is Nothing = False Then
Range("A" & Target.Row).Value = "'" & Wo・・・ 又は
Range("A" & Target.Row).Value = "再入力" で
セルが変更されたので
Private Sub Worksheet_Change(ByVal Target As Range)が実行される
Range("A" & Target.Row)はトリガーとなったセルと同じなので実行条件が成立
また、変更され・・Private Sub Worksheet_Change(ByVal Target As Range)が実行される
同じ処理が永遠に繰り返されます。したがってメモリスタックして
>ちょっと固まってexcelの画面ごと閉じてしまいます。
となります。
ちなみにすべての書き込み先がRange("A" & 出なくRange("B" & ならば
If Intersect(Target, Range("A1:A245")) Is Nothing = False Thenの
実行条件に当たらないので Exit Sub または End Sub で終了します
しかし、すべてがRange("A" & 以外であっても
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("A1:A245")) Is Nothing = False Then
は、実行されます。(はじめとVBA処理で書き込みを行う回数)
これは、自身でデバッグすると解ります。
If Intersect(Target, Range("A1:A245")) Is Nothing = False Thenに
ブレイクポイントを設定してA1セルに何か入力します。
VBAの実行はブレークポイントで止まります。
止まっているのを確認しながら、ステップ実行で進めていくと
同じコードを何度も繰り返し処理をして先に進まない事が分かります。
デバッグについては、VBAデバッグ方法などで調べてください。
ちょっとのつもりが長文になってしまいましたが、
イベントをトリガーにした処理の場合、イベント発生を抑止するコード
Application.EnableEvents = False が必須となります。
厳密には、イベントプロシージャのみで良いと言う事では無く、
イベントをトリガーとして使っているブックを操作する場合は、考慮する必要があり、他のプロシージャでも念のため書いて置くとか私はします。
(三種の神器のように別プロシージャでON/OFFしています)
普通のプロシージャの回答などには、ほぼ見かけませんが、VBA処理をいろいろ書いたら処理が遅くなった。などの原因になる可能性もあります
Application.EnableEvents = False のままだとイベントが発生しないので
処理の後は必ず
Application.EnableEvents = True で戻します
デバッグなどでApplication.EnableEvents = Trueを実行出来なかった場合は、イミディエイトウィンドウで実行するか、プロシージャを作成して実行するか、ブックの再起動になります。閉じる時は保存を忘れずに・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBAの記述方法について教えていただけると幸いです。
Visual Basic(VBA)
-
エクセルのマクロで
Visual Basic(VBA)
-
【VBA】特定の文字で改行(次の行)に行きたい。
Visual Basic(VBA)
-
4
3つのプロシージャをまとめたら実行時エラー発生で対応不能
Visual Basic(VBA)
-
5
エクセルVBA タイマーを起こす呪文
Visual Basic(VBA)
-
6
Excelマクロのコードができる方に質問します。
Visual Basic(VBA)
-
7
エラー処理
Visual Basic(VBA)
-
8
VBAで教えて頂きたいのですが?
Visual Basic(VBA)
-
9
VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか?
Visual Basic(VBA)
-
10
vbaのループ処理について
Visual Basic(VBA)
-
11
何故ただのvariant型と定義された配列はvariant型の配列の引数に代入できないのですか?
Visual Basic(VBA)
-
12
VBAのFind関数で結合セルを検索するとヒットしない
Visual Basic(VBA)
-
13
excel マクロで数字を入れると、その前後に文字が入るようにする
Excel(エクセル)
-
14
VBAを書くのにおすすめのテキストツール
Visual Basic(VBA)
-
15
VBAの「for i=1 to cells(…」と「i=cells(…」の違いを教えてください。
Visual Basic(VBA)
-
16
Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1
Visual Basic(VBA)
-
17
VBA ユーザーフォーム
Visual Basic(VBA)
-
18
VBAで教えて頂きたいのですが?
Visual Basic(VBA)
-
19
どのロジックでセルが変更されたか知りたい
Visual Basic(VBA)
-
20
Vba 電卓のテキストボックスに上下に分かれた分数の表示方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
VBAの繰り返し処理について教え...
-
5
ユーザーフォームの書き出しで...
-
6
トレースの方法 十進BASIC
-
7
VBAで不特定枚数印刷をしたいで...
-
8
evcel VBAについて
-
9
ExcelVBA No.を自動連番で設定...
-
10
DDNSを頻繁に使用している方
-
11
ユーザーフォームに2つのコン...
-
12
特定のPCだけ動作しないVBAマク...
-
13
同じ作業を複数のシートに実行...
-
14
VBA シートのボタン名を変更し...
-
15
VBAのコマンドボタンの文字列の...
-
16
ExcelVBAでテキストボックスの...
-
17
別のシートから値を取得するとき
-
18
VBA 変数名に変数を使用したい。
-
19
VBAでループ内で使う変数名を可...
-
20
グラフの交点の求め方(Excel)
おすすめ情報
公式facebook
公式twitter