前回、INIファイルを読み書きするマクロを書きましたが、こういう処理というのはクラスにしてしまったほうがあとあと使い勝手がよくなります。
まずは、Visual Basic Editorのメニューの[挿入]から[クラス モジュール]を選択してください。
すると「Class1」という名前のクラスモジュールで作成されると思いますので、プロパティウィンドウでオブジェクト名を変更してください。
ここでは、「IniFileClass」という名前にしました。
ではコードです。
IniFileClass
'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ファイルの読み書きを行ってみます。
コードは、前回と同じ処理をクラスを使った方法に書き換えています。
読み込み
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メソッドを使い値を読んでいます。
書き込み
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を何個も読み書きするような場合にもクラスを使ったほうが効率がいいと思います。
スポンサーリンク