• ベストアンサー

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

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

noname#14563
noname#14563

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

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

以下のようにすればいいみたいです。 Application.DisplayAlerts = False '確認メッセージを表示しない ActiveWindow.SelectedSheets.Delete 'ワークシートを削除する Application.DisplayAlerts = True '確認メッセージを表示する 参照URLの 10)の下の方に書かれています。

参考URL:
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv251.html
noname#14563
質問者

お礼

ご返答ありがとうございました。 教えて頂いた方法で解決することが出来ました。 また何かありましたら宜しくお願い致します。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

回答は#1出ています。 ○別の面で下記心配になりました。 貴殿のプログラムの骨子は下記と思います。 Sub test01() Sheets(1).Delete End Sub Sheets()の()内の「1」の意味は、大丈夫ですか。「一番左に表示されている シートを削除する」だと記憶します。Sheets(2)なら左から2つ目にシートタブがあるシートが削除される。一応当方でテスト済み。このように表示順序に依存 するプログラムで大丈夫ですか。操作者がシートタブを入れ替えたらプログラマの意図と反しませんか。 ○面倒と言うこと、VBAは操作者の介入を極力排除することもわかりますが、警告なしには危険がないか慎重に考えるべきであるのでは。

noname#14563
質問者

補足

プログラム仕様は、プログラム自体がデータを操作する為のダミーシートを「一番最後」に追加し、それを削除するというもので、実際には下記の通りに記述しています。 Sheets(Sheets.Count).Delete > Sheets(2)なら左から2つ目にシートタブがあるシートが削除される。一応当方でテスト済み 当然当方でもテスト済み。 > 警告なしには危険がないか慎重に考えるべきであるのでは。 当然考慮済みです。

関連するQ&A

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

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

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

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセルVBA、MsgBOXで入力した2つのシート番号で挟まれたシートをすべて消去したい。

    マクロ自動記録で複数シートのDeleteを試してみると、   Sheets(Array("Sh20", "Sh19", "Sh18")).Select   Sheets("Sh18").Activate   ActiveWindow.SelectedSheets.Delete となって、シート名を個別に指定する必要が出てくる。 シートの左から18枚目から20枚目とか、15枚目から40枚目とか MsgBOXで入力した2つの数字で指示したいのですが、良い方法はありませんか? ちなみに、MsgBoxでA=15,B=40を入力して、   mysh = A   For Sh=1 to B-A+1   Sheets(Array(mysh)).Select   ActiveWindow.SelectedSheets.Delete   next とやったら、シート1枚消すごとに、 「データがあります。消してよいですか?」のメッセージが出てきて、 作業が面倒です。 一括して消す方法がないでしょうか?

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • EXCEL 2000のマクロで質問

    ECXEL 2000のマクロで分からない点があるので 教えてください。 下記のマクロを実行して、シートSheet2,Sheet3を削除したいのですが 実行すると、"選択したシートを削除します。一度削除すると元に戻すことは 出来ません OK キャンセル"とのダイアログが出てきてしまいます。 このダイアログを表示させずに削除を実行させるにはどうすればいいのでしょうか。 ヘルプを参照して調べましたがどうも分かりません。 詳しい方、アドバイスをお願いします。 Sheets(Array("Sheet2", "Sheet3")).Select ActiveWindow.SelectedSheets.Delete

  • VBAにて

    お世話になります。 VBAでプログラムを作成しています。 その中で下記の記述にて、エクセルのシートを 削除したい部分があるのですが、Msgboxで、 「選択したシートに、データが存在する可能性があります。  データを完全に削除するには、「削除」をクリックしてください。」 と出るメッセージをVBAの記述により出ない様に したいのですが・・。 その方法を教えてください。 宜しくお願い致します。      記 ActiveWindow.SelectedSheets.Delete

  • マクロでシートを削除する際、メッセージを省略したい

    質問です。例えば、マクロで ActiveWindow.SelectedSheets.Delete とする時、シートを削除するかどうか、必ずメッセージが出ますよね。 これを省略し、連続でシートを消すようなマクロを組みたいのですが、 何か良い方法がありますでしょうか? それとも、データの喪失の危険があるため不可能なのでしょうか。 ご存じの方、ご教授宜しくお願いします。

  • マクロの記録で作ったルーチンが動きません

    EXCEL2002で「マクロの記録」を使ってこんなマクロを作りました。 <マクロ> Sub Macro1() Sheets("ABC").Select Sheets("ABC").Copy Before:=Sheets(1) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("ABC").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.Delete End Sub これをコマンドボタンの押下に組込、こんなサブルーチンにしました。 <サブルーチン> Private Sub CommandButton3_Click() Sheets("ABC").Select Sheets("ABC").Copy Before:=Sheets(1) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("ABC").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.Delete End Sub これを実行すると4行目のCells.Selectで   実行時エラー'1004'   RangeクラスのSelectメソッドが失敗しました。 となって止まってしまいます。 ■■質問■■ なぜでしょう?<マクロ>の方はエラーになりません。 ■■追加の質問■■ 一方、マクロの方は   選択したシートに、データが存在する可能性があります。データを完全に削除する   には、[削除]をクリックしてください。 となってしまいます。このメッセージを回避する方法ははありますか?

  • Excelマクロにてシートの削除を行いたいです。

    初めて投稿させて頂きます。 質問内容  Excelのマクロを使用して指定シート以外のシートの削除を行いたいです。 前条件  外部CSVファイルを取込み、データによってシートを追加して振り分けています。  再度マクロを実行した場合特定のシートを残し(フォーマット等)、他のシートを削除してからデータの振り分けを実施する予定です。 やってみた事  下記の様に書いて実施してみたのですがエラーとなってしまいます。 Sub Clear()   Application.DisplayAlerts = False   For I = 1 To Worksheets.Count     If (Worksheets(I).Name <> "sheet") Then       Sheets(Worksheets(I).Name).Select       ActiveWindow.SelectedSheets.Delete     End If   Next I   Application.DisplayAlerts = True End Sub 上記の書き方だと1シート毎削除なので、選択したシートを一括で削除出来るとうれしいです。 どなたかご存知の方お願いします。

  • エクセルVBAで全シートをアクティブにするには?

    ブック内の全シートを選択するのはSheets.Selectですね。 そうやって選択した全部のワークシートをアクティブにするにはどう記述するのでしょうか? SelectedSheets.Activateや Sheets.Activateではエラーになってしまいました。 何をしたいかといえば、全シートをアクティブにしてページ設定(横向きに)したいのです。

専門家に質問してみよう