Обновление объекта словаря при обновлении переменной, содержащей ключ

Я работаю над парсером для серии документов. в рамках этого анализа я размещаю закладки в отдельных документах, а затем циклически перебираю их по одной, чтобы извлечь нужные мне данные из документа, в котором есть несколько экземпляров. Информация, которая меня интересует в этом документе, состоит из нескольких частей, к которым я последовательно обращаюсь, а затем добавляю их в массив, содержащий словарь с отображениями данных. по какой-то причине, когда я обновляю переменную, которая используется для предоставления ключа к словарю, несколькими строками позже, словарь обновляется - на несколько строк раньше, чем должен. Это вызывает ошибку, когда я пытаюсь добавить ключ несколькими строками позже. Если кто-нибудь может объяснить фантомное обновление, я был бы благодарен.

Обновление: я только заметил, что это также происходит после

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

когда значение CurrentString равно "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

1 ответ

Решение

По какой-то причине это перестало быть проблемой. спасибо за помощь людям, но так же загадочно, как и началась эта проблема, она прекратилась.

Обновление - проблема на самом деле, кажется, связана с отладкой. Похоже, это происходит только тогда, когда отладчик достигает точки останова перед строкой словаря. очевидно, VBA как-то автоматически заполнял его (по крайней мере, с элементом индекса 0), когда я достигал точки останова.

Другие вопросы по тегам