| 
    
     |  | ▼よっしー さん: おはようございます。
 
 >
 >エクセルファイルを頻繁に使いますので、領域を選択すると
 >書式が一括変更されるマクロを作成しています。
 >
 >inputboxで領域を指定して、その領域の書式を以下のようなコードで
 >変えるだけなのですが、使う人によってデフォルトをどうしたいかが違うので
 >sizeを13にするとか、colorのナンバーを変える等の設定が可能で、
 >かつ、エクセルを閉じてもその設定が保存されるようにしたいのです。
 >
 >これらのマクロは個人用マクロブックに保存しています。表示されていない、
 >個人用マクロブックのワークシートにアウトプットしておけば、大丈夫だと
 >思っているのですが、その方法がわかりません。
 >
 >・方法論としての評価
 
 このサイトでも時折指摘されている事として、
 
 「VBAコードとデータを違う媒体(例えば、別々のブック)にするべきだ」
 
 という記述を目にすることがあります。
 これは、コードが入っているブックを保存することで
 VBAコ-ドが正常に作動していたブックとは、違ってしまう場合があるからです。
 (私も本当に極稀ですが、経験があります。再現ができないので経験がある
 に留めておきますが・・・)。
 
 デフォルト値に関しても値の変更があるのなら、別のファイルに保存する
 方が安全だとは思います。
 知られている方法としては、 iniファイルを使う方法です。
 (iniファイル API 等で検索すれば、容易に方法は見つけられると思います)
 
 今回の例のように簡単なものであれば、txtファイルでもよいかなあ
 (File System Object 等を調べるとよいでしょう)
 
 
 >・個人用マクロブックのワークシートにデータを保存・読込する方法
 
 「ブック自体、万が一壊れてもコピーブックでまかなえるから、大丈夫、
 しかも、自分を含めた回りの数名で使うものだから、それ程厳重なものは
 要らない」
 
 と言うなら、DocumentPropertyを使う方法もあります。
 
 
 例
 '=========================================================
 Sub test()
 '新規作成
 Call mk_cdp("f_size", msoPropertyTypeNumber, 9)
 Call mk_cdp("f_col", msoPropertyTypeNumber, -16711681)
 Call mk_cdp("f_nm", msoPropertyTypeString, "MS Pゴシック")
 
 '値の取得
 MsgBox "フォント " & get_cdp("f_nm").Value & vbCrLf & "サイズ " & get_cdp("f_size").Value & _
 vbCrLf & "カラー " & get_cdp("f_col").Value
 
 '変更
 get_cdp("f_nm").Value = "MS P明朝"
 get_cdp("f_size").Value = 14
 get_cdp("f_col").Value = &HFF00FF
 '値の取得
 MsgBox "フォント " & get_cdp("f_nm").Value & vbCrLf & "サイズ " & get_cdp("f_size").Value & _
 vbCrLf & "カラー " & get_cdp("f_col").Value
 
 End Sub
 '=======================================================================
 Function mk_cdp(pnm As Variant, mytype As MsoDocProperties, myvalue) As Long
 On Error Resume Next
 ThisWorkbook.CustomDocumentProperties.Add pnm, False, mytype, myvalue
 mk_cdp = Err.Number
 On Error GoTo 0
 End Function
 '======================================================================
 Function get_cdp(pnm As String) As DocumentProperty
 Dim cp As DocumentProperty
 Set get_cdp = Nothing
 For Each cp In ThisWorkbook.CustomDocumentProperties
 If cp.Name = pnm Then
 Set get_cdp = cp
 Exit For
 End If
 Next
 End Function
 
 もちろん、最後にブックの保存は必要ですよ
 
 
 試してみてください
 
 |  |