持有键的变量在更新时更新字典对象

分号和胶带

我正在分析一系列文件的解析器。作为该解析的一部分,我在各个文档中放置了书签,然后一次在书签中循环浏览,以将我实际想要的数据从其中包含多个实例的文档中拉出。我在文档中感兴趣的信息有几个部分,我可以依次访问这些部分,然后将它们放入一个数组,该数组包含具有数据映射的Dictionary。由于某种原因,当我在几行后更新用于向字典提供键的变量时,字典将更新-应该在几行之前更新。当我稍后尝试添加密钥时,这将导致引发错误。如果有人可以解释幻影更新,我将不胜感激。

更新:我只是注意到,

Set Topics(TopicsCount).TopicMap = New Scripting.Dictionary

当CurrentString值为1时第一次是“ Title”,在我甚至还没有打电话给Add之前

Sub ParseDoc()

Dim objDoc As Document
Set objDoc = ActiveDocument
Dim Topics() As TopicData
Dim TopicsCount As Integer
TopicsCount = -1
Dim DataRange As Range

For i = 1 To objDoc.Bookmarks.count - 1
    indexOfBase = InStr(1, objDoc.Range.Bookmarks(i), "Base")
    CurrentString = Left(objDoc.Range.Bookmarks(i), indexOfBase - 1) ' after this line the Topices(TopicCount).TopicMap updates

    If CurrentString = "Title" Then
        TopicsCount = TopicsCount + 1
        ReDim Preserve Topics(TopicsCount)
        Set Topics(TopicsCount) = New TopicData
        Topics(TopicsCount).TopicID = GrabTitle
        Set Topics(TopicsCount).TopicMap = New Scripting.Dictionary 'the Map will update here the first time with CurrentString, note that the add line is further down and the Map shouldn't know about CurrentString yet.'
    End If
    Set DataRange = ActiveDocument.Range(Start:=objDoc.Range.Bookmarks(i).End, End:=objDoc.Range.Bookmarks(i + 1).Start)
    If CurrentString = "TechArea" Or CurrentString = "Keywords" Then
        DataArray = Split(DataRange.Text, ",")
        For j = 0 To UBound(DataArray)
            DataArray(j) = Trim(DataArray(j))
        Next j
        Topics(TopicsCount).TopicMap.Add CurrentString, DataArray ' throws error because of earlier update
    Else
        Topics(TopicsCount).TopicMap.Add CurrentString, DataRange.Text ' thorws error because of earlier update
    End If
    Next i
End Sub
分号和胶带

无论出于何种原因,这已不再是一个问题。感谢人们的帮助,但是就像这个问题开始一样,它却神秘地终止了。

更新-问题实际上似乎与调试有关。仅当调试器在字典行之前到达断点时,才会出现这种情况。当我到达断点时,显然VBA会以某种方式自动填充它(至少使用0索引项)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章