Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vba中声明和使用总体词典_Vba_Dictionary_Variables_Declaration - Fatal编程技术网

在vba中声明和使用总体词典

在vba中声明和使用总体词典,vba,dictionary,variables,declaration,Vba,Dictionary,Variables,Declaration,我是编程新手,尤其是vba新手,但我正在尽我最大的努力,现在我需要你的帮助 因此,我想要实现的是: 我用word做了一个界面。有多个按钮。如果单击了一个按钮,则程序应检查所单击的按钮标题是否是字典中的键,该字典在按钮单击的sub之外声明 比如: 我点击按钮1,上面写着:“工作”->检查“工作”是否是字典中的一个键->如果是,用键“工作”的第一项覆盖按钮标题 我点击按钮2,上面写着:“home”->检查“home”是否是字典中的一个键->如果是,用键“home”的第一项覆盖按钮标题 如果按钮标题没

我是编程新手,尤其是vba新手,但我正在尽我最大的努力,现在我需要你的帮助

因此,我想要实现的是:

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

比如:

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

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

如果按钮标题没有键,则应在文件中搜索按钮标题,并在标签中打印下一段(->效果相当好)

我的做法:

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 
  • 我试图声明字典(在main()中)

  • 我(在main()中)填写了字典

  • 我为按钮单击创建了子对象(子对象)

  • 可选:我创建了一个函数,该函数被调用以检查按钮标题是否是字典中的键(函数)

  • 如果返回的检查为真:覆盖按钮标题(在子菜单中)

  • 问题:

    到目前为止,我最大的问题是通过点击按钮使字典变得易懂。 我只是不知道如何正确申报

    我试着像这样宣布它是公开的:

    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声明为静态(其余代码相同):

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

    因此,我对自己的概念非常不确定,非常感谢有人给我提供了关于如何改进我的编码风格和程序本身的提示! 提前谢谢


    编辑: 我尝试了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
    
    and got:未设置对象变量(错误91)

    如果我正确理解BigBen和Manpret 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 
    

    I get:Object required(错误424)

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


    您还可以将
    CreateObject
    调用翻转到一个
    New Scripting.Dictionary
    以在早期绑定中保持一致。如果您不想添加引用,请将d声明为Public d而不定义它如果我尝试Public d Function Main()Set d=New Scripting.Dictionary d.add“menu”,Array(“home”,“friends”,“money”)d.添加“home”,数组(“cat”,“dog”,“mouse”)d.添加“work”,数组(“boss”,“employes”)结束函数我得到:Object required(错误424)发布的代码(两个版本)在参考Microsoft脚本运行时后对我来说都很好。还有一件事你没有告诉我们。你在Mac电脑上吗?除非您添加第三方库/模块,否则那里没有字典。
    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