我试图简化脚本及其例程,我不太确定这样做的最佳方法是什么。我想尽可能少地重复代码。以下是我目前的代码。
这是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()
子例程中没有这么多代码。这样我也可以使用表单和其他区域中的值。
我应该如何构建这个?任何回复都将不胜感激。
答案 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这样的保留字,这会导致无尽的悲痛。