Excel VBA質問箱 IV

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

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


22068 / 76734 ←次へ | 前へ→

【60051】Re:データの記憶
発言  ichinose  - 09/1/26(月) 7:40 -

引用なし
パスワード
   ▼よっしー さん:
おはようございます。

>
>エクセルファイルを頻繁に使いますので、領域を選択すると
>書式が一括変更されるマクロを作成しています。
>
>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

もちろん、最後にブックの保存は必要ですよ


試してみてください

4 hits

【60040】データの記憶 よっしー 09/1/25(日) 10:30 質問
【60051】Re:データの記憶 ichinose 09/1/26(月) 7:40 発言
【60130】Re:データの記憶 よっしー 09/1/28(水) 23:46 お礼

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