[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートを削除した時の動作』(さき)
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.