|
▼よっしー さん:
おはようございます。
>
>エクセルファイルを頻繁に使いますので、領域を選択すると
>書式が一括変更されるマクロを作成しています。
>
>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
もちろん、最後にブックの保存は必要ですよ
試してみてください
|
|