Не получается работать с INI-файлом в Excel

Программирование на Visual Basic for Applications
qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Не получается работать с INI-файлом в Excel

Сообщение qwertyhp » 01.05.2010 (Сб) 1:19

Есть файл Excel и макрос VBA, в котором надо читать/писать из/в INI-файл программы. Есть класс (см.аттач), которым я без проблем реализую чтение/запись в проектах VB6 (не Excel). А вот именно в Excel читать/писать из/в INI-файл не получается. И в модуль класса вставлял, и чего только не делал с ним.
Проблема в объявлении. В проектах VB6 объявлял как Dim cINI As New clsINI, например:
Код: Выделить всё
    Dim cINI As New clsINI
' Находим путь к программе :
    ThisAppPath = ActiveWorkbook.Path & IIf(Right(ActiveWorkbook.Path, 1) = "\", "", "\")
' Находим путь к INI-файлу :
    cINI.FileName = ThisAppPath & "Contracts.ini"
' Считываем из INI время задержек DelayTime :
    DelayTime = CInt(cINI.Value("ОбщиеНастройкиПрограммы", "DelayTime"))

и всё работало, а вот в Excel такое объявление вызывает ошибку, и как с ней бороться - не знаю. Кто успешно решил аналогичную задачу - пожалуйста, поделитесь опытом. Спасибо.
Поздравляю всех с праздником 1-го мая!
Вложения
clsInI.zip
Спасибо автору класса - очень полезная вещь
(3.08 Кб) Скачиваний: 159
Пятачок Forever! :)

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Re: Не получается работать с INI-файлом в Excel

Сообщение Димитрий » 02.05.2010 (Вс) 0:38

Код: Выделить всё
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 Sub writeINI(sINIFile As String, sSection As String, sKey As String, sValue As String)
    Dim N As Integer
    Dim sTemp  As String
    sTemp = sValue
    For N = 1 To Len(sValue)
        If Mid$(sValue, N, 1) = vbCr Or Mid$(sValue, N, 1) = vbLf Then Mid$(sValue, N) = " "
    Next N
    N = WritePrivateProfileString(sSection, sKey, sTemp, sINIFile)
End Sub
Public Function sGetINI(sINIFile As String, sSection As String, sKey As String, sdefault As String)
    Dim sTemp  As String * 256
    Dim nLength As Integer
    sTemp = Space$(256)
    nLength = GetPrivateProfileString(sSection, sKey, sdefault, sTemp, 255, sINIFile)
    sGetINI = Left$(sTemp, nLength)
End Function


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

    TopList