【问题标题】:declaring and using a overall dictionary in vba在 vba 中声明和使用整体字典
【发布时间】:2020-07-28 17:05:48
【问题描述】:

我是编程新手,尤其是 vba 新手,但我正在尽我所能,现在我需要你的帮助!

所以我想要达到的目标:

我用word做了一个界面。有多个按钮。如果单击了一个按钮,则程序应检查单击的按钮标题是否是字典中的一个键,该字典在按钮单击的子外部声明。

喜欢:

我点击按钮1,上面写着:“Work” -> 检查“Work”是否是字典中的一个键 -> 如果是,则用“Work”键的第一项覆盖按钮标题

我点击按钮2,上面写着:“home” -> 检查“home”是否是字典中的键 -> 如果是,则用键“home”的第一项覆盖按钮标题

如果按钮标题没有键,它将在文档中搜索按钮标题并在标签中打印下一段(->这很好用)

我的方法:

  1. 我试图声明字典(在 main() 中)

  2. 我填了字典(在 main() 中)

  3. 我为按钮单击创建了子(子)

  4. 可选:我创建了一个函数,用于检查按钮标题是否是字典中的键(函数)

  5. 如果检查返回为真:覆盖按钮标题(在子中)

问题:

到目前为止,我最大的问题是通过按钮单击 subs 使字典可访问。 我只是不知道如何正确声明它。

我试图像这样将其声明为公开:

Function Main()

    Public d As Scripting.Dictionary

    Set d = CreateObject("Scripting.Dictionary")
    d.Add "menu", Array("home", "friends", "money")
    d.Add "home", Array("cat", "dog", "mouse")
    d.Add "work", Array("boss", "employes")

End Function



Sub btn_Click()
    
    schl = btn.Caption
    If d.Exists(schl) = True Then
        x=d(schl)
        btn.Caption = x(1)
    End If
    
End Sub

-> 需要对象(错误 424)

我试图像这样将 d 声明为静态(其余代码相同):

Static d As Scripting.Dictionary 

-> 编译失败:未定义用户定义类型

所以我对我的概念非常不确定,非常感谢任何关于如何改进我的编码风格和程序本身的提示! 提前致谢!


编辑: 我尝试了 Tim Williams 的方法:

Public d As Scripting.Dictionary

Function Main()
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "menu", Array("home", "friends", "money")
    d.Add "home", Array("cat", "dog", "mouse")
    d.Add "work", Array("boss", "employes")
End Function

得到:未设置对象变量(错误 91)

如果我正确理解 BigBen 和 Manpreet Singh Dhillon 并尝试了他们的方法:

Public d 
Function Main()
    Set d = New Scripting.Dictionary 
    d.Add "menu", Array("home", "friends", "money") 
    d.Add "home", Array("cat", "dog", "mouse") 
    d.Add "work", Array("boss", "employes") 
End Function 

我得到:需要对象(错误 424)

【问题讨论】:

    标签: vba dictionary variables declaration


    【解决方案1】:

    您需要在 sub 之外将字典声明为全局变量(除了将脚本运行时引用添加到您的项目中)

    Public d As Scripting.Dictionary
    
    Function Main()
        Set d = CreateObject("Scripting.Dictionary")
        d.Add "menu", Array("home", "friends", "money")
        d.Add "home", Array("cat", "dog", "mouse")
        d.Add "work", Array("boss", "employes")
    End Function
    

    【讨论】:

    • 您不妨将CreateObject 调用翻转为New Scripting.Dictionary 以在早期绑定中保持一致。
    • 如果不想添加引用,将 d 声明为 Public d 而不定义它
    • 如果我尝试 Public d Function Main() Set d = New Scripting.Dictionary d.Add "menu", Array("home", "friends", "money") d.Add "home ", Array("cat", "dog", "mouse") d.Add "work", Array("boss", "employes") End Function I get : Object required (Error 424)
    • 发布的代码(两个版本)在引用 Microsoft Scripting 运行时对我来说效果很好。还有一些事情你没有告诉我们。你在 Mac 上吗?除非您添加第三方库/模块,否则那里没有字典。
    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2011-10-09
    相关资源
    最近更新 更多