Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


16580 / 76733 ←次へ | 前へ→

【65618】Re:組込みダイアログにチェックBoxを追加したい
回答  neptune  - 10/6/15(火) 13:47 -

引用なし
パスワード
   ▼みーちゃんキャット さん:

>すみません。途中行き詰って、そこからようやく質問が見えてきました。
これからは質問が見えてから質問して下さいね。
そうじゃないとそのつもりがあろうとなかろうと事実上丸投げですから。

で、本題ですが、
ちょっとその前に、本当にこのまんま書いているんでしょうか?
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という名前のファイルが作成されます。

5 hits

【65609】組込みダイアログにチェックBoxを追加したい みーちゃんキャット 10/6/14(月) 5:25 質問
【65612】Re:組込みダイアログにチェックBoxを追加し... neptune 10/6/14(月) 13:46 回答
【65615】Re:組込みダイアログにチェックBoxを追加し... みーちゃんキャット 10/6/14(月) 17:13 質問
【65616】Re:組込みダイアログにチェックBoxを追加し... neptune 10/6/14(月) 18:18 発言
【65617】Re:組込みダイアログにチェックBoxを追加し... みーちゃんキャット 10/6/15(火) 4:52 質問
【65618】Re:組込みダイアログにチェックBoxを追加し... neptune 10/6/15(火) 13:47 回答
【65619】Re:組込みダイアログにチェックBoxを追加し... Jaka 10/6/15(火) 16:11 発言
【65620】追加 Jaka 10/6/15(火) 16:19 発言
【65628】修正 Jaka 10/6/16(水) 9:51 発言
【65711】Re:組込みダイアログにチェックBoxを追加し... みーちゃんキャット 10/6/23(水) 13:35 質問
【65714】Re:組込みダイアログにチェックBoxを追加し... Jaka 10/6/23(水) 14:33 発言
【65723】Re:組込みダイアログにチェックBoxを追加し... みーちゃんキャット 10/6/24(木) 2:39 質問
【65726】Re:組込みダイアログにチェックBoxを追加し... Jaka 10/6/24(木) 9:22 発言
【65734】Re:組込みダイアログにチェックBoxを追加し... みーちゃんキャット 10/6/24(木) 11:34 お礼
【65823】ひたすら忘れていたこと。 Jaka 10/6/29(火) 16:30 発言

16580 / 76733 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free