Excel 是否有更简单/更好的方法使用预定义词典?
我有一本日期对应的数字字典。我不得不想象有一种比存储所有日期然后回忆它们更好的方法 换句话说,我可以创建一个通用的字典,然后代码中的其他部分可以访问它,这样我就不会在函数中隐藏全局字典了吗Excel 是否有更简单/更好的方法使用预定义词典?,excel,vba,Excel,Vba,我有一本日期对应的数字字典。我不得不想象有一种比存储所有日期然后回忆它们更好的方法 换句话说,我可以创建一个通用的字典,然后代码中的其他部分可以访问它,这样我就不会在函数中隐藏全局字典了吗 Function Get_Val_Date(Val_Date_Key As Long) Dim Date_Dict As Scripting.Dictionary Set Date_Dict = New Scripting.Dictionary Date_Dict.Add
Function Get_Val_Date(Val_Date_Key As Long)
Dim Date_Dict As Scripting.Dictionary
Set Date_Dict = New Scripting.Dictionary
Date_Dict.Add 1, "9/30/1997"
Date_Dict.Add 2, "9/30/1998"
Date_Dict.Add 3, "9/30/1999"
Date_Dict.Add 4, "9/30/2000"
Date_Dict.Add 10, "9/30/2001"
Date_Dict.Add 11, "9/30/2002"
Date_Dict.Add 12, "9/30/2003"
Date_Dict.Add 13, "9/30/2004"
Date_Dict.Add 14, "9/30/2005"
Get_Val_Date = Date_Dict(Val_Date_Key)
End Function
第一次使用时只需缓存即可:
'Module level
Private Date_Dict As Scripting.Dictionary
Function Get_Val_Date(Val_Date_Key As Long)
If Date_Dict Is Nothing Then
Set Date_Dict = New Scripting.Dictionary
Date_Dict.Add 1, "9/30/1997"
Date_Dict.Add 2, "9/30/1998"
Date_Dict.Add 3, "9/30/1999"
Date_Dict.Add 4, "9/30/2000"
Date_Dict.Add 10, "9/30/2001"
Date_Dict.Add 11, "9/30/2002"
Date_Dict.Add 12, "9/30/2003"
Date_Dict.Add 13, "9/30/2004"
Date_Dict.Add 14, "9/30/2005"
End If
Get_Val_Date = Date_Dict(Val_Date_Key)
End Function
如果要在其他函数中使用相同的字典,可以将初始值设定项拆分为自己的子,如下所示:
Function Get_Val_Date(Val_Date_Key As Long)
InitializeDateLookup
Get_Val_Date = Date_Dict(Val_Date_Key)
End Function
Sub InitializeDateLookup()
If Date_Dict Is Nothing Then
Set Date_Dict = New Scripting.Dictionary
Date_Dict.Add 1, "9/30/1997"
Date_Dict.Add 2, "9/30/1998"
Date_Dict.Add 3, "9/30/1999"
Date_Dict.Add 4, "9/30/2000"
Date_Dict.Add 10, "9/30/2001"
Date_Dict.Add 11, "9/30/2002"
Date_Dict.Add 12, "9/30/2003"
Date_Dict.Add 13, "9/30/2004"
Date_Dict.Add 14, "9/30/2005"
End If
End Sub
然后,任何需要它的过程都可以调用一行程序InitializeDateLookup
,或者,如果字典不需要在其他任何地方使用,您可以将其声明为静态
本地。或者,将其缓存在属性Get
过程中。第三种选择是将其包装在预先声明的类模块中。有很多方法可以剥下这只猫的皮。我实际上是想摆脱类模块——旧版本在类模块中,让每个人都头疼。我不认为“后期绑定”意味着你认为它的作用。任何声明为对象的或声明为变量的都只能在运行时解析-这都是“延迟绑定”的意思。我的印象是,“后期绑定”意味着库被声明为对象的一部分,这意味着即使关闭了引用,它也能够找到并提取正确的引用。“早期绑定”永远不会出现在代码中,因此提到它。无论如何绑定,您都可以从对象获取类型库。这只是COM工作原理的一个基本部分。早期绑定只是意味着可以在编译过程中使用类型库中的信息,而不必在运行时对其求值(这通常比较慢-早期绑定让您提前支付开销)