VBA对INI文件的读、写操作

Ini文件

[section1]
key1=s1value1
key2=s1value2
key3=2020-11-26

[section2]
key1=s2value1
key2=s2value2
key3=s2value3
key4=s2value4

IniFileHelpCls 类

Option Explicit

#If Win64 Then
    Private Declare PtrSafe 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 PtrSafe Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
#Else
    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
#End If

Public InitFile As String

Public Function ReadIniFileString(ByVal sect As String, ByVal keyname As String) As String
    Dim Worked As Long
    Dim RetStr As String * 128
    Dim StrSize As Long, iNoOfCharInIni As Long, sIniString As String, sProfileString As String

    iNoOfCharInIni = 0
    sIniString = ""
    If sect = "" Or keyname = "" Then
        Debug.Print "Section Or Key To Read Not Specified !!!", vbExclamation, "INI"
        Err.Raise "Section Or Key To Read Not Specified !!!"
    Else
        sProfileString = ""
        RetStr = Space(128)
        StrSize = Len(RetStr)
        Worked = GetPrivateProfileString(sect, keyname, "", RetStr, StrSize, InitFile)
        If Worked Then
            iNoOfCharInIni = Worked
            sIniString = Left$(RetStr, Worked)
        End If
    End If
    ReadIniFileString = sIniString
End Function

Public Function WriteIniFileString(ByVal sect As String, ByVal keyname As String, ByVal Wstr As String) As String
    Dim Worked As Long, iNoOfCharInIni As Long
    Dim sIniString As String

    iNoOfCharInIni = 0
    sIniString = ""
    If sect = "" Or keyname = "" Then
        Debug.Print "Section Or Key To Write Not Specified !!!", vbExclamation, "INI"
        Err.Raise "Section Or Key To Read Not Specified !!!"
    Else
        Worked = WritePrivateProfileString(sect, keyname, Wstr, InitFile)
        If Worked Then
            iNoOfCharInIni = Worked
            sIniString = Wstr
        End If
        WriteIniFileString = sIniString
    End If
End Function

测试用代码:

Sub btnRead_Click()
    Dim iniHelper As IniFileHelpCls
    Set iniHelper = GetIniFileHelpCls
    
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    ws.Range("A1").Value = iniHelper.ReadIniFileString("section1", "key1")
    ws.Range("A2").Value = iniHelper.ReadIniFileString("section1", "key2")
    ws.Range("A3").Value = iniHelper.ReadIniFileString("section1", "key3")
    ws.Range("A4").Value = iniHelper.ReadIniFileString("section1", "key4") ' not exist
    
    ws.Range("A6").Value = iniHelper.ReadIniFileString("section2", "key1")
    ws.Range("A7").Value = iniHelper.ReadIniFileString("section2", "key2")
    ws.Range("A8").Value = iniHelper.ReadIniFileString("section2", "key3")
    ws.Range("A9").Value = iniHelper.ReadIniFileString("section2", "key4")
End Sub
Sub btnWrite_Click()
    Dim iniHelper As IniFileHelpCls
    Set iniHelper = GetIniFileHelpCls
    
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    iniHelper.WriteIniFileString "section1", "key3", Format(Now(), "yyyy-mm-dd")
End Sub

Private Function GetIniFileHelpCls() As IniFileHelpCls
    Set GetIniFileHelpCls = New IniFileHelpCls
    GetIniFileHelpCls.InitFile = ThisWorkbook.Path & "\test.ini"
End Function