|
▼みーちゃんキャット さん:
>すみません。途中行き詰って、そこからようやく質問が見えてきました。
これからは質問が見えてから質問して下さいね。
そうじゃないとそのつもりがあろうとなかろうと事実上丸投げですから。
で、本題ですが、
ちょっとその前に、本当にこのまんま書いているんでしょうか?
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という名前のファイルが作成されます。
|
|