まりふのひと

Wordマクロ(VBA)でiniファイルへ書き込む/読み込むテスト

VBAなので Wordでも Excelでも同じであろうが、今、必要なのは Wordなので、Excel Tips INIファイルへの書き込み/読込み WritePrivateProfileString、GetPrivateProfileString を参考にコーディングし、テストした。


 コード

Option Explicit

Public TXTFolder As String
Public TOPFolder As String      'サムネイルを作るフォルダー(ユーザー指定)
Public OUTFolder As String      'サムネイル出力先(ユーザー指定)

Public MYObjName As String
Public MYObjPath As String
Public INIFileFullPath As String

Public BOOLAns As Boolean
Public LNGAns As Long
Public STRAns As String
Public VARAns As Variant

'INIファイル読込み
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
'INIファイル書き込み
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

Public Function Tester() As Boolean
Dim s1 As String, s2 As String, s3 As String

    TXTFolder = ThisDocument.Path
    STRAns = ThisDocument.Name
    MYObjName = Left(STRAns, InStrRev(STRAns, ".") - 1)
    MYObjPath = ThisDocument.Path
    INIFileFullPath = MYObjPath & "\" & MYObjName & ".ini"
    
    BOOLAns = putIniFile("あああ", "いいい", "ううう")
    BOOLAns = getIniFile(s1, s2, s3)
    Debug.Print s1, s2, s3
    BOOLAns = putIniFile("えええ", "おおお", "かかか")      '上書きされる。
    BOOLAns = getIniFile(s1, s2, s3)
    Debug.Print s1, s2, s3
    Tester = True
    
End Function

'概要:Excel VBAでINIファイル読込み
Function getIniFile(arg出力形式 As String, arg出力先 As String, arg入力元 As String) As Boolean
On Error GoTo Err_getIniFile
Dim mbTitle As String
Dim strbuffer As String * 256
Dim retCode As Long

    mbTitle = MYObjName & "/getIniFile"
        '引数1:セクション名
        '引数2:キー名
        '引数3:バッファー(読み込んだ結果が入るエリア)
        '引数4:バッファー長
        '引数5:iniファイル名のフルパス
    retCode = GetPrivateProfileString("I-O設定", "出力形式", "", strbuffer, Len(strbuffer), INIFileFullPath)
        '末尾のnullを削除する。
    arg出力形式 = Left(strbuffer, InStr(strbuffer, vbNullChar) - 1)
    
    retCode = GetPrivateProfileString("I-O設定", "出力先", "", strbuffer, Len(strbuffer), INIFileFullPath)
    arg出力先 = Left(strbuffer, InStr(strbuffer, vbNullChar) - 1)

    retCode = GetPrivateProfileString("I-O設定", "入力元", "", strbuffer, Len(strbuffer), INIFileFullPath)
    arg入力元 = Left(strbuffer, InStr(strbuffer, vbNullChar) - 1)
    getIniFile = True
    
Exit_getIniFile:
    Exit Function
    
Err_getIniFile:
    MsgBox Err.Number & "/" & Err.Description, vbCritical, mbTitle
    Resume Exit_getIniFile
 End Function

'概要:Excel VBAでINIファイル書き込み
Function putIniFile(arg出力形式 As String, arg出力先 As String, arg入力元 As String) As Boolean
On Error GoTo Err_putIniFile
Dim mbTitle As String
Dim retCode As Long
Dim strString As String
         
    mbTitle = MYObjName & "/putIniFile"
    retCode = WritePrivateProfileString("I-O設定", "出力形式", arg出力形式, INIFileFullPath)
    retCode = WritePrivateProfileString("I-O設定", "出力先", arg出力先, INIFileFullPath)
    retCode = WritePrivateProfileString("I-O設定", "入力元", arg入力元, INIFileFullPath)
    putIniFile = True

Exit_putIniFile:
    Exit Function

Err_putIniFile:
    MsgBox Err.Number & "/" & Err.Description, vbCritical, mbTitle
    Resume Exit_putIniFile
 End Function