• ベストアンサー

VBA2003: 選択された複数シートを削除したい

複数のワークシートを選択した状態で、次のマクロを動かすと1つのシートしか削除されません。 選択した全てのワークシートを削除したいのですが、コードのどこが間違っているのでしょうか。 Sub TOOL1() Dim objWs As Worksheet Application.DisplayAlerts = False For Each objWs In ActiveWindow.SelectedSheets objWs.Delete Next Application.DisplayAlerts = True End Sub

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

特に問題なく動作しますよ。 ちゃんと複数選択してますか。

masnoske
質問者

お礼

ありがとうございます。 問題解決しませんが、おかげさまでコードの問題ではないことに気付かせていただきました。 コードはアドインにしてツールバーから起動しています。 組み込み方に問題があるのだと思いますので、この質問は一旦締め切らせていただきます。

masnoske
質問者

補足

特定のワークシートは削除したくないので、 For Each ~ Next ループの中で、シート名を判断して削除する・しないを実行します。 ですので、 ActiveWindow.SelectedSheets.Delete は使えません。

関連するQ&A

  • Excel VBAでのシートの削除について

    Excel VBAで、シート上に配置されたボタンをクリックすることで、メッセージを出さずにそのシートの削除をしたいと思っています。 サンプルとして、シート上(例えばSheet1)にボタンを1個配置し、 ------------------------------------------------------- Private Sub CommandButton1_Click() Application.DisplayAlerts = False Delete Application.DisplayAlerts = True End Sub ------------------------------------------------------- のようにすると、オートメーションエラーが起きます。 そこで、 Application.DisplayAlerts = True をコメントアウトしてやれば実行はできるのですが、その後別のシートで処理を行う場合には、再度メッセージを表示してほしいと思っています。 ためしに、Sheet1削除後にアクティブになるSheet2に次のようなコードを記述しました。Sheet1同様、シート上にボタンを1個配置しています。 ------------------------------------------------------- Private Sub CommandButton1_Click() MsgBox Application.DisplayAlerts End Sub Private Sub Worksheet_Activate() MsgBox "次に出るメッセージはアクティブ直後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts Application.DisplayAlerts = True MsgBox "次に出るメッセージは変更後のDisplayAlerts設定。" MsgBox Application.DisplayAlerts End Sub ------------------------------------------------------- こうすれば、Sheet1削除後、アクティブになった直後はDisplayAlertsがFalse。その後設定変更してTrueになるかとおもったのですが、結果はFalseでした。しかしその後、ボタンをクリックするとTrueが返ってきました。 いろいろ調べましたが、なぜこのような結果になるのかわかりません。よろしくお願いいたします。

  • VBA 選択したセルが空白であったらシートを削除

    こんばんは!いつもお世話になっています。 選択したシート1のセル(C9)が空白であったら、選択したシートを削除するマクロ(VBA)を作りましたが、上手く作動しなくて困っています。 どうしたらよいのかよろしくお願い致します。 'シート1のセルC9を選択し、空白か判断する Sub セルの選択()   Worksheets("Sheet1").Activate   Range("C9").Select  If Len(Application.Trim(ActiveCell)) = 0 Then   MsgBox("空白セル")  End If End Sub '現在アクティブなシートを削除する Sub DeleteWorksheet() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub

  • 複数のシートをマクロで印刷

    印刷したい複数のシートをアクティブ状態にして以下のマクロを実行すると、余計に印刷されてしまいます。 Sub Test()  Dim ws As Worksheet  For Each ws In ActiveWindow.SelectedSheets   ActiveWindow.SelectedSheets.PrintOut _   Copies:=1, Collate:=True  Next ws End Sub 例えば、Sheet1とSheet2を選択して実行すると、Sheet1とSheet2が二部ずつ印刷されます。また、Sheet1とSheet2とSheet3を選択して実行すると、それぞれが三部ずつ印刷されます。 それぞれを一部ずつ印刷するためには、マクロをどう直せばいいでしょうか?

  • 選択されているシートを移動したい

    一定ではない複数のシートがあり、 そのうちの右端の1枚は必ず「ファイル集計」というシートになっています。 この、ファイル集計以外のシートを 新しいブックを作って移動させるにはどうしたらいいでしょうか。 あくまでもファイル集計は元のブックに残し それ以外のシートを移動させたいのです。 Sub 入力データを保存して閉じる() Dim ファイルナンバー As String Dim 保存指定フォルダ2 As String Dim mySht As Worksheet With Application .DisplayAlerts = False For Each mySht In Worksheets If mySht.Name <> Sheets("ファイル集計").Name Then mySht.Select False Next .DisplayAlerts = False End With ↑このようなかたちで、選択するところまでは出来たのですが それを新しいブックに移動させるのがうまくいきません。 ChDir "C:\計算\" & 保存指定フォルダ Activesheets.Move ActiveWorkbook.SaveAs Filename:=ファイルナンバー & "D.xls" Application.DisplayAlerts = False   ActiveWorkbook.Close end sub とすると、選択されているシートのうち1枚しか移動できないのです。 教えてください。

  • 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で指定したSheetの削除

    お世話になります 指定したシート以外すべてのシートを削除させるボタンを作成したいのですが ↓こんなものを見つけました。(URLわからくなってしまった;;) これは図1~ワークシートを削除させるVBAらしいのですが ■解らないこと なぜかsheetにすると削除してくれません。 '指定以外ワークシート削除 Private Sub CommandButton1_Click() Dim myShe As Worksheet For Each myShe In Worksheets If myShe.Name <> Worksheets("図").Name Then myShe.Visible = Delete End If Next End Sub

  • エクセルVBAでワークシート削除

    ブックの中にある、表示されているシートで、たとえば図表1~図表4(何番まであるかは不定です)という名前のシートを削除するVBAを作りました。ただの「図表」という名前のシートや、「何々図表」、「図表集計」等のシートは削除しません。 Sub 保存図表削除() Dim SN As String For Each sh In Worksheets SN = sh.Name If sh.Visible And IsNumeric(Mid(SN, 3, Len(SN) - 2)) And Left(SN, 2) = "図表" Then ans = MsgBox(SN & "を削除してよい?", vbYesNo) If ans = vbYes Then Application.DisplayAlerts = False sh.Delete Application.DisplayAlerts = True End If End If Next End Sub これでうまく作動するのですが、いちいちシートごとに削除の有無を聞かずに、削除するシート名をまとめて表示し、それらを削除するかしないかを聞くにはどうすればよいでしょうか? 「図表1,2,3,4があります。これらを削除しますか?」というような感じです。

  • VBAでEXCELのワークシートを削除時に警告メッセージをでないようにしたい。

    ACCESSのVBAでEXCELのワークシートを削除時に警告メッセージをでないようにしたいのですが、 ネットを参考に下記のようにしたのですが、  Application.DisplayAlerts = False  ActiveSheet.Delete  Application.DisplayAlerts = True DisplayAlertsが反転してメソッドまたはデータメンバが見つかりません。とエラーメッセージがでます。 ご存知の方宜しくお願いします。

  • シートにデータがなければ削除するVBA

    こんばんは、VBAについて質問させてください(^O^) あるブックに32個のシートが入っています。 32個のシートのうち、セルA2にデータの入っているシートとそうでない シートがあります。(毎回変動します。) これを踏まえて、セルA2にデータが入っていればそのまま、 入っていなければそのシートを削除。 という作業をVBAでやろうと思って以下の通りVBAを記述したのですが、 シートが削除されるとシートの数が変わってしまうので、これではだめだと 思ったのですが、どのように記述すればいいのか分かりません(T_T) どなたかご教授いただけないでしょうか、よろしくお願いいたします。 Sub Macro1() Application.DisplayAlerts = False Dim i As Integer For i = 1 To 32 Sheets(i).Select If Range("A2").Value = "" Then Sheets(i).Delete End If Next i End Sub

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

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

専門家に質問してみよう