• ベストアンサー

マクロで発生するエラーを無視するには

x0000xの回答

  • x0000x
  • ベストアンサー率52% (67/127)
回答No.2

こんばんは。 エラーを表示しないで、処理をスキップするなら 以下の様に「On Error Resume Next」を追加します。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) On Error Resume Next エラー時は、次行から処理します。 次行の If Not (r Is Nothing) Then により、条件が成立しないため、何も処理されません。

rem_1982
質問者

お礼

回答ありがとうございます。 無事(?)、エラーを無視してくれました。 今回はエラー回避の方向でも沢山回答をいただけたので、回避を考えてみることにします。 しかしこの「エラーを無視する」って記述を知ってしまうと、 とりあえずモノだけ完成させたい、って時に乱用してしまいそうです(苦笑)。

関連するQ&A

  • イベントマクロで「コンパイルエラー 因数は省略できません」

    マクロ初心者です イベントマクロを作りました Sheet2の結合されたB44:E44のセルに入力すると自動的にマクロが働いて Sheet1のW1の値のみがSheet2の結合されたB44:E44のセルに貼り付けられるマクロなのですが 実行すると「コンパイルエラー 因数は省略できません」と表示されます マクロ自体は正しく動いているのですがどういうことなんでしょう Sheet2 Worksheet Change Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub Application.EnableEvents = False Sheets(1).Select Range("W1").Copy Sheets(2).Select Range("B44:E44").Select ActiveSheet.Paste Application.CutCopyMode = False Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range)…この行が黄色になります If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub…intersectのところが青くなります こんな説明でわかってもらえるでしょうか?

  • ThisWorkBookモジュールとSheetモジュールの両立

    エクセル2003でマクロを組んでいます。 Sheet1,Sheet2の2つのシートがあり、 片方のシートの"A4:G10"の範囲に値を書き込むと、もう片方の同じ位置に同じ値が書き込まれるようなマクロを組みたいです。 以前ここで教えていただいたものを改変して以下を作りました(ThisWorkBookモジュールです)。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim r As Range Dim Num As Integer Dim S As String, Sh_name As String Sh_name = ActiveSheet.Name Set r = Intersect(Target, Range("A4:G10")) If Not (r Is Nothing) Then Application.EnableEvents = False For Num = 1 To 2 S = "Sheet" & Num If S <> Sh_name Then Worksheets(S).Range(r.Address).Value = r.Value End If Next Application.EnableEvents = True End If End Sub ここまでは正常に動作します。 また、 Sheet1とSheet2のモジュールに、 A列のセルに値が入力された場合、同じ行のC列のセルの色を塗るという記述をしています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Cells(Target.Row, 3).Interior.ColorIndex = 5 End If End Sub これらを同時に生かしたいのですが、 どのように書けばいいでしょうか。 EnableEvents = False/Trueを消してしまうと、 Worksheets(S).Range(r.Address).Value = r.Valueが実行されるたびにThisWorkBookモジュールが動いているようです。 そして2回目のSet r = Intersect(Target, Range("A4:G10"))でエラーが出ます。 (エラーは出ずとも延々と(無限ではない回数)ThisWorkBookモジュールを繰り返したコードもありました。) よろしくお願いします。

  • エクセルのマクロについて

    以前、こちらのマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub Application.EnableEvents = False Range("a3:ba28").Replace What:="=*!", Replacement:=Target.Value, LookAt:=xlPart Application.EnableEvents = True End Sub 指定した範囲を(A1)セルに入力した値に置換するマクロを教えていただいたんですが、現在,、これを使ってsheet1の指定範囲内にある(=あ!$AR$75)などが入力してある部分のシート名を置換してデータ内容の変更を行っています。 しかし、この方法だと、シート名の文字数を指定しなくてはならなくて、自分以外の人が操作すると、エラーを出してしまうことがあり困っています。そこでchangeイベントをやめて、シート名の確認をしてからマクロの実行を行うには、どういったマクロにすればいいですか?? 説明が分かりづらくすみません・・・・・・。 もし他にシートの文字数などにこだわらなくてもよい方法があれば教えてください。 よろしくお願いします。

  • エクセル・マクロについて

    以下のマクロはセルA1~A100にて1が表示されると音(Beep)が鳴るというものです。これを下記(1)(2)ができるように修正したいです。ご教示お願いします。 (1)音(Beep)と同時にセルA1~A100のどのセルにて1が表示されたかわかるようにしたいです。メッセージボックスなどにて表示させるにはどのように修正すれば良いですか? 例.A12で1が表示されたら音が鳴りメッセージボックスにA12と表示される。続いてA55で1が表示されたら音が鳴りメッセージボックスにA55と表示される、みたいに・・・。 (2)音がBeepですが、これ以外に音を変更させることは可能ですか? 音は何でもいいです。(ピーとかポロンなど) ※このマクロはシート右クリック→コードの表示で開いた所に打ち込んでいます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Variant Dim r As Range Dim c As Variant On Error GoTo EndLine i = Null Set r = Target.DirectDependents For Each c In Range("A1:A100").Cells If Not Intersect(r, c) Is Nothing Then i = c.Value Exit For End If Next c Application.EnableEvents = False If i = 1 Then Beep End If Set r = Nothing EndLine: Application.EnableEvents = True

  • セルの同期を取る

    Book内のシートの一部のセルにおいて、同期を取りたいです。 存在するシート名が、SheetA1,SheetA2,SheetB1,SheetB2,SheetC1,SheetC2の時、 SheetA1とSheetA2、SheetB1とSheetB2、SheetC1とSheetC2が、任意のセル範囲の値を共有したいです。 (SheetA1のセルA1に数字を入れたら、SheetA2のセルA1に同じ数字が入るように) 過去ログから以下のソースを見つけて「ThisWorkbook」に書き込んで使っていますが、 たまにエラーが起こって止まってしまいます。 必ず起こるわけではないのでエラーが起こる条件がいまいちわからないのですが、 起こる瞬間は、セルに数値を入力後、シートを切り替えた時に発生します。 (エラーが起こった時に数値を入力したセルは、同期を取っているセル範囲とは限りません) エラーメッセージは、 実行時エラー'1004': 'Intersect'メソッドは失敗しました:'_Global'オブジェクト です。 「ヘルプ」も見てみようと押してみたのですが、ウィンドウが開くだけで中身は表示されませんでした。 「デバッグ」を実行すると、※印をつけた Set r = Intersect(Target, Range(CellRange)) の行が選択されます。 どういった条件でエラーが発生するのかわかりますでしょうか? Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim r As Range Dim i As Integer Dim ActSheet As String Dim CellRange As String ActSheet = ActiveWorkbook.ActiveSheet.Name '現在開いているシート名を取得 ActSheet = Left(ActSheet, 6) 'シート名の頭から5文字を取得 If ActSheet = "SheetA" Then '現在開いているシートがSheetA*の時に CellRange = "A4:G3004" '同期を取るセルの範囲を指定 ElseIf ActSheet = "SheetB" Then CellRange = "A3:E3003" ElseIf ActSheet = "SheetC" Then CellRange = "A4:F3004" Else Exit Sub End If Application.EnableEvents = False If Target.Areas.Count = 1 Then '変更のあったセルが1つである場合 ※ Set r = Intersect(Target, Range(CellRange)) If Not (r Is Nothing) Then CopyToSheets r, ActSheet End If Else For i = 1 To Target.Areas.Count '変更のあったセルが複数の場合 Set r = Intersect(Target.Areas(i), Range(CellRange)) If Not (r Is Nothing) Then CopyToSheets r, ActSheet End If Next End If Application.EnableEvents = True End Sub Private Sub CopyToSheets(ByVal r As Range, ByVal ActSheet As String) Dim Num As Integer Dim OffSheet As String For Num = 1 To 2 OffSheet = ActSheet & Num Worksheets(OffSheet).Range(r.Address).Value = r.Value Next End Sub

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • マクロでシート名を変更を変更したい

    A1セルの値をシート名にするマクロは以下のとおりだと思います。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value End Sub では、E6セルの値をシート名にすることは可能でしょうか? よろしくお願いします。

  • エクセルチャート操作のマクロのエラー

    エクセルマクロ初心者です。グラフの縦軸をセルの値の変化に合わせて変化するよう(対照のセルはB1とB2で変化します。)下記のマクロをネット検索してモジュールに貼り付け機能するようになったのですが、シートに保護をかけると、「実行時エラー ー214767259(80004005): MaximumScaleメソッドは失敗しましたAxisオブジェクト のメッセージが出て機能しません。 Worksheet_SelectionChange(ByVal Target As Range) If Range(A1) <> "" Then Call AxesSet End Sub Sub AxesSet() Dim oChart As ChartObject Set oChart = Worksheets("Sheet1").ChartObjects(1) With oChart.Chart.Axes(xlValue, xlPrimary) .MaximumScale = Worksheets("Sheet1").Range(B1) .MinimumScale = Worksheets("Sheet1").Range(B2) .DisplayUnit = xlThousands .HasDisplayUnitLabel = False .MinorTickMark = xlInside End With End Sub 対照セルの保護の問題かと思い、セルのロックを解除したり、マクロから保護を解除するなど検索してみたのですが上手くいきません。シートを保護してもマクロが機能する解決方法お教えください。

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • セル範囲に変化があったときに日付けが入るマクロ

    お世話になっております。 以前、A1からS19までのセルに変化があったときに日付けが入るマクロについて、 この掲示板で質問させていただいた者ですが、さらに伺いたいことがあります。 そのときは、以下のプログラムを教えていただきました。 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("A1:S19"))   application.enableevents = false    cells(h.row, "T") = date   application.enableevents = true  next end sub しかし、質問の時点でご指摘のあったことではあったのですが、このプログラムだと 値を変更したとき、セルをダブルクリックして編集可能にしたときだけではなく、 A列からS列に列を挿入したとき、又は列を削除したときも一斉にT列に日付け が入ってしまいます。 列の挿入・削除の場合は、日付けが入らないようにすることは可能でしょうか? 教えていただけると幸いです。よろしくお願いいたします。