Если я правильно понимаю, вы хотите объединить рабочие листы из числа других рабочих книг X (wbkSrcBook) в основную рабочую книгу (wbkCurBook), но игнорируете дубликаты рабочих листов?
Моим первым вопросом было бы выяснить, что является уникальным для каждого листа, и или сгенерировать какое-либо уникальное значение / псевдо-хэш / сцепленное значение, которое можно использовать для их дифференциации - проще всего будет, если имя рабочего листа уникально, но еслине столбец с номером счета или даже объединение различных строк на каждом листе.
Как только вы поймете это, тогда я представлю, что это будет достаточно просто: создание списка / массива для отслеживания ваших уникальных идентификаторов / имен листов, а затем проверка каждого нового исходного имени / идентификатора листа рабочей книги.против массива - Добавление в основную книгу, если False, ничего не делать, если True.
Функция для проверки наличия чего-либо в массиве (для использования с массивом SheetList)
Private Function CheckArray(value, arr) As Boolean
Dim x As Variant
On Error GoTo CAExit:
For Each x In arr:
If x = value Then
CheckArray = True
On Error GoTo 0
Exit Function
End If
Next
CAExit:
On Error GoTo 0
CheckArray = False
End Function
Добавьте исходные имена листов основной книги (wbkCurBook) в массив
Dim SheetList As Variant
For Each wksCurSheet In wbkCurBook.Sheets
If IsEmpty(SheetList) Then
SheetList = Array(wksCurSheet.Name)
Else
ReDim Preserve SheetList(UBound(SheetList) + 1)
SheetList(UBound(SheetList)) = wksCurSheet.Name
End If
Next
После открытия исходных книг для копирования данных из (wbkSrcBook) сравните ихимена / значения листа в массиве.Если в массиве найдено новое значение, отменить - если нет, скопировать лист в основную книгу (wbkCurBook), а затем добавить новое значение в массив
For Each wksCurSheet In wbkSrcBook.Sheets
If CheckArray("LookUp", SheetList) = False Then
countSheets = countSheets + 1
wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count)
If IsEmpty(SheetList) Then
SheetList = Array(wksCurSheet.Name)
Else
ReDim Preserve SheetList(UBound(SheetList) + 1)
SheetList(UBound(SheetList)) = wksCurSheet.Name
End If
End If
Next
Я тестировал большую часть этого кода в сегментах, ноЯ не пробовал все это вместе - поэтому может потребоваться некоторая настройка, прежде чем вы добавите его обратно в модуль!Я использовал имена листов в качестве простого дифференциатора, но если вам нужно использовать другое, логика не должна сильно меняться.