怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBA: iniファイルに書き込むには | WritePrivateProfileStringA関数

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")