MW211 EXIT

devlog
ExcelVBA/INIファイルの読み書き
2014年11月23日
クラス化すると以下のような感じ。
┌──────────────────────────────────────┐
│ClassINI.cls                                                                │
├──────────────────────────────────────┤
│Option Explicit                                                             │
│'***************************************************************************│
│'  クラス:INIファイル                                                      │
│'***************************************************************************│
│Private mINIファイル As String                                              │
│Private m環境名 As String                                                   │
│'===========================================================================│
│'  宣言:INIファイルアクセス関数(API)                                       │
│'===========================================================================│
│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 Sub Class_Initialize()                                              │
│End Sub                                                                     │
│'===========================================================================│
│'  メソッド:準コンストラクタ                                               │
│'===========================================================================│
│Public Sub 準コンストラクタ(ByVal INIファイル As String)                    │
│    If InStr(INIファイル, "\") = 0 Then                                     │
│        mINIファイル = Application.ThisWorkbook.Path & "\" & INIファイル    │
│    Else                                                                    │
│        mINIファイル = INIファイル                                          │
│    End If                                                                  │
│End Sub                                                                     │
│'===========================================================================│
│'  デストラクタ                                                             │
│'===========================================================================│
│Private Sub Class_Terminate()                                               │
│End Sub                                                                     │
│'===========================================================================│
│'  メソッド:参照                                                           │
│'===========================================================================│
│Public Function getter(ByVal セクション As String, _                        │
│                       ByVal キー As String, _                              │
│                       ByVal 既定値 As String) As String                    │
│    Dim ファイル名 As String                                                │
│    Dim リターンコード As Long                                              │
│    Dim 取得値 As String                                                    │
│    取得値 = Space$(256)                                                    │
│    リターンコード = GetPrivateProfileString(セクション, _                  │
│                                             キー, _                        │
│                                             既定値, _                      │
│                                             取得値, _                      │
│                                             255, _                         │
│                                             mINIファイル)                  │
│    If リターンコード > 0 Then                                              │
│        If InStr(取得値, Chr$(0)) > 0 Then                                  │
│            getter = Left$(取得値, InStr(取得値, Chr$(0)) - 1)              │
│        Else                                                                │
│            getter = ""                                                     │
│        End If                                                              │
│    Else                                                                    │
│        getter = 既定値                                                     │
│    End If                                                                  │
│End Function                                                                │
│'===========================================================================│
│'  メソッド:設定                                                           │
│'===========================================================================│
│Public Function setter(ByVal セクション As String, _                        │
│                       ByVal キー As String, _                              │
│                       ByVal 設定値 As String) As Long                      │
│    Dim ファイル名 As String                                                │
│    Dim リターンコード As Long                                              │
│    リターンコード = WritePrivateProfileString(セクション, _                │
│                                               キー, _                      │
│                                               設定値, _                    │
│                                               mINIファイル)                │
│    setter = リターンコード                                                 │
│End Function                                                                │
│'***************************************************************************│
└──────────────────────────────────────┘
以下のような感じで実行できる
┌──────────────────────────────────────┐
│Option Explicit                                                             │
│Public Sub 実行()                                                           │
│    Dim objINI As New ClassINI                                              │
│    Call objINI.準コンストラクタ("環境設定.ini")                            │
│    MsgBox objINI.getter("DB", "SERVER_NAME", "既定値")                     │
│    Call objINI.setter("DB", "SERVER_NAME", "設定値")                       │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA