• ベストアンサー

Excelのワークシート削除時のダイアログを表示させない方法

Excel(97)で、ワークシートを削除する時に「選択したシートを削除します。一度削除したシートは・・・」という、警告ダイアログが出ますよね。これを出さずに強制削除する方法はあるのでしょうか? 現在、下記のようなプロシージャを用意し、シート名が要素になっているリストボックス(.MultiSelect = fmMultiSelectMulti)中で選択された全てのシートを削除するダイアログを作成しました。 ところが、選択した数だけ、前述の警告ダイアログが表示され、非常にうっとうしいのです。 どなたか、助けてください。お願いします。 '===現在使用しているプロシージャ=== For i = 0 To ListBox.ListCount - 1  If ListBox.Selected(i) Then   For Each AnySheet In ActiveWorkbook.Sheets    If AnySheet.Name = ListBox.List(i) Then AnySheet.Delete   Next AnySheet  End If Next i

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

  • ベストアンサー
  • kbonb
  • ベストアンサー率51% (254/492)
回答No.2

こんにちは  For~Nextを Application.DisplayAlerts = False Application.DisplayAlerts = True で囲んでみたらいかがでしょうか?

参考URL:
http://www2.odn.ne.jp/excel/
gutiguti
質問者

お礼

できました。DisplayAlertsプロパティですか。 このような機能はある筈だと思って調べていたのですが。。。。 まだまだ勉強不足です。ありがとうございました。

その他の回答 (1)

  • kee
  • ベストアンサー率13% (63/457)
回答No.1

代案です。 削除するシートを別のワークブックへ移動してワークブックをまとめて削除してください。

gutiguti
質問者

お礼

なるほど。これもアイディアですね。 いろいろ工夫してみます。

関連するQ&A

  • リストボックスに表示後、選択したシートを削除する

    初歩的な質問で恐縮ですが、ご教示ください。 リストボックスにすべてのシート名を表示させ、選択したシートのみ削除するマクロを作成したいのですが、エラーメッセージ「オブジェクトが必要」と表示されエラーとなります。どのように変更したらよいのでしょうか?  Private Sub CommandButton1_Click() 'Selectedプロパティを使って、選択されているかどうかを判断して、選択されていたらメッセージボックスにその内容を表示します。 'このメッセージボックスを表示される全シートのうち、選択したシートのみ、削除処理する。 Dim i As Integer With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then MsgBox .List(i) End If Next i End With ' 選択シート削除 '「はい」「いいえ」のアイコンを表示する Btn = MsgBox("選択されたシートが全て消去されます。元にもどりません いいですか?", vbYesNo + vbQuestion, "確認") '「いいえ」の場合は終了します。 If Btn = vbNo Then Exit Sub End If 'リストのうち、選択したシートだけ削除する 'オブジェクトが必要? Workbook.Sheet.[(List(i))].Delete End Sub

  • リストボックスからシート削除のマクロを合体したい

    Windows7 Excel2007でマクロ作成中の初心者です。 やりたいことは、リストボックスからシートを選択し、そのシートを削除する。 削除したら、リストボックスの中の、シート選択状態を解除し、その項目だけを 削除することです。 以下のコードで出来たのですが、これを統合して一個のコードにしたいです。 どうしたらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") If btn = vbYes Then Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True リストボックスの項目削除 End If End If Next i Worksheets(1).Activate End With ActiveWorkbook.Save Application.ScreenUpdating = True End Sub ----------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • EXCEL VBA 配列について

    リストボックスの選択から重複しないリストボックスに値を抽出する コードを作成しました。 しかし、スペックの低いPCで動作させると、処理に時間が かかってしまいます。 配列を使うと処理が早くなるとウェブで調べたのですが、 いまいち理解が出来ません。 やりたいこと ・配列にリストボックスの値を入れる ・配列から重複を削除する? どなたかご教授ください。 コードは下記のようになっています。    If Not UserForm1.ListBox6.Value = 0 Then      For w = UserForm1.ListBox1.ListCount - 1 To 0 Step -1 If Not UserForm1.ListBox6.Value = _ UserForm1.ListBox1.List(w, 5) Then UserForm1.ListBox1.RemoveItem (w) End If Next w    End If For w = UserForm1.ListBox1.ListCount - 1 To 1 Step -1 If UserForm1.ListBox1.List(w - 1, 6) = UserForm1.ListBox1.List(w, 6) Then UserForm1.ListBox1.RemoveItem (w) End If Next w

  • ワークシートの削除

    For SheetSakujo = 3 To SheetCount - 1 Worksheets(SheetSakujo).Select If ActiveSheet.Name <> "★" Then If Range("A2") = "" Then ActiveWindow.SelectedSheets.Delete End If ElseIf ActiveSheet.Name = "★" Then Exit For End If Next VBAでワークシートの削除を行っています。 A2が空白のシートを消そうと思って上記のようなコードをくみましたが、 削除されるとシートが減ってしまうため、次のシートも空白だった場合、消されないで飛ばされてしまいます。 3枚目のシート:空白 4枚目のシート:空白 5枚目のシート:空白     ↓ sheetsakujoが「3」なので3枚目は削除される。 次の4枚目のシートが3枚目が削除されたため、「3番目のシート」になるため、次に削除されるのは5枚目のシート。 この場合、どのようにしたらいいのでしょうか?

  • Excelユーザーフォームでシートの移動

    Excel2007です。 データを集計するためのデータブックがあり、その中に30ほどのシートがあります。 このデータ集計を別に作成したマクロブックから操作しています。 データブックは毎日その日ごとのものが作成されます。 30ほどのシートの中で、その日の集計が終わったシートを選択して、別のシート移動用ファイルに移動させるようにしたいと思い、ユーザーフォームを作成しました。 ユーザーフォームにリストボックスを置き、そこにデータブックにあるシートの一覧が表示されます。 その中で選択したシートを「移動」というコマンドボタンで指定したファイル(この場合はBool2.xlsx)に移動させようとしています。 下記のコードを書いたところ、ユーザーフォームを開いて一度移動の操作でBook2に移動するまではできたのですが、更に別のシートを移動しようとすると 「インデックスが有効範囲にありません」 のエラーが出ます。 ユーザーフォームを一旦閉じて再度開くとエラーなく移動処理できます。 また、移動処理後にリストを再取得する方法がわからなくて、既に移動したシートもリストボックスに表示されたままになります。 ユーザーフォームを閉じることなく続けて移動処理をしたいのと、移動させたものをリストボックスから削除するにはどうしたらよいでしょうか。 ’リストボックスにシート一覧を表示 Private Sub UserForm_Initialize() Dim a As Worksheet ListBox1.MultiSelect = 2 For Each a In Sheets ListBox1.AddItem a.Name Next End Sub ’Book2にシートを移動 Private Sub SheetIdou_Click() Dim i As Integer Dim v() As String Dim k As Integer With ListBox1 ReDim v(1 To .ListCount) For i = 0 To .ListCount - 1 If .Selected(i) Then k = k + 1 v(k) = .List(i) End If Next i If k = .ListCount Then MsgBox "すべてのシートを移動することはできません" Exit Sub End If End With ReDim Preserve v(1 To k) If MsgBox("以下のシートを移動しますか?" & vbLf & Join(v, "/"), vbYesNo, "確認") = vbYes Then Sheets(v).Move After:=Workbooks("Book2.xlsx").Worksheets(1) End If End Sub よろしくお願いいたします<(__)>

  • リストボックスからシート選んで削除したい

    Excel2007でマクロ作成中の初心者です。 以下のマクロを実行すると、最終行でコンパイルエラーがでて 「参照が不正または不完全です」と表示され削除ができません。 どうしたら、削除できるでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、" & name & "さんを削除していいですか?", _ vbYesNo + vbQuestion, "削除の確認をする") End If Next i End With If btn = vbNo Then Exit Sub End If 'Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete 'ActiveWorkbook.Sheet.[(List(i))].Delete 'ActiveWorkbook.Sheets(name).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Delete ' End Sub

  • リストボックスから選択したシートを削除したい

    Excel2007でマクロ作成の初心者です。 リストボックスの選択項目のワークシートを削除したいのですが、 「インデックスが有効範囲にありません。」のエラーが発生し、 先に進めません。どうしたらよろしいでしょうか? ’--------------------- Private Sub 顧客削除_Click() Application.ScreenUpdating = False Unload Me Unload DS請求フォーム Dim i As Integer With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then ' Worksheets(.list(.ListIndex)).Delete Worksheets(Split(.list(.ListIndex - 0), " ")(1)).Activate '←ここでエラー発生 ActiveSheet.Delete End If Next i End With MsgBox "選択の顧客を削除しました。" End Sub ’------------------------- Private Sub UserForm_Initialize() Workbooks("請求.xls").Activate Dim i As Integer Const EXCEPT_NAME = "経理●一覧●基本●" For i = 1 To Worksheets.Count If InStr(EXCEPT_NAME, Worksheets(i).Name & "●") = 0 Then 顧客リスト.AddItem i & " " & Worksheets(i).Name End If Next i End Sub ’----------------------

  • エクセル コードがどうしても早くならない

    いつもお世話になります。 今回は下記コードを記載したのですが、どうにも遅いので何とかする方法があれば との思いから投稿させて頂きます。 ListBox1(590以上の項目があります)をクリックしたら 非対象シートのA列を検索して、ヒットした場合 同シートのB列と同様の数字をListBox2から探し出して チェックを付けて行く。(一応、計算ストップ等のコードは試しましたが変わりません) 基本情報としては 最初に、選択されているかもしれないListBox2のチェックをクリアをします。 ListBoxの1,2は同じ情報を使っています。 なので、ListBox1と同じ情報のListBox2については、最初の方でチェックを 付ける処理をしています。((1)) その後の処理が遅いのですが、ListBox1のどれかをクリックする度に20秒以上 動きが止まってしまうので、何か対策があればどうぞ宜しくお願い致します。 ※なぜか処理が終わるとフォームが消えてしまいます。例えばブラウザを一度アクティブ  にしてからエクセルに戻ると出てくるのですが、何が原因でしょうか? Private Sub ListBox1_Click() Dim RR, HRR As Range Dim SID As Integer ' 'With Application ' .ScreenUpdating = False ' .EnableEvents = False ' .Calculation = xlCalculationManual 'End With '// 選択されているかもしれないListBox2のチェックをクリア For i = 0 To Me.ListBox2.ListCount - 1 ListBox2.Selected(i) = False Next Debug.Print Time; " - 同じ会社にチェックを付けるスタート" '// 同じ会社にチェックを付ける For si = 0 To ListBox2.ListCount - 1 If Me.ListBox2.List(si, 0) = RR Then Me.ListBox2.Selected(si) = True si = 0 Exit For End If Next Debug.Print Time; " - 同じ会社にチェックを付ける終り" Debug.Print Time; " - 非対象シートにある対象外にチェックを付ける スタート" '// 非対象シートにある対象外にチェックを付ける With Sheets("非対象") For Each RR In .Range(.Cells(1, 1), .Cells(.Cells(600000, 1).End(xlDown).Row - 1, 1)) If RR = Me.ListBox1 Then For si = 0 To ListBox2.ListCount - 1 If Me.ListBox2.List(si, 0) = .Cells(RR.Row, 2) Then Me.ListBox2.Selected(si) = True End If Next End If Next End With Debug.Print Time; " - 非対象シートにある対象外にチェックを付ける 終り" End Sub

  • EXCELのVBAにてシート削除の確認を表示させない

    EXCELにてVBAよりシート削除をコーディングしているのですが、 シート削除の確認を表示させない方法は、ありませんか? 例) For Each W_SHEET In Worksheets if W_SHHET.NAME <> "master" Then W_SHEET.DELETE End If Next

  • Excel VBA シート削除の繰り返しにおいて

    EXCEL 2002 シート削除の連続削除において分からない事があるので質問いたします。あるシートのボタンを押すと、そのシートの種族と同じ種族で、種族の子番号が、そのシートよりも大きいものを削除したいと思います。 シート番号 1 スタートページ シート番号 2 種族 1 (textbox1).value 子番号 1 (textbox2).value シート番号 3 種族 2 (textbox1).value 子番号 1 (textbox2).value シート番号 4 種族 2 (textbox1).value 子番号 2 (textbox2).value ← 削除ボタンを押したシート(削除したい) シート番号 5 種族 2 (textbox1).value 子番号 3 (textbox2).value ←削除したい シート番号 6 種族 3 (textbox1).value 子番号 1 (textbox2).value ←削除したくない シートに削除機能を設けると、オートメーションエラーがでてくるので、オートメーションエラーがでないように、標準モジュールに削除プロシージャを作成して、そのプロシージャを呼び出す形をとっています。また、よけいな、注意書き等(削除の時必ずでてきて、連続操作をとめる警告文を防ぐために、 Application.DisplayAlerts = False )を 呼び出すシートモジュールと、呼び出されたモジュールの両方で、設けております。 下記のようにいたしましたが、「オートメーションエラー」のメッセージがでてきて、デバッグ前に実行時のエラーで終わります。 上記の目的を達成するために、オートメーションエラーを表示させずに、無事連続シート削除を達成するにはどうすればよろしいでしょうか。どなたか連続削除の経験等ある方いらっしゃいましたら、お願いいたします。 呼び出すシート側のプロシージャ Private Sub deletebutton_Click() Call delete '削除関数 Application.DisplayAlerts = True End Sub 呼び出された標準モジュール Option Explicit Const worksheets_start As Integer = 2 '削除可能シート番号 (2から削除可能 ' 削除プロシージャ Public Sub delete() Dim no, i, j As Integer Dim ws As Worksheet Application.DisplayAlerts = False ‘余計な警告文をださない。 MsgBox "シートNOを削除いたします。", vbOKCancel If Worksheets.Count < worksheets_start Then ‘シート2以下は削除させない(今回は4から削除 MsgBox "これ以上、削除できるシート番号がありません。" GoTo sayonara Else no = ActiveSheet.Index '削除を指定したページのページ番号取得 i = Worksheets.Count ‘シートの総シート数取得 For j = worksheet_start To Worksheets.Count ‘共通変数のシートスタート( 2 ) '種族2の子番号2以上のシートがあれば、全て削除したい Worksheets(i).Activate   '最終ページにアクティブを移動 If i = worksheets_start Then ' 最終シートからチェック i カウントがスタートページまでいったら終了 Exit For End If If no <> i Then ‘ 削除ボタンを押したシートは念の為消さない If Val(Worksheets(i).TextBox4.Value) = _ Val(Worksheets(no).TextBox4.Value) Then '種族が同じ(同種族) If Val(Worksheets(i).TextBox5.Value) > _ Val(Worksheets(no).TextBox5.Value) Then '同種族の子番号が削除指定したシートの子番号よりも大きい Worksheets(i).delete ‘ 該当シート削除 MsgBox "削除" & I ‘ シートiの削除メッセージ i = i - 1 ‘ シート削除対象を一つ減らす  Else ‘ 子番号が削除ボタンを押したシートの子番号より小さい i = i - 1        End If End If End If Next End If sayonara: Application.DisplayAlerts = True End Sub 参照ページ http://www.big.or.jp/~seto/vbaref/vbaref7.htm​ http://www.relief.jp/itnote/archives/001936.php​ http://oshiete1.goo.ne.jp/qa2782689.html​ みにくくて申し訳ありません。

専門家に質問してみよう