excel - 有没有更简单/更好的方法来使用预定义的字典?

标签 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 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/

相关文章:

excel - 过滤后的行地址

vba - 处理 docmd.applyfilter 的无结果

excel - 从 VB 脚本调用宏

vba - 显示和隐藏事件工作表中的形状

vba - 对于列循环中的单元格 - 根据循环中的位置指定相邻列单元格的值

vba - 用户表单禁用所有字段

excel - 以编程方式将 GetPivotData 公式分配给单元格

mysql - 使用 ODBC 连接器的 VBA/MySQL 问题

SQL NOOB - 嵌套/子查询

excel - 如何使用 ExecWB 命令将页面打印为 pdf