Функции WIF и RIF являются обёртками для WinAPI функций WritePrivateProfileString и GetPrivateProfileString, и предназначены для записи и чтения параметров из файлов конфигурации INI.
INI-файлы - это обычные текстовые файлы, предназначенные для хранения настроек программ.
Примерный вид структуры INI -файла:
; комментарий
[Section1]
var1 = значение_1
var2 = значение_2[access]
changed=02.06.2009 08:15
[client]
name=ООО «Рога и копыта»
[files]
good=Название товара
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 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 Sub WIF(ByVal sName$, ByVal val$, ByVal sPart$, ByVal FilePath$) ' функция ищет в ini файле FilePath$ раздел sPart$ (если раздела нет - он создаётся), ' и добавляет в него параметра с именем sName$ и значением val Dim intRet As Integer: intRet = WritePrivateProfileString(sPart, sName, val, FilePath) 'If intRet <> 1 Then 'Неудачное завершение'(Проверка результата записи) End Sub Public Function RIF(ByVal sName$, ByVal DefVal$, ByVal sPart$, ByVal FilePath$) As String ' функция ищет в ini файле FilePath$ раздел sPart$, ' и читает из него значение параметра с именем sName$ ' Если такой параметр не найден, возвращается значение по умолчанию DefVal$ Const strNoValue As String = "" Dim intRet As Integer 'Длина возвращаемой строки (функцией GetPrivateProfileString) Dim strRet As String 'Возвращаемая строка 'Получаем значение из файла - если его нет будет возвращен 3й аргумент = strNoValue strRet = String(255, Chr(0)): intRet = GetPrivateProfileString(sPart, sName, strNoValue, strRet, 255, FilePath) strRet = Left$(strRet, intRet) 'Определяем было найдено значение или нет (если возвращено знач. константы strNoValue то = НЕТ) If strRet = strNoValue Then strRet = DefVal 'Значение не было найдено - возвращаем значение по умолчанию RIF = strRet End Function
Комментарии
нашла ответ для 64 разрядных необходимо
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
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
У меня 2019 excel вставляю в редактор код из первого блока "Declare Function GetPri...." у меня строчки подсвечены красным как ошибка.
Это значит, что для моей версии код уже устарел?
Огромное спасибо, очень полезно. Всё работает.
В моем случае, имеется необходимость выгрузить в массив все разделы из ini-файла (FName) в отсортированном виде.
Использую следующую функцию. Может кому пригодится.
Сам нашел.
Используем эту же процедуру записи WIF, но:
для удаления параметра, в качестве ЗНАЧЕНИЯ необходимо указать vbNullString.
для удаления всего раздела, в качестве ПАРАМЕТРА необходимо указать vbNullString.
Здравствуйте. Подскажите, существуют ли функции для удаления целого раздела и удаления отдельного параметра?
Отправить комментарий