Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


35046 / 76738 ←次へ | 前へ→

【46895】Re:シート名だけ保護をする方法
発言  Jaka  - 07/2/20(火) 17:01 -

引用なし
パスワード
   >シート名だけ保護をする方法を使いたいです。
無いと思います。

それで、
今、使おうか迷っているコードですけど。
(どんな不具合が出るか解らないから...。)

準備
VBAエディタにて各シートのオブジェクト名を各シート名と同じに
"○○シート", "XXシート", "△△シート"
とかに変更しておく。


標準モジュール

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub シート変更不可(Sh As Object)
Dim Shnm As String, Shcodnm As String, i As Long, ACTAd As String
Dim ShNmGP As Variant
ShNmGP = Array("○○シート", "XXシート", "△△シート")
Shnm = Sh.Name
Shcodnm = Sh.CodeName
If IsError(Application.Match(Shcodnm, ShNmGP, 0)) Then
  Exit Sub
End If
If Shnm <> Shcodnm Then
  ThisWorkbook.Activate
  Sh.Select
  ACTAd = ActiveCell.Address
  For i = 1 To 3
    Cells.Select
    Sleep (100)
    Range(ACTAd).Select
    Sleep (100)
  Next
  MsgBox "シート名の変更不可です。" & vbLf & "現シート名 " & Shnm & vbLf & _
     "元シート名 " & Shcodnm & vbLf & "元に戻します。", vbExclamation, "シート名変更エラー!"
  Sh.Name = Shcodnm
End If
End Sub

Thisworkbookモジュール

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call シート変更不可(ActiveSheet)
End Sub

'Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Call シート変更不可(Sh)
'End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Call シート変更不可(Sh)
End Sub

上記以外で色々考えてみたけれど、
シート名変更のイベントが無いので、
各シートに
=NOW()
こんな関数を書いておいて、シート名の変更直後に起こる再計算イベント(Calculate)を使おうかとか、
SheetChange、SheetActivate、SheetDeactivate・・・他、どのタイミングが良いのか考えましたが、
一筋縄じゃ行きそうに無いので、こんな感じにしました。
でも、まだ使ってません。っていうか、まだどうしようか迷い中。
シート名を変更したら、ダメということでも良いのかいまいち解らないし....。
エラーで処理がとまるのはみっともないとか言うけどね。
実際、操作する人がなにやるか解らないじゃないですか...。
ガチガチも抵抗あるし。
1つ許可するときりがなくなるだろうし。

0 hits

【46893】シート名だけ保護をする方法 みう 07/2/20(火) 16:02 質問
【46894】Re:シート名だけ保護をする方法 Kein 07/2/20(火) 17:00 回答
【46895】Re:シート名だけ保護をする方法 Jaka 07/2/20(火) 17:01 発言
【46896】Re:シート名だけ保護をする方法 みう 07/2/20(火) 17:57 お礼

35046 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free