VBA で ini ファイルに文字列を書き込むには、Win32API の WritePrivateProfileStringA 関数を使う。
サンプルコード
以下に WritePrivateProfileStringA 関数を使った書き込みのサンプルを示す。
Option Explicit 'WritePrivateProfileStringA 関数を宣言する Private Declare PtrSafe Function WritePrivateProfileStringA Lib "kernel32" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String _ ) As Long Public Sub Main() '値を書き込む ' 関数の戻り値は正常終了なら0以外、異常終了なら0となる。 Dim ret As Long ret = WritePrivateProfileStringA("TestSection", _ "TestKey", _ "書き込みテスト", _ ThisWorkbook.Path & "\app.ini") If ret = 0 Then MsgBox "書き込み失敗" Else MsgBox "書き込み成功" End If End Sub
マクロを実行すると ini ファイルに「書き込みテスト」と書き込まれる。
もし、指定した ini ファイルが存在しない場合は、新しいファイルが作られる。
ただしフォルダが存在しない場合はエラーとなる。
指定したセクションまたはキーが存在しない場合は、ini ファイルに新しく追加される。
解説
まずはモジュールの宣言セクション(Declarations)で WritePrivateProfileStringA 関数を宣言する。
Private Declare PtrSafe Function WritePrivateProfileStringA Lib "kernel32" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String _ ) As Long
関数は以下の引数を取る。
- lpAppName: セクション名
- lpKeyName: キー名
- lpString: 書き込む文字列
- lpFileName: ini ファイルのパス
関数は書き込みに成功した場合は 0 以外、失敗した場合は 0 を返す。
そして WritePrivateProfileStringA 関数を呼び出して書き込みを行う。
マクロブックと同じ場所にある app.ini の TestSection セクションの TestKey キーに「書き込みテスト」を書き込んでいる。
Dim ret As Long ret = WritePrivateProfileStringA("TestSection", _ "TestKey", _ "書き込みテスト", _ ThisWorkbook.Path & "\app.ini")