初始化后,Dictionary对象不保留其条目

时间:2015-03-06 04:31:55

标签: vba dictionary ms-word scope

我有一个令人沮丧的时间弄清楚为什么我的scripting.dictionary对象在Document_open()事件之间以及当我想在文档中的子文档中使用它时丢失其初始数据。

我已经宣布了我的字典:

Public AcrDict As New Scripting.Dictionary

使用:

Private Sub Document_Open()

我从excel电子表格中添加了一些条目,然后就可以开始了。就在End Sub Document_Open()的最后AcrDict之前,我打印了Public Sub Acronym() 中的一些条目,并确认一切都在我想要的位置。

现在,我想在实际的word文档中运行一个sub:

'Public Variables for the dictionary object and a boolean for if it exists.

Public AcrDict As New Scripting.Dictionary
Public bool_dict_exists As Boolean

'Public Variables for the Excel Spreadsheet and Book

Public Dict_Wb As New Workbook
Public Dict_Sheet As New Worksheet

在那之后的第一行,我重复我用来检查词典初始化的命令。

但是,这次,条目返回空白;我设置的字典似乎又空了!
有谁知道这里的问题是什么?如果您认为有必要,我可以提供该计划的更多细节。

修改

以下是一些更新信息。谢谢你耐心等待!

首先,我所描述的所有内容都在文件中声明。说实话,我真的不知道它和模块之间有什么区别。

该计划的总体要点是:

用户将在我提供的模板中编写文档,并将提供许多选项来存储他们在创建文档时与word文档关联的excel文件中使用的任何令人困惑的术语或缩写词。< / p>

用户将键入他们的首字母缩写词,例如,单词,突出显示并运行宏。该程序将首字母缩略词及其提供的定义存储在Excel电子表格中,以便在必要时,用户可以以表格格式查找或编辑它。

由于我将按字母顺序排列excel电子表格,因此我创建了一个scripting.dictionary对象,其中键作为首字母缩写词/行话,项目作为它们在电子表格中出现的行。这有助于在需要返回定义时找到首字母缩略词/行话。

正是这本词典似乎无法保持其价值。

我们从头开始宣布:

Private Sub Document_New()
Dim wdApp As Word.Application
Set wdApp = GetObject(, "Word.Application")
Dim str_startup_msg As String
Dim save_as_test As String
str_startup_msg = "To use the Acronym template, you will first need to save your document. Note: An excel spreadsheet to" & _
" contain your acronyms will be created in the same folder under '<DocumentName>_AcronymSheet.xlsx'."
If MsgBox(str_startup_msg, vbOKCancel) = vbCancel Then
    MsgBox ("The template document will now close.")
    bool_Was_Doc_Created = False
    wdApp.ActiveDocument.Close
Else
    bool_Was_Doc_Created = True
    Dim str_FilePath As String
    str_FilePath = GetSaveAsFilename
    wdApp.ActiveDocument.SaveAs2 FileName:=str_FilePath
    Call Create_Excel(str_FilePath)
End If
End Sub

最初创建文档时:

Call Update_Dict(AcrDict)

&#34; Create_Excel&#34;只需创建一个电子表格,其中包含我将用于缩略语的基本单元格格式,并使用短语&#34; EndOfList&#34;表示条目的结尾。一行写着:

Private Sub Update_Dict()
'Set AcrDict = Nothing
Set AcrDict = New Scripting.Dictionary

Dim var_acronym_data As Variant
Dim int_row_counter As Integer
int_row_counter = 2
var_acronym_data = Dict_Sheet.Cells(int_row_counter, 1).Value
Do While var_acronym_data <> "EndOfList"
    AcrDict.Add Dict_Sheet.Cells(int_row_counter, 1).Value, int_row_counter
    int_row_counter = int_row_counter + 1
    var_acronym_data = Dict_Sheet.Cells(int_row_counter, 1).Value
    MsgBox "Dictionary Init. Key = " & var_acronym_data & ", Defn = " & AcrDict.Item(var_acronym_data)
Loop
AcrDict.Add var_acronym_data, int_row_counter
End Sub

将首字母缩略词和行号复制到字典中:

{{1}}

创建程序时,我应该最终得到一个带有一个条目的字典,键:&#34; EndOfList&#34;,item:2。我可以在创建过程结束时运行一个消息框,它将会确认一下。

现在,当我尝试从程序中运行一个宏时,在加载并初始化所有内容之后,字典就不再有这个条目了。

您能想到的是否有助于在创建和使用模板之间删除字典?

谢谢!

0 个答案:

没有答案