• ベストアンサー

エクセルVBAのシート削除について

エクセルのワークシートに 「テストシート1」、「テストシート2」、「テストシート3」 があるとします。 誰かにテストシート1が意図的に削除されてしまった場合 同時に「テストシート2」もマクロで削除したいのですが、 どうすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

単純に、手作業での削除に対応するなら、ThisWorkbook Moduleに 'ThisWorkbook Module Option Explicit Const chk = "テストシート1" '監視対象シート名 '------------------------------------------------- Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)   If Sh.Name = chk Then     Application.OnTime Now, Me.CodeName & ".shtchk"   End If End Sub '------------------------------------------------- Private Sub shtchk()   Dim ws As Worksheet   On Error Resume Next   Set ws = Sheets(chk)   On Error GoTo 0   If ws Is Nothing Then     MsgBox "削除されました。"   Else     Set ws = Nothing   End If End Sub ..こんな感じで可能ですが、 シート名を変更しての削除や、マクロでの削除には対応できません。 それにも対応するなら 非表示のダミーシートを準備して、そのA1セルに =テストシート1!IV65536 という数式を入れます。 #2007以降なら =テストシート1!XFD1048576 数式を入れた後、そのダミーシートのSheet Moduleに以下。 'Sheet Module Option Explicit Private Sub Worksheet_Calculate()   Dim ws As Worksheet   Dim x As String   With Range("A1")     If IsError(.Value) Then       x = .Formula       On Error Resume Next       Set ws = Sheets(Mid$(x, 2, InStr(x, "!") - 2))       On Error GoTo 0       If ws Is Nothing Then         .ClearContents         MsgBox "削除されました。"         Me.Visible = xlSheetVisible         Application.DisplayAlerts = False         On Error Resume Next         Sheets("テストシート2").Delete         Me.Visible = xlSheetVeryHidden         Application.DisplayAlerts = True         On Error GoTo 0       Else         Application.EnableEvents = False         .Formula = "=" & ws.Name & "!IV65536" '!XFD1048576         Application.EnableEvents = True         Set ws = Nothing       End If     End If   End With End Sub

machine_angel
質問者

お礼

すばらしいです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCEL VBAでシートを削除したい

    こんにちは。EXCEL VBAのことで質問させていただきます。 マクロでシートを削除しようと思い、 下記のように記述しました。 Sheets(1).Select ActiveWindow.SelectedSheets.Delete しかし、このように記述すると「選択したシートを削除します。~」のようなメッセージが出てきてしまうため、何度もOKボタンを押さなければなりません。これではマクロで自動実行した意味がなくなってしまいます。 このメッセージを回避する方法はないでしょうか。 宜しくお願い致します。

  • VBAのワークシート削除について

    VBAの初心者です。 VBAでワークシートを削除したいのですが、削除するワークシートがある場合とない場合があります。削除するワークシートがある場合は問題なく削除できますが、 ない場合、『インデックスが有効範囲にありません。』でエラーになってしまいます。(削除するワークシートが無いから当然ですが・・・) このような場合、どのように対処したら良いのでしょうか?

  • エクセルのマクロでのシートの削除について

    エクセルのマクロについて エクセル97でファイルを閉じる前にシートを一つ削除するマクロを流そうとしているのですが、 マクロが流れるとシートを削除するかどうかの確認のダイアログが表示されてしまいます。 この確認のメッセージなしでマクロでシートを削除することは出来ないのでしょうか? ----------------- 実際のプログラム ------------------ Sheets(シート名).Select ActiveWindow.SelectedSheets.Delete わかる方がおられましたら宜しくお願い致します。

  • エクセルのマクロで、シートを削除するとき・・・

    エクセルのマクロでシートを削除するとき、 「データが存在する可能性があります。削除しますか?」と確認メッセージが出てきます。そこで、「削除する」というボタンを押さないといけません。 この確認をいちいち出さないで(つまりマクロではその確認は不要。削除するボタンを押す手間を省きたい)、マクロでシート削除をしたいのです。 確認メッセージを出さないでマクロでシート削除する方法を教えてください。お願いします。

  • エクセルのSheet削除について

    お尋ねします。 VBAでマクロを作成中に画像のように「Sheet15」というのが作成されました。 アイコンは「ThisWorkBook」と同じです。 右クリックして「オブジェクトの表示」を選んでも他のシートが表示されます。 エクセルの画面上にはシートとして表示されていません。 削除したいのですが、 右クリックで表示されるメニューの「Sheet15の解放」はグレーアウトして押せません。 削除する方法があれば教えてください。 マクロでの削除でも結構です。 よろしくお願いします。

  • Excel VBAの Functionをワークシートから使用できないようにしたいのですが...

    Excel VBAについて質問です。 functionプロシージャを使っている時,一般のマクロからは呼び出せるが,ワークシート関数として使いたくないものがあります。 すなわち,「関数の挿入」ダイアログの「ユーザー定義」のところに不必要な(ワークシート関数として使う意図のないもの)を表示させたくないのですが,そのようなことは可能でしょうか。 今,できるだけsubプロシージャの形にするようにしたりしているのですが,うまい方法があればFunctionも使いたいと思っています。 良い方法があれば教えてください。

  • ExcelのワークシートをVBAで削除する方法

    Excelのオブジェクトを作り、ワークブックを作りワークシートを1つだけ作り、ワークシートの名前を"abc"にするにはどうしたらよいでしょうか? x=CreateObject("Excel.Application") y=a.Workbooks.Add z=y.Worksheets(1) をやると、シートがExcel標準の3シートつくられます。ここまでは理解できるのですが、上記のsheet1の名前を変更。残りのsheet2,sheet3を削除するにはどうしたらよいでしょうか?

  • ExcelのSheetに作られたMacro1について

    EXCELのシート画面で、Alt+F11を押して、Workbookのイベントによって起動するマクロを記述するモジュールシートを開き、マクロを貼り付けました。 確かに、エクセルを開くと同時にマクロが起動します。便利でびっくりしています。 ところで、これと同時に、Macro1という名のシートが自動的に作成されました。これがわかりません。無視してもかまわないでしょうか。うっかり普通のシートのSheet1などと勘違いして書き込みをしたり、名前を変えたり、削除したりしそうです。もしそうしたらどうなりますか。不都合がありますか。 よろしくお願いします。

  • EXCELのダイアログシートって、なんですか?

    EXCELで、シート見出しの上で右クリックすると、挿入や削除のショートカットメニューが出てきますよね。 そこで、挿入を選択すると標準で、『ワークシート』『グラフ』『EXCEL4.0マクロ』『MS EXCEL5.0ダイアログ』というのが出てきます。 『ワークシート』はワークシートですよね。『グラフ』も、グラフシートと言うことで、すぐにグラフを作成する画面に移行します。 しかし、『EXCEL4.0マクロ』『MS EXCEL5.0ダイアログ』に関してはいまいち使用用途が分かりません。 エクセル上で、マクロを作成したり、そのマクロを登録するコントロールを作成するもの、って言うカンジで受け取ればいいのでしょうか? でも、結局マクロとかは記録作業を行わなければ意味ないですよね? ご存知の方がいらっしゃったら、ぜひ教えてください。

  • エクセルで、マクロを削除したあとも、マクロがあるとメッセージが出る

    エクセルで、ためしにマクロを作ってみようと思い、マクロを作った後、 必要なくなったので、そのマクロを削除しました。 ところが、そのあとも、そのワークシートを開くたびに、「マクロを有効にするか」と聞いてきます。 どうしたら、マクロが削除されていることを、反映できるのでしょうか?教えてください。