• ベストアンサー

特定のシートが削除されたときにラベルを非表示にしたい

現在Excel VBAでの開発を行っている者です。 そこで、特定のシートを削除したときにラベルを非表示したいのですが、どうしたらいいかわかりません。 どなたかご教授していただけないでしょうか??

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.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)
回答No.3

特定のシートを削除したタイミングを捉えたいという事でしょうか? シート削除イベントそのものは無いですから、代替的なものを仕込む事になります。 例えば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)
回答No.2

ラベルって、コントロールの1種のラベルですか。 >開発を行っている と言うレベルの方なら、質問にしっかり書いてください。 それだとして エクセル関連で (2)シート上に貼り付けたもの (2)ユーザーフォームに貼り付けたもの の2つがあり、扱いに差が有るのをご存知か。 ーーー >特定のシートを削除したときに シートが削除されたことを捕まえるイベントが無いようだが。 VBAレベルでは、難しいのではないか。 何かの機会(削除された機会ではない)に現シート名と、有る時期に(例えばオープン時に)記録したシート名と比べて、なくなっているシート名を割り出すことはできても、削除されたタイミングに合わせられない。 シート挿入、行・列の挿入・削除も捉えるイベントがVBAでは無いようだ。 回答が出るか興味あり。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

ラベル、って何ですか?

専門家に質問してみよう