Pregunta

¿Hay algún método disponible en VBA para leer y escribir archivos INI? Sé que podría usar;

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

... y analiza los datos. En cambio, estoy tratando de ver qué herramientas ya están disponibles.

Sé que en C # puedes hacer ...

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

¿Hay un equivalente para VBA?

Estoy intentando esto en MS Access 2003 VBA.

¿Fue útil?

Solución

Aquí hay algunos fragmentos de código que usamos, debería ayudarlo a comprender la idea. Estas rutinas usan las llamadas API. Se incluyen dos funciones para leer / escribir una configuración de cadena en una sección específica del archivo 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

Otros consejos

No es agradable, pero puede usar la API de Windows. Aquí hay un enlace , y otro de MS .

Objeto FileSystemObject con un [TextStream] ( http://msdn.microsoft.com/en-us/library /314cz14s(VS.85).aspx) es el método generalmente recomendado para leer y escribir archivos de texto en VBA.

El kpini de Karl Peterson tiene casi todo lo que es probable necesitar: declaraciones API, una clase Cinifile, cosas así. Comenzaría con eso y lo transformaría al gusto, lo que no debería llevar mucho tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top