在Word VBA中只读取一次INI值

时间:2010-07-28 07:43:56

标签: vba ms-word word-vba

我试图简化脚本及其例程,我不太确定这样做的最佳方法是什么。我想尽可能少地重复代码。以下是我目前的代码。

这是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

然后我有了这个regPathregString函数,它基本上只是在脚本应该读取的注册表中选择路径。

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 个答案:

答案 0 :(得分:3)

您可以将文件名功能更改为子:

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),则可能需要再次运行sub。

这些:

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这样的保留字,这会导致无尽的悲痛。