给个操作INI文件的例子,看看有点帮助'文件名SourceDB.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 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文件,固定节点setting,in_key为写入/读取的主键 '仅仅针对是非值 'Y:yes,N:no,E:error Public Function GetIniTF(ByVal In_Key As String) As Boolean On Error GoTo GetIniTFErr GetIniTF = True Dim GetStr As String GetStr = VBA.String(128, 0) GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini" GetStr = VBA.Replace(GetStr, VBA.Chr(0), "") If GetStr = "1" Then GetIniTF = True GetStr = "" Else GoTo GetIniTFErr End If Exit Function GetIniTFErr: Err.Clear GetIniTF = False GetStr = "" End FunctionPublic Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean On Error GoTo WriteIniTFErr WriteIniTF = True If In_Data = True Then WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini" Else WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini" End If Exit Function WriteIniTFErr: Err.Clear WriteIniTF = False End Function '以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键 '针对字符串值 '空值表示出错 Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String On Error GoTo GetIniStrErr If VBA.Trim(In_Key) = "" Then GoTo GetIniStrErr End If Dim GetStr As String GetStr = VBA.String(128, 0) GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini" GetStr = VBA.Replace(GetStr, VBA.Chr(0), "") If GetStr = "" Then GoTo GetIniStrErr Else GetIniStr = GetStr GetStr = "" End If Exit Function GetIniStrErr: Err.Clear GetIniStr = "" GetStr = "" End FunctionPublic Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean On Error GoTo WriteIniStrErr WriteIniStr = True If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then GoTo WriteIniStrErr Else WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini" End If Exit Function WriteIniStrErr: Err.Clear WriteIniStr = False End Function
倒!不给写空值?这种函数千万别再传了,会害人的。Public Function SetIni(sec As String, key As String, val As String, file As String) As Boolean Dim i As Long i = WritePrivateProfileString(sec, key, val, file) If i > 0 Then SetIni = True Else SetIni = False End If End FunctionSetIni sec,key,vbNullString,file 清除一个Key SetIni sec,vbNullString,vbNullString,file 清除一个段 SetIni vbNullString,vbNullString,vbNullString,file 清除全部内容Public Function GetIni(sec As String, key As String, file As String, Optional BufLen As Long = 1024) As String Dim i As Long, s As String, j As Long s = Space(BufLen) i = GetPrivateProfileString(sec, key, "", s, BufLen, file) If i > 0 Then s = replace(RTrim(s), Chr(0) & Chr(0), "") If Right(s, 1) = Chr(0) Then GetIni = Left(s, Len(s) - 1) Else GetIni = s End If End If End Functions=GetIni(sec,vbNullString,file) 可取得整个段中的所有KeyName,每个KeyName用Chr(0)分割,看出来了吧?只需 dim a() as string a=split(s,chr(0)),全部KeyName就进 a 数组了!千万不要让函数Replace(GetStr, Chr(0), "")呀,这样就无法实现返回全部KeyName的功能了。
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'以下两个函数,读/写ini文件,固定节点setting,in_key为写入/读取的主键
'仅仅针对是非值
'Y:yes,N:no,E:error
Public Function GetIniTF(ByVal In_Key As String) As Boolean
On Error GoTo GetIniTFErr
GetIniTF = True
Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString "Setting", In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "1" Then
GetIniTF = True
GetStr = ""
Else
GoTo GetIniTFErr
End If
Exit Function
GetIniTFErr:
Err.Clear
GetIniTF = False
GetStr = ""
End FunctionPublic Function WriteIniTF(ByVal In_Key As String, ByVal In_Data As Boolean) As Boolean
On Error GoTo WriteIniTFErr
WriteIniTF = True
If In_Data = True Then
WritePrivateProfileString "Setting", In_Key, "1", App.Path & "\SourceDB.ini"
Else
WritePrivateProfileString "Setting", In_Key, "0", App.Path & "\SourceDB.ini"
End If
Exit Function
WriteIniTFErr:
Err.Clear
WriteIniTF = False
End Function
'以下两个函数,读/写ini文件,不固定节点,in_key为写入/读取的主键
'针对字符串值
'空值表示出错
Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String) As String
On Error GoTo GetIniStrErr
If VBA.Trim(In_Key) = "" Then
GoTo GetIniStrErr
End If
Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString AppName, In_Key, "", GetStr, 256, App.Path & "\SourceDB.ini"
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "" Then
GoTo GetIniStrErr
Else
GetIniStr = GetStr
GetStr = ""
End If
Exit Function
GetIniStrErr:
Err.Clear
GetIniStr = ""
GetStr = ""
End FunctionPublic Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean
On Error GoTo WriteIniStrErr
WriteIniStr = True
If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
GoTo WriteIniStrErr
Else
WritePrivateProfileString AppName, In_Key, In_Data, App.Path & "\SourceDB.ini"
End If
Exit Function
WriteIniStrErr:
Err.Clear
WriteIniStr = False
End Function
Dim i As Long
i = WritePrivateProfileString(sec, key, val, file)
If i > 0 Then
SetIni = True
Else
SetIni = False
End If
End FunctionSetIni sec,key,vbNullString,file 清除一个Key
SetIni sec,vbNullString,vbNullString,file 清除一个段
SetIni vbNullString,vbNullString,vbNullString,file 清除全部内容Public Function GetIni(sec As String, key As String, file As String, Optional BufLen As Long = 1024) As String
Dim i As Long, s As String, j As Long
s = Space(BufLen)
i = GetPrivateProfileString(sec, key, "", s, BufLen, file)
If i > 0 Then
s = replace(RTrim(s), Chr(0) & Chr(0), "")
If Right(s, 1) = Chr(0) Then
GetIni = Left(s, Len(s) - 1)
Else
GetIni = s
End If
End If
End Functions=GetIni(sec,vbNullString,file) 可取得整个段中的所有KeyName,每个KeyName用Chr(0)分割,看出来了吧?只需
dim a() as string
a=split(s,chr(0)),全部KeyName就进 a 数组了!千万不要让函数Replace(GetStr, Chr(0), "")呀,这样就无法实现返回全部KeyName的功能了。