| 
    
     |  | Jakaさん、neptuneさん 
 お返事大変遅くなり申し訳ありません。ご回答ありがとうございました。
 色々四苦八苦しながら、読み解いていました。おかけで少しは理解できた気がします。
 
 Jakaさん
 追加で質問です。
 
 >     引数 = 引数 & "CheckBox" & i & " "
 最初からブランクなしでは駄目ですか?
 後から-1してありますが、どういう理由からでしょうか?
 
 > Application.OnTime Now(), "'マクロ名 " & """" & 引数 & """" & "'"
 このOnTimeメソッドがないと次にファイルを立ち上げたとき、Checkが消えて
 しまうのは分かりました。
 ですが、このコードでどうしてファイルを再立ち上げした時に、CheckBox1.Value値を
 どう記憶して、どう評価しているのかが理解できませんでした。
 QueryCloseとOnTimeの使い方に関して、もう少し詳しくご教授いただけないでしょうか?
 調べても理解できるものがなかったので、分かりやすい
 リンクなどもご紹介頂けますでしょうか?
 
 Excel Ver.2003Sp3 です。
 それとCheckboxの数は1個にしてます。よろしくお願いします。
 
 >▼Jaka さん:
 >
 >フォームモジュール
 >
 >Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 > Dim 引数 As String
 Dim i As Integer
 
 > If CloseMode = vbFormCode Then '閉じるボタンの時は状態未保存。
 >   Exit Sub
 > End If
 > For i = 1 To 1
 >   If Me.Controls("CheckBox" & i).Value = True Then
 >     引数 = 引数 & "CheckBox" & i & " "
 >   End If
 > Next
 >
 > If Len(引数) = 0 Then Exit Sub
 > 引数 = Mid(引数, 1, Len(引数) - 1)
 > Application.OnTime Now(), "'マクロ名 " & """" & 引数 & """" & "'"
 >End Sub
 
 Private Sub commandbutton1_click()
 
 Unload UserForm1
 macro2
 
 End Sub
 >
 >
 >標準モジュール
 >
 >Sub マクロ名(ContlSt As String)
 >   Dim myCtl As Control
 >   For Each myCtl In ThisWorkbook.VBProject.VBComponents.Item("UserForm1").Designer.Controls
 >
 >     If TypeName(myCtl) = "CheckBox" Then
 >
 >      If InStr(1, ContlSt, myCtl.Name) > 0 Then
 >        myCtl.Value = True
 >      Else
 >        myCtl.Value = False
 >      End If
 >     End If
 >   Next
 >End Sub
 
 Sub Macro1()
 
 Dim mymsg As String
 
 If ActiveSheet.ProtectContents = False Then GoTo 1000:
 mymsg = MsgBox("シートは保護されています。" _
 , vbOKOnly )
 Exit Sub
 
 1000:
 If UserForm1.Controls("CheckBox1").Value = True Then GoTo 2000:
 UserForm1.Show
 Exit Sub
 2000:
 macro2
 
 End Sub
 
 Sub macro2()
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
 Scenarios:=True
 End Sub
 
 |  |