|
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
|
|