У меня проблемы с отладкой созданной мной процедуры. У меня более 2 тысяч рабочих книг, которые я пытаюсь отфильтровать.
Я передаю этой функции словарь, ключом которого является путь к файлу и имя, а элементом является номер детали 9 di git и номер редакции. Основываясь на пути к папке и номеру детали, я пытаюсь отфильтровать старые номера ревизий.
Я получаю сообщение об ошибке:
Ошибка времени выполнения '10':
Этот массив исправлен или временно заблокирован
Отладчик останавливается на линии: For Each VKey02 In DUnsorted.Keys
. Переменные подсчета отладки k1
и k2
заканчиваются значениями 39
и 1
соответственно на cra sh.
Любые предложения о том, как решить эту проблему, будут оценены.
Примечание: Я включил ссылку " Microsoft Scripting Runtime " для этого кода для работы по назначению.
Option Explicit
Function HighestRev(ByVal DUnsorted As Scripting.Dictionary) As Scripting.Dictionary
Dim DSorted As Scripting.Dictionary
'Keys
Dim VKey01 As Variant
Dim VKey02 As Variant
Dim SKey01 As String
Dim SKey02 As String
'Items
Dim SItem01 As String
Dim SItem02 As String
'SKUs
Dim LSKU01 As Long
Dim LSKU02 As Long
'Revs
Dim IRev01 As Long
Dim IRev02 As Long
'File Name
Dim SName01 As String
Dim SName02 As String
'File Path
Dim SPath01 As String
Dim SPath02 As String
'Debug Variables
Dim k1 As Integer
Dim k2 As Integer
'Initializing
Set DSorted = DUnsorted
'Looping Through
k1 = 0
For Each VKey01 In DUnsorted.Keys
k1 = k1 + 1: k2 = 1 '<-- Debug
If VKey01 = "[A Particular File]" Then
Debug.Print "1 - " & VKey01
Debug.Print k1 & " - " & k2
End If
SKey01 = VKey01
If Not DSorted.Exists(SKey01) Then GoTo SkipKey01
SItem01 = DUnsorted(SKey01)
LSKU01 = Split(SItem01, "-")(0)
IRev01 = Split(SItem01, "-")(1)
SName01 = Split(SKey01, "\")(UBound(Split(SKey01, "\")))
SPath01 = Left(SKey01, Len(SKey01) - Len(SName01))
For Each VKey02 In DUnsorted.Keys
k2 = k2 + 1 '<-- Debug
If VKey02 = "[A Particular File]" Then
Debug.Print "2 - " & VKey02
Debug.Print k1 & " - " & k2
End If
SKey02 = VKey02
If Not DSorted.Exists(SKey02) Then GoTo SkipKey02
SItem02 = DUnsorted(SKey02)
LSKU02 = Split(SItem02, "-")(0)
IRev02 = Split(SItem02, "-")(1)
SName02 = Split(SKey02, "\")(UBound(Split(SKey02, "\")))
SPath02 = Left(SKey02, Len(SKey02) - Len(SName02))
'Identifying Match
If SKey01 <> SKey02 Then
If LSKU01 = LSKU02 Then
If UBound(Split(SPath01, SPath02)) > 0 Or UBound(Split(SPath02, SPath01)) > 0 Then
'Eliminating Older Revision
If IRev01 > IRev02 Then
DSorted.Remove (SKey02)
ElseIf IRev01 < IRev02 Then
DSorted.Remove (SKey01)
Else '<-- Last Modified Priority
DSorted.Remove (OlderDate(SKey01, SKey02))
End If
If Not DSorted.Exists(SKey01) Then GoTo SkipKey01
End If
End If
End If
SkipKey02:
Next VKey02
SkipKey01:
Next VKey01
End Function