[[20130524091007]] 『シートを削除した時の動作』(さき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートを削除した時の動作』(さき)

 Excel2010です

 あるブックの中で、いらないシートを削除したら、普通はその隣のシートがアクティブになりますよね。

 これを、シートを削除したら特定のシート(1番先頭の「メニュー」シート)を自動的にアクティブにすることはできますか?

 試しに

  Sub SheetDel()

  Dim i As Variant

    For Each i In Worksheets
        If i.Delete Then
            Sheets("メニュー").Activate
        End If
    Next i

  End Sub

 としてWorkBookモジュールに書いてみましたがダメでした。(標準モジュールでももちろんダメ)

 何か方法がありましたら教えてください。お願いします。

 >ダメでした

 だめだけど、その【ダメでした】が、どのようにだめだったかを説明したほうがいいとおもうよ。

 まず、このコードは、シートを片っ端から削除するよね。
 左側のシート(メニュー)が、最初に削除される。そうすると、それを Activate しようとしてもだめだよねぇ。
 それと、ブック内の全シートを削除できない。このコードでは最後に残ったシートを削除しようとすると
 ブックがなくなってしまう、ないしは、それを回避するとエラーで止まる。そんなこーどだけど、それは意識している?

 いらないシートを、どうやって特定するのか、それを説明すれば、対応コード案はたくさん寄せられると思うよ。

 (ぶらっと)

 先頭のシート以外は削除ってことですか?

 Sub SheetDel()

     Dim i As Long

     For i = Sheets.Count To 2 Step -1
        Application.DisplayAlerts = False
        Sheets(i).Delete
        Application.DisplayAlerts = False
     Next i

 End Sub

 メニューシートが先頭じゃないって場合は

 Sub SheetDel()

     Dim i As Worksheet

     For Each i In Worksheets
        Application.DisplayAlerts = False
        If i.Name <> "メニュー" Then i.Delete
        Application.DisplayAlerts = False
     Next i

 End Sub

 ですかね?
 (se_9)

 先頭のメニューシート以外、任意の1枚(または複数枚)シートを手動で削除したあと、
自動で「メニュー」をアクティブにしたい
 ということだと解釈して、
 試しに ThisWorkbook に 以下をコピーして
 いったん保存して閉じて、再度開いて試してみてください。 

 '------------------- 
 Option Explicit
 Private WithEvents DelSheet As Office.CommandBarButton

 Private Sub Workbook_Open()
    Set DelSheet = Application.CommandBars.FindControl(ID:=847) 'Sheetの削除メニュー
 End Sub

 Private Sub DelSheet_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    Application.DisplayAlerts = False
    If MsgBox("このシートを削除しますか?", vbOKCancel) = vbOK Then
        ActiveSheet.Delete
        Worksheets(1).Activate
    End If
    Application.DisplayAlerts = True
    CancelDefault = True
 End Sub

  (kanabun)  あまり自信はないです。うまくいったらご喝采、程度です


 考慮漏れがあるかもしれないが。

 ThisWorkbookに下記を記入。

 Dim Sheet_Name  As String

 Private Sub Workbook_SheetActivate(ByVal Sh As Object)
     On Error GoTo Sheet_Delete
     Sheet_Name = Worksheets(Sheet_Name).Name
     On Error GoTo 0
     Exit Sub
 Sheet_Delete:
     Worksheets("メニュー").Activate
 End Sub

 Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
     Sheet_Name = Sh.Name
 End Sub
 (ねむねむ)

 皆様、説明不足ですみません。
  (kanabun) 様のおっしゃるように、

 >先頭のメニューシート以外、任意の1枚(または複数枚)シートを手動で削除したあと、
 >自動で「メニュー」をアクティブにしたい

 ということです。

 (ねむねむ)様のコードでうまくいきました。
 ありがとうございました。

 (さき)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.