- ベストアンサー
特定のシートが削除されたときにラベルを非表示にしたい
現在Excel VBAでの開発を行っている者です。 そこで、特定のシートを削除したときにラベルを非表示したいのですが、どうしたらいいかわかりません。 どなたかご教授していただけないでしょうか??
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#シートのCalculateイベントを使えばもうちょっと簡単かな... 新規シートを追加してダミーシートとし、A1セルのみに =特定のシート!IV65536 という感じで監視したいシートの参照式を入れ、 ダミーシートのシートモジュールに以下。 (ダミーシートは非表示でも可) Option Explicit Private Sub Worksheet_Calculate() Dim ws As Worksheet Dim x As String With Range("A1") If IsError(.Value) Then x = .Formula On Error Resume Next Set ws = Sheets(Mid$(x, 2, InStr(x, "!") - 2)) On Error GoTo 0 If ws Is Nothing Then .ClearContents MsgBox "削除" Else Application.EnableEvents = False .Formula = "=" & ws.Name & "!IV65536" Application.EnableEvents = True Set ws = Nothing End If End If End With End Sub
その他の回答 (3)
- end-u
- ベストアンサー率79% (496/625)
特定のシートを削除したタイミングを捉えたいという事でしょうか? シート削除イベントそのものは無いですから、代替的なものを仕込む事になります。 例えばThisWorkbookモジュールのSheetActivateイベントが発生した時に『特定のシート』の存在チェックをするなど。 または 'ThisWorkbookモジュール Const chk = "特定のシート" Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) If Sh.Name = chk Then Application.OnTime Now, Me.CodeName & ".shtchk" End If End Sub Private Sub shtchk() Dim ws As Worksheet On Error Resume Next Set ws = Sheets(chk) On Error GoTo 0 If ws Is Nothing Then MsgBox "削除" Else Set ws = Nothing End If End Sub こんなのでもいいかもしれません。 #SheetDeactivateが発生しないVBAコードでの削除には対応していません & #シート名変更の場合を考慮していませんが。
- imogasi
- ベストアンサー率27% (4737/17069)
ラベルって、コントロールの1種のラベルですか。 >開発を行っている と言うレベルの方なら、質問にしっかり書いてください。 それだとして エクセル関連で (2)シート上に貼り付けたもの (2)ユーザーフォームに貼り付けたもの の2つがあり、扱いに差が有るのをご存知か。 ーーー >特定のシートを削除したときに シートが削除されたことを捕まえるイベントが無いようだが。 VBAレベルでは、難しいのではないか。 何かの機会(削除された機会ではない)に現シート名と、有る時期に(例えばオープン時に)記録したシート名と比べて、なくなっているシート名を割り出すことはできても、削除されたタイミングに合わせられない。 シート挿入、行・列の挿入・削除も捉えるイベントがVBAでは無いようだ。 回答が出るか興味あり。
- nattocurry
- ベストアンサー率31% (587/1853)
ラベル、って何ですか?