| 
    
     |  | 前に目安箱に載せようと思って書いた途中物まんまですが。 
 ・マクロを無効で開かれたくない。
 
 マクロを無効で開かせたくないテクニックで、ダミーシート1枚作っておいて、マクロを無効で開かれたときは、ダミーシートしか表示されてない方法があります。
 でも、この方法の欠点というか、ブックを閉じる時に必ず上書き保存する方法しか紹介されてません。
 私もこの方法を書いてきたわけですが、どうにも必ず上書き保存されてしまうというのが気に食わないのです。
 
 何も手を加えてない状態に戻したい時などありませんか?
 それを何とか可能にしてみました。
 保存時にダミーシートが短い時間?表示されてしまうけど....。
 やはり、ダミーシート(シート名「ダミー」)は必要です。
 また、環境、PCスペック、ファイルサイズによって、保存時の時間差が出るとうまくいかないとも思いますが....。
 
 
 標準モジュール
 
 Dim ACBk As String
 
 Sub Auto_Open()
 Call 表示
 End Sub
 
 Private Sub 表示()
 Application.ScreenUpdating = False
 For Each Ws In ThisWorkbook.Sheets
 If Ws.Name <> "ダミー" Then
 Ws.Visible = True
 End If
 Next
 With Sheets("ダミー")
 .Visible = xlVeryHidden
 If .Range("IV1").Value <> "" Then
 On Error Resume Next
 Sheets(.Range("IV1").Value).Activate
 Err.Clear
 On Error GoTo 0
 End If
 End With
 Application.ScreenUpdating = True
 End Sub
 
 '------------------
 Thisworkbookモジュール
 
 Dim Flg As Boolean
 
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Flg = True
 End Sub
 
 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Dim Ws As Worksheet, FM As Object 'UserForm XX
 Application.ScreenUpdating = False
 For Each Ws In ThisWorkbook.Sheets
 If Ws.Name = "ダミー" Then
 Ws.Range("IV1").Value = ActiveSheet.Name
 Ws.Visible = True
 Else
 Ws.Visible = xlVeryHidden
 End If
 Next
 If Flg = False Then
 '一応ここら辺が保存時の時間差が出るところ。
 Application.OnTime Now + TimeValue("00:0:01"), "表示"
 End If
 Flg = False
 Application.ScreenUpdating = True
 End Sub
 
 
 |  |