2017年8月5日

【Excel】INIファイルを読み書きするマクロをクラスにする


前回、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を何個も読み書きするような場合にもクラスを使ったほうが効率がいいと思います。



スポンサーリンク