我有一个与日期对应的数字字典。我必须想象有一种比我必须存储所有日期然后记忆它们的方法更好的方法。
换句话说,我可以创建一个通用字典,然后代码中的其他部分可以访问它,这样我就不会在函数中隐藏全局字典吗?
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
如果您打算在其他函数中使用相同的字典,则可以将初始值设定项拆分为自己的 Sub
,如下所示:
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
。
关于excel - 有没有更简单/更好的方法来使用预定义的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54485405/