Рекомендуемый способ чтения и записи файлов .ini в VBA - PullRequest
8 голосов
/ 19 марта 2009

Есть ли в VBA какие-либо методы для чтения и записи файлов INI? Я знаю, что мог бы использовать;

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

... и проанализировать данные. Вместо этого я пытаюсь увидеть, какие инструменты уже доступны.

Я знаю, что в C # вы можете сделать ...

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

Есть ли эквивалент для VBA?

Я пытаюсь это сделать в MS Access 2003 VBA.

Ответы [ 4 ]

9 голосов
/ 19 марта 2009

Вот некоторые фрагменты кода, которые мы используем, это должно помочь вам понять идею. Эти процедуры используют вызовы API. Две функции включены для чтения / записи строковых настроек в определенный раздел в 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
4 голосов
/ 19 марта 2009

Это не приятно, но вы можете использовать Windows API. Вот ссылка , а еще одна от MS .

1 голос
/ 19 марта 2009

В kpini Карла Петерсона есть все, что вам может понадобиться: объявления API, класс Cinifile и тому подобное. Я бы начал с этого и изменил бы его по вкусу, что не должно занять много времени.

1 голос
/ 19 марта 2009

FileSystemObject объект с [TextStream] (http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx) - обычно рекомендуемый метод для чтения и записи текстовых файлов в VBA.

...