| 
    
     |  | ▼みーちゃんキャット さん: 
 >すみません。途中行き詰って、そこからようやく質問が見えてきました。
 これからは質問が見えてから質問して下さいね。
 そうじゃないとそのつもりがあろうとなかろうと事実上丸投げですから。
 
 で、本題ですが、
 ちょっとその前に、本当にこのまんま書いているんでしょうか?
 userformモジュールに。。。
 もしそうだとしたら、間違いではないが、お行儀の悪い書き方です。
 ・・・後でスキルが上がった自分が見た時分かりにくい。
 標準モジュールに広域スコープを持つプロシージャ、変数の宣言をした方が
 わかり易い書き方です。
 
 
 >Bookを閉じると、チェックBoxに付けたチェックマークが保持できません。
 >再度Bookを開いても、チェックを付けた以降は、そのダイアログを開かないようにするには、どうしたら
 >宜しいでしょうか?
 ですが、方法としては、どこかにチェックのデータを物理的に保持しておくより
 他ないです。具体的にはハードディスク上のexcelbookなり、ファイルなりに。
 
 私の好みの方法を書くと、古い方法ですが、設定ファイルというものを使用します。
 
 ※取り敢えず動くみたいですが、
 ササッと書いたので少ししか確認してません。その点、悪しからず。
 動かんかったら言って下さい。
 
 '//////////標準モジュール///////////
 Option Explicit
 
 Public Declare Function GetPrivateProfileString Lib "Kernel32.dll" _
 Alias "GetPrivateProfileStringA" _
 (ByVal lpAppName As String, ByVal lpKeyName As String, _
 ByVal lpDefault As String, ByVal lpReturnedString As String, _
 ByVal nSize As Long, ByVal lpFileName As String) As Long
 
 Public Declare Function WritePrivateProfileString Lib "Kernel32.dll" _
 Alias "WritePrivateProfileStringA" _
 (ByVal lpAppName As String, ByVal lpKeyName As String, _
 ByVal lpString As String, ByVal lpFileName As String) As Long
 
 Const Key1 As String = "Status"
 Const fName As String = "Data.ini"
 
 
 Public Sub Macro1()
 If GetProtectSuatus1 = False Then
 UserForm1.Show
 Exit Sub
 End If
 Macro2
 End Sub
 
 Public Sub Macro2()
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
 Scenarios:=True
 End Sub
 
 Public Function GetProtectSuatus1() As Boolean
 Dim sBuf As String * 255
 Dim sData As String
 Dim sAppName As String
 Dim sPath As String
 Dim ret As Long
 
 sAppName = ThisWorkbook.Name
 sPath = ThisWorkbook.Path & "\" & fName
 
 ret = GetPrivateProfileString(sAppName, Key1, "", sBuf, Len(sBuf), sPath)
 sData = Mid(sBuf, 1, InStr(1, sBuf, Chr(0)) - 1)
 
 If sData = Chr(0) Or sData = "False" Then
 GetProtectSuatus1 = False
 Else
 GetProtectSuatus1 = True
 End If
 
 End Function
 
 Public Function WriteStatus(pStatus As String) As Boolean
 Dim ret As Long
 Dim sAppName As String
 Dim sPath As String
 
 sAppName = ThisWorkbook.Name
 sPath = ThisWorkbook.Path & "\" & fName
 
 ret = WritePrivateProfileString(sAppName, Key1, pStatus, sPath)
 If ret = 0 Then
 WriteStatus = False
 Else
 WriteStatus = True
 End If
 End Function
 
 '///////////////フォームモジュール/////////////////////
 Option Explicit
 
 Private Sub CheckBox1_Click()
 Dim ret As Boolean
 
 If CheckBox1.Value = True Then
 ret = WriteStatus("True")
 Else
 ret = WriteStatus("False")
 End If
 If ret = False Then
 MsgBox "データの保存に失敗しました。"
 End If
 
 End Sub
 
 Private Sub commandbutton1_click()
 Macro2
 Unload UserForm1
 End Sub
 
 '///////////設定ファイルの例。ここまで///////////
 
 上記が難しいなら、データ保存用のシートを作成し、そのシート上にチェック
 のデータを保存するのが一番簡単です。
 これは簡単ですから、サンプルはパスします。
 
 書き忘れ:上記サンプルはBookを保存しているのと同じフォルダに
 Data.iniという名前のファイルが作成されます。
 
 |  |