2009-03-18 43 views
8

Có bất kỳ phương pháp nào có sẵn trong VBA để đọc và ghi các tệp INI không? Tôi biết tôi có thể sử dụng;Cách được khuyến nghị để đọc và ghi các tệp .ini trong VBA

Open "C:\test.ini" For Input As #1 

... và phân tích cú pháp dữ liệu. Thay vào đó, tôi đang cố gắng xem những công cụ nào đã có sẵn.

Tôi biết trong C# bạn có thể làm ...

using INI; 
INIFile ini = new INIFile("C:\test.ini"); 

Có tương đương với VBA?

Tôi đang thử điều này trong MS Access 2003 VBA.

Trả lời

7

Dưới đây là một số đoạn mã mà chúng tôi sử dụng, nó sẽ giúp bạn có được ý tưởng. Hai hàm được bao gồm để đọc/ghi một cài đặt chuỗi cho một phần cụ thể trong tệp 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 

Public Function IniFileName() As String 
    IniFileName = "c:\[yourpath here]\settings.ini" 
End Function 


Private 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 = 0 
    sIniString = "" 
    If Sect = "" Or Keyname = "" Then 
    MsgBox "Section Or Key To Read Not Specified !!!", vbExclamation, "INI" 
    Else 
    sProfileString = "" 
    RetStr = Space(128) 
    StrSize = Len(RetStr) 
    Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName) 
    If Worked Then 
     iNoOfCharInIni = Worked 
     sIniString = Left$(RetStr, Worked) 
    End If 
    End If 
    ReadIniFileString = sIniString 
End Function 

Private Function WriteIniFileString(ByVal Sect As String, ByVal Keyname As String, ByVal Wstr As String) As String 
Dim Worked As Long 

    iNoOfCharInIni = 0 
    sIniString = "" 
    If Sect = "" Or Keyname = "" Then 
    MsgBox "Section Or Key To Write Not Specified !!!", vbExclamation, "INI" 
    Else 
    Worked = WritePrivateProfileString(Sect, Keyname, Wstr, IniFileName) 
    If Worked Then 
     iNoOfCharInIni = Worked 
     sIniString = Wstr 
    End If 
    WriteIniFileString = sIniString 
    End If 
End Function 
1

FileSystemObject object với một [TextStream] (http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx) là phương pháp thường được đề nghị cho đọc và viết textfiles trong VBA

+0

Thật sao? Tại sao bạn sẽ sử dụng một thư viện bên ngoài (tôi cho rằng ràng buộc muộn, tất nhiên) cho một cái gì đó mà VBA cung cấp nguyên bản? Các lợi thế là gì? –

+0

Nó làm cho mã đọc dễ dàng hơn, theo ý kiến ​​của tôi. Và bạn có thể sử dụng cho ... Mỗi để lặp qua các thư mục một cách dễ dàng. – HardCode

+0

Có thể là không nên đọc và viết trực tiếp. Cách tiếp cận API tốt hơn nhiều vì nó tóm tắt sự cần thiết phải hiểu định dạng của tệp INI. Không có ý nghĩa trong viết mã để hiểu các tập tin INI khi nó đã tồn tại. – JohnFx

1

Karl Peterson's kpini có chỉ là về tất cả mọi thứ bạn có khả năng cần:. Khai báo API, một lớp Cinifile, công cụ như Tôi sẽ bắt đầu với điều đó và biến nó thành hương vị, không nên mất nhiều thời gian

Các vấn đề liên quan