
前回、INIファイルを読み書きするマクロを書きましたが、こういう処理というのはクラスにしてしまったほうがあとあと使い勝手がよくなります。
まずは、Visual Basic Editorのメニューの[挿入]から[クラス モジュール]を選択してください。
すると「Class1」という名前のクラスモジュールで作成されると思いますので、プロパティウィンドウでオブジェクト名を変更してください。
ここでは、「IniFileClass」という名前にしました。
ではコードです。
IniFileClass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 'Win32API宣言 Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( ByVal lpApplicationName As String , ByVal lpKeyName As Any, ByVal lpDefault As String , ByVal lpReturnedString As String , ByVal nSize As Long , ByVal lpFileName As String ) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( ByVal lpApplicationName As String , ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String ) As Long Private mFileName As String 'Iniファイル名 Private mSection As String 'セクション名 '// プロパティ Public Property Let FileName( ByVal value As String ) mFileName = value End Property Public Property Let Section( ByVal value As String ) mSection = value End Property 'クラスの初期化処理 Private Sub Class_Initialize() mFileName = "" mSection = "" End Sub 'Iniファイルから指定したキーの値を取得 Public Function GetValue( ByVal key As String ) As String Dim value As String * 255 Call GetPrivateProfileString(mSection, key, "ERROR" , value, Len(value), mFileName) GetValue = Left(value, InStr(1, value, vbNullChar) - 1) End Function 'Iniファイルの指定したキーに値を書き込む Public Function SetValue( ByVal key As String , ByVal value As String ) As Boolean Dim rtn As Long rtn = WritePrivateProfileString(mSection, key, value, mFileName) SetValue = CBool (rtn) End Function |
クラスの使い方
では、作成したクラスを使って、Iniファイルの読み書きを行ってみます。
コードは、前回と同じ処理をクラスを使った方法に書き換えています。
読み込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Sub GetValue() Dim inc As New IniFileClass Dim r As Integer Dim g As Integer Dim b As Integer inc.Section = "CellColor" inc.FileName = "C:\work\Excel\conf.ini" 'R r = CInt (inc.GetValue( "R" )) 'G g = CInt (inc.GetValue( "G" )) 'B b = CInt (inc.GetValue( "B" )) Range( "B2" ).Interior.Color = RGB(r, g, b) End Sub |
まず、Newでクラスのインスタンスを作成します。
次に、SectionプロパティとFileNameプロパティに値を設定します。
そして、最後にGetValueメソッドを使い値を読んでいます。
書き込み
1 2 3 4 5 6 7 8 9 10 11 12 | Sub SetValue() Dim inc As New IniFileClass Dim rtn As Boolean inc.Section = "CellColor" inc.FileName = "C:\work\Excel\conf.ini" rtn = inc.SetValue( "R" , "255" ) rtn = inc.SetValue( "G" , "20" ) rtn = inc.SetValue( "B" , "147" ) End Sub |
書き込む場合は同じで、最初にインスタンスを作成してプロパティに値を設定したら、SetValueメソッドで書き込むだけです。
このクラスを使った方法のほうがコードがすっきりしていて見やすいと思います。また、IniファイルのKeyを何個も読み書きするような場合にもクラスを使ったほうが効率がいいと思います。
スポンサーリンク