さっそくアドバイス、ありがとうございました。
必要なコードだけ、新規ブックにコピーしてみました。
その間に2回フリーズしましたが、[version 1] のおかげで
とりあえず、変更できました。
昨日変更できなかった定数と、Workbook_BeforeSave()
の変数も合わせてパブリックで宣言しました。
この後の返信にコードの抜粋を貼り付けます。
Option Explicit ' 全ての変数に対して、明示的な宣言を強制します(宣言なしで使用不可)
'
'---------------------------------------------------------------------------------
' Public_Declarations Macro (全てのModuleで参照可能な変数・定数)
'---------------------------------------------------------------------------------
'
Public W_Protect As Boolean
Public W_Num(49) As Byte, W_Step As Byte, W_Response As Byte
Public W_Message As String, W_Title As String
Public W_Range As Range, W_Visible(49) As Boolean
Public W_Len As Integer
Public Work_Sheet As Worksheet
Public Const W_MIN_C As Byte = 0
Public Const W_MAX_C As Byte = 49
Public Const W_NULL As String = ""
Public Const W_EXCLAMATION_MARK As String = "!" ' 昨日変更できなかった定数
Public Const W_Dot As String = "."
Option Explicit ' 全ての変数に対して、明示的な宣言を強制します(宣言なしで使用不可)
' Dim W_Range As Range, W_Visible(49) As Boolean
' Const W_EXCLAMATION_MARK As String = "!"
'
'---------------------------------------------------------------------------------
' W_Num_Set Macro
'---------------------------------------------------------------------------------
'
Sub W_Num_Set()
Step_1: ' W_Num(0)~W_Num(49)
Call 数値_Set(W_MIN_C, W_MAX_C)
End Sub
'
'---------------------------------------------------------------------------------
' 数値_Set(最小,最大) Macro
'---------------------------------------------------------------------------------
'
Sub 数値_Set(最小 As Byte, 最大 As Byte)
Step_1:
For W_Step = 最小 To 最大
W_Num(W_Step) = W_Step
Next W_Step
End Sub
Option Explicit ' 全ての変数に対して、明示的な宣言を強制します(宣言なしで使用不可)
'
'---------------------------------------------------------------------------------
' Workbook_Open Macro
'---------------------------------------------------------------------------------
'
Private Sub Workbook_Open()
Step_1: ' W_Num(0)~W_Num(49)
Call 数値_Set(W_MIN_C, W_MAX_C)
End Sub
'
'---------------------------------------------------------------------------------
' Workbook_BeforeSave Macro
'---------------------------------------------------------------------------------
'
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Step_1:
' Dim W_Len As Integer
' Dim Work_Sheet As Worksheet
For Each Work_Sheet In ActiveWorkbook.Worksheets
W_Len = Len(ActiveWorkbook.Name)
Do Until W_Len < W_Num(1)
If Mid(ActiveWorkbook.Name, W_Len, W_Num(1)) = W_Dot Then Exit Do
W_Len = W_Len - W_Num(1)
Loop
Step_2:
Work_Sheet.Range("$A$1").Value = Left(ActiveWorkbook.Name, W_Len - W_Num(1))
Work_Sheet.Range("$A$2").Value = Work_Sheet.Name
Work_Sheet.Range("$A$3").Value = Work_Sheet.Index
Next Work_Sheet
End Sub
Workbook_BeforeSave() のサブルーチンは
何かの本に載っていたので利用していますが、
パブリック宣言を覚えてから Workbook_Open() を
追加しました。
パブリックまたはモジュール変数が変更できないとは
自分でも考えにくいのですが、このコードは至るところで
使用しているし、新規ブックでもフリーズしてしまうので
困っています。
自分では Workbook_Open() でテーブルの初期化をするのがいけないのかと考えて、
その行をコメントにしてからパブリック宣言を追加してもフリーズします。
[version 1] ができる場合と、[ユーザーが前回保存済み]になる場合と
傾向がつかめません。
長々と返信を書きましたが、よろしくお願い致します。