2010-07-28 2 views
2

Я пытаюсь упростить скрипт и его подпрограммы, и я не совсем уверен, что это лучший способ сделать это. Я хочу как можно меньше повторить код. Итак, ниже мой текущий код.Чтение значений INI только один раз в Word VBA

Это функция Filename, которая в основном проверяет наличие ini-файла. Должно быть, нужно просто запустить один раз. Как это происходит, он запускается каждый раз, когда используется строка «Имя_файла», что очень много.

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() sub Я просто в основном хочу получить значение из реестра, не имея столько кода в подпрограмме Document_New(). Таким образом, я могу использовать значения в формах и других областях.

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

ответ

3

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

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. Обратите внимание, что эти переменные сбрасываются, если происходит необработанная ошибка, поэтому вам может понадобиться снова запустить sub, если 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 

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

+0

Спасибо, это выглядит очень перспективным :) –

Смежные вопросы