Читайте значения INI только один раз в Word VBA - PullRequest
2 голосов
/ 28 июля 2010

Я пытаюсь упростить сценарий и его процедуры, и я не совсем уверен, каков наилучший способ сделать это.Я хочу повторить код как можно меньше.Ниже приведен мой текущий код.

Это функция Filename, которая в основном проверяет, существует ли ini-файл.Вероятно, он должен просто бежать один раз.Теперь он работает каждый раз, когда используется строка «FileName», что очень много.

Function FileName()
    FileName = "C:\Apps\Templates\fields.ini"
    ''# Does ini-file exist?
    If Len(Dir$(FileName)) = 0 Then
        MsgBox ("Can't find the file " & FileName & ".")
    End If
End Function

Тогда у меня есть функции regPath и regString, которые в основном просто выбирают путь вреестр, из которого скрипт должен прочитать.

Public Function regPath()
    regPath = ReadIni(FileName, "Registry", "Path")
End Function

Public Function regString()
    regString = ReadIni(FileName, "Registry", "String")
End Function

Тогда есть первая функция, которая считывает фактический реестр по его значению.

 Public Function regFirstname()
        regStrFistname = ReadIni(FileName, "Fields", "Firstname")
        Set objShell = CreateObject("Wscript.Shell")
        Dim value As String
        value = objShell.RegRead(regPath & "\" & regStrfirstname)
        regFornavn = value
    End Function

У меня есть загрузки этого последнего, просточто он читает другие части реестра.Весь этот код содержится в модуле в шаблоне Word 2007.А из моего подпрограммы Document_New() я просто хочу получить значение из реестра, не имея такого большого количества кода в подпрограмме Document_New().Таким образом, я могу использовать значения в формах и других областях.

Как мне это структурировать?Любой ответ будет оценен.

1 Ответ

3 голосов
/ 28 июля 2010

Вы, вероятно, можете изменить функцию Filename на sub:

Sub getFileName()
    FileName = "C:\Apps\Templates\fields.ini"
    ''Does ini-file exist?
    If Len(Dir$(FileName)) = 0 Then
        MsgBox ("Can't find the file " & FileName & ".")
    Else
       gvFileName = "C:\Apps\Templates\fields.ini"
    End If
End Sub

Добавить переменную в начало вашего модуля с именем gvFilename.Обратите внимание, что эти переменные сбрасываются при возникновении необработанной ошибки, поэтому вам может потребоваться запустить подпрограмму еще раз, если gvFilename содержит пустую строку (vbNullString).

Эти:

Public Function regString()
    regString = ReadIni(FileName, "Registry", "String")
End Function

Может, вероятно,можно изменить на:

Public Function regStuff(ToRead As String)
    regStuff = ReadIni(FileName, "Registry", ToRead)
End Function

Что можно назвать так:

regString=regStuff("String")

Читатель реестра также может быть изменен следующим образом:

Public Function regStuff(ToRead As String)
    regToRead = ReadIni(FileName, "Fields", ToRead)
    Set objShell = CreateObject("Wscript.Shell")
    Dim sValue As String
    sValue = objShell.RegRead(regPath & "\" & regToRead)
    regStuff = sValue
End Function

AsКроме того, избегайте использования зарезервированных слов, таких как Value, в вашем коде, это может привести к неописуемому горе.

...