私は一連のドキュメントのパーサーに取り組んでいます。その解析の一環として、個々のドキュメント全体にブックマークを配置し、一度に 1 つずつ循環して、複数のインスタンスが含まれるドキュメントから実際に必要なデータを引き出します。ドキュメント内で関心のある情報にはいくつかの部分があり、これらの部分に順番にアクセスしてから、データ マッピングを含む Dictionary を保持する配列にスローします。何らかの理由で、数行後に辞書にキーを提供するために使用されている変数を更新すると、辞書が更新されます-必要な数行前に。これにより、数行後にキーを追加しようとするとエラーがスローされます。ファントムの更新について誰かが説明できれば、私は感謝しています。
更新:私はちょうどそれが後にも起こることに気付きました
Set Topics(TopicsCount).TopicMap = New Scripting.Dictionary
Add を呼び出す前に、CurrentString 値が初めて「Title」の場合
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