« 【改良版】図表番号を挿入する(Seqフィールドの利用) | トップページ | VBA for DUMMIES 5th Edition (マクロ本の紹介) »

2009年9月20日 (日)

ユーザーフォームの表示位置を保存する(.iniファイル利用)

最近、iniファイルをよく利用します。

変数を覚えさせるのに都合がいいですね。

特に、ユーザーフォームを使う場合には、ユーザーフォームの表示位置を保存したり(前回表示したとき場所を移動させた場合に、次に表示させるときに同じ場所に表示させること)、ユーザーフォームに表示させる文字やオプションボタンの設定を保存したりできます。

これを使うと、ユーザー個人の設定を保存させることができるので、プログラムの使い勝手が非常によくなりますね。

▼参考図書

WORD HACKS (こちらの記事で紹介しています)
P.185 「.iniファイルに設定やデータを保存する」

ここに、iniファイルに値を読み書きする場合のルールが記載されていますので参考にしてみてください。

ポイントは3つの情報で登録する内容を特定できるという点でしょうか。

非常に便利ですね。

たとえば、「ファイル名.ini」>「ユーザーフォームの場所」>「左端」

というカテゴリーで分類できます。

同様に、「ファイル名.ini」>「ユーザーフォームの場所」>「上端」

という設定もできます。

上記の場合、ファイル名.iniというファイルにユーザーフォームの場所、という項目名を与えて、そこの上端、または左端という変数が設定されます。

この上端と左端の変数に値を保存するという訳です。

▼ユーザーフォームの設定

ユーザーフォーム(UserForm1)を作ります。

コマンドボタンを一つ作成し、その名前をCMB_cancelとします。

これをキャンセルボタンとして使います。

なお、下記のマクロを実行すると、ファイル名.iniという.iniファイルが作成されてしまいますので、ご注意ください。別に害はないと思いますが。。。

保存先は、C:\WINDOWSのフォルダです。

ドライブ名はみなさんのパソコンによっては、C以外ですね。

ファイル検索で「ファイル名.ini」としても探せます。不要でしたら削除ください。

▼初期設定用マクロ

Private Sub UserForm_Initialize()

      Dim ufLEFT As Single
      Dim ufTOP As Single

10    On Error GoTo UserForm_Initialize_Error

20    ufLEFT = System.PrivateProfileString("ファイル名.ini", _
                   "form_position", "left")

30    ufTOP = System.PrivateProfileString("ファイル名.ini", _
               "form_position", "top")

40    With UserForm1
50        .StartUpPosition = 0
60        .Left = ufLEFT
70        .Top = ufTOP
80    End With

JN:

90    On Error GoTo 0

100     Exit Sub

UserForm_Initialize_Error:

110       If Err = 13 Then
120           GoTo JN
130       Else
140           msgbox "エラーが発生しました。終了します。"
150       End If

End Sub

▼キャンセルボタンのマクロ

Private Sub CMB_cancel_Click()

      '表示位置記憶
10    System.PrivateProfileString("ファイル名.ini", _
                   "form_position", "left") = UserForm1.Left
                
20    System.PrivateProfileString("ファイル名.ini", _
                   "form_position", "top") = UserForm1.Top

      'ユーザーフォーム終了
30    Unload Me

End Sub

▼初期設定のマクロの説明

Dim変数定義
ユーザーフォームの左端と上端の変数を小数点1桁までの数字として、それぞれufLEFT, ufTOPとして宣言しています。

10行 
エラー処理。ファイル名.iniという.iniファイルがない場合(初めてこのマクロを動かす場合)には、20行、30行において値を読み込めませんから、エラーが出ます。

そのときのために、エラー処理をもうけました。

20~30行
ユーザーフォームの左端と上端の値を「ファイル名.ini」から取得して代入。

40~80行
ユーザーフォーム(Userform1)の表示位置を設定。

StartUpPosition = 0 とすると、左端と上端との値を入力して、所定の場所にユーザーフォームを表示させることができます。

90行以降
エラー処理です。

「ファイル名.ini」が存在しないために、値を読み込めなくてエラーになった場合には、エラー番号(err)が13になります。

なので、この場合には、「JNにもどりなさい(goto JN)。」となっています。

つまり、40行から80行の場所決めの処理をスキップするということですね。

エラー番号が13以外の場合には、メッセージとともにプログラムを終了します。

▼キャンセルボタンのマクロの説明

キャンセルボタンをクリックしたときに、ユーザーフォームの位置を保存するように設定されています。

プログラムのコメントに書いたとおりです。

|

« 【改良版】図表番号を挿入する(Seqフィールドの利用) | トップページ | VBA for DUMMIES 5th Edition (マクロ本の紹介) »

マクロプログラム」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/519619/46260368

この記事へのトラックバック一覧です: ユーザーフォームの表示位置を保存する(.iniファイル利用):

« 【改良版】図表番号を挿入する(Seqフィールドの利用) | トップページ | VBA for DUMMIES 5th Edition (マクロ本の紹介) »