|
前に目安箱に載せようと思って書いた途中物まんまですが。
・マクロを無効で開かれたくない。
マクロを無効で開かせたくないテクニックで、ダミーシート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
|
|