У меня относительно простой вопрос. В настоящее время у меня есть код, который работает хорошо, но не эффективно. У меня есть около 500 учетных центров, каждый со своей рабочей книгой, которую я объединил в центральное хранилище (ссылка - Wb2 в коде ниже). Код копирует диапазоны из каждого открытого шаблона (Wb1) в мою консолидацию (Wb2). Вопросы перечисляются после текущего кода, помеченного ниже:
Sub CopyData()
Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
Dim rngToCopy1 As Range
Dim rngToCopy2 As Range
Dim rngToCopy3 As Range
Dim rngToCopy4 As Range
Dim rngToCopy5 As Range
Set wb2 = ThisWorkbook
Application.Calculation = xlManual
For Each wB In Application.Workbooks
If Not Left(wB.Name, 18) = "Consolidation Test" Then
Set Wb1 = wB
Exit For
End If
Next
'Forecast Data
With Wb1.Sheets(1)
Set rngToCopy1 = .Range("A11:O11", .Cells(.Rows.Count, "A").End(xlUp))
End With
wb2.Sheets(7).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy1.Rows.Count, 15).Value = rngToCopy1.Value
wb2.Sheets(7).Range("P" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy1.Rows.Count).Value = Sheets(3).Range("J1").Value
'Planning (budget) Data
With Wb1.Sheets(3)
Set rngToCopy2 = .Range("A10:S10", .Cells(.Rows.Count, "A").End(xlUp))
End With
wb2.Sheets(8).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy2.Rows.Count, 19).Value = rngToCopy2.Value
wb2.Sheets(8).Range("T" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy2.Rows.Count).Value = Sheets(3).Range("J1").Value
'Travel Data
With Wb1.Sheets(5)
Set rngToCopy3 = .Range("A6:AA6", .Cells(.Rows.Count, "A").End(xlUp))
End With
wb2.Sheets(9).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy3.Rows.Count, 27).Value = rngToCopy3.Value
wb2.Sheets(9).Range("AB" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy3.Rows.Count).Value = Sheets(3).Range("J1").Value
'Vacancy Data
With Wb1.Sheets(6)
Set rngToCopy4 = .Range("A6:O6", .Cells(.Rows.Count, "A").End(xlUp))
End With
wb2.Sheets(10).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy4.Rows.Count, 15).Value = rngToCopy4.Value
wb2.Sheets(10).Range("P" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy4.Rows.Count).Value = Sheets(3).Range("J1").Value
'Manpower Data
With Wb1.Sheets(7)
Set rngToCopy5 = .Range("A6:O6", .Cells(.Rows.Count, "A").End(xlUp))
End With
wb2.Sheets(11).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy5.Rows.Count, 15).Value = rngToCopy5.Value
wb2.Sheets(11).Range("P" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy5.Rows.Count).Value = Sheets(3).Range("J1").Value
End Sub
Сейчас я имею дело с повторениями отправлений шаблонов, поэтому нижеприведенное упражнение становится удалением, а не просто копированием и вставкой. Мне понадобится некоторый пример кода, чтобы проверить, появляется ли Range ("J1") на Sheets (3) в любом из других диапазонов, к которым я вставляю:
With Wb1.Sheets(1)
Set rngToCopy1 = .Range("A11:O11", .Cells(.Rows.Count, "A").End(xlUp))
End With
wb2.Sheets(7).Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy1.Rows.Count, 15).Value = rngToCopy1.Value
wb2.Sheets(7).Range("P" & Rows.Count).End(xlUp).Offset(1).Resize(rngToCopy1.Rows.Count).Value = Sheets(3).Range("J1").Value
Другими словами, какой код я бы использовал, чтобы проверить, появляется ли J11 на листе 3 где-нибудь в столбце P на листе 7 и, если это так, удалить? Только тогда должна выполняться операция вставки. Целью здесь является удаление данных из любых МВЗ, которые уже были импортированы в мой лист.
Надеюсь вопрос и описание проблемы понятны? Причина, по которой мне нужен новый пост, заключается в том, что новичку трудно адаптировать уже опубликованные примеры к моему текущему коду.
Спасибо за Ваш опыт!