#excel #criteria #copy-paste #multiple-conditions #vba
#excel #критерии #копировать-вставить #несколько условий #vba
Вопрос:
У меня есть две разные книги, из одной из них я хочу скопировать определенное значение на основе нескольких критериев.
В этом примере я буду называть каждую книгу wb1 и wb2. В конце сообщения будут общие ссылки на wb в качестве примера, чтобы было более понятно, как это выглядит..
Итак, в wb1 у меня есть список имен, которые также имеют свой собственный лист в wb2. Когда я открываю wb1, я хочу скопировать значение в ячейке с именем «NPS» на каждый лист в wb2 с тем же именем, в wb2 у меня другой месяц и несколько других переменных, которые я должен добавить вручную. Итак, что я хочу, это скопировать значение из NPS в данные в разделе NPS и сопоставить его с тем же месяцем, который также упоминается в wb1.
Что у меня есть до сих пор, так это этот код, но на самом деле он этого не делает. Поскольку я получаю «подраздел вне диапазона» в этой части, установите sh2 = wb2.Sheets (c.Значение). я предполагаю, что он не может идентифицировать листы по значению, даже если его имя точно такое же.
Sub NPS()
Dim sh1 As Worksheet, sh2 As Worksheet, c As Range, wb2 As Workbook, fn As Range
Set sh1 = ThisWorkbook.ActiveSheet
Set wb2 = Workbooks.Open("F:ExcelChefNPS Samtal 777 agentnivå.xlsx")
For Each c In sh1.Range("C8", sh1.Cells(Rows.Count, 3).End(xlUp))
Set sh2 = wb2.Sheets(c.Value)
Set fn = sh2.Rows(24).Find(sh1.Range("B5").Value, , xlValues, xlWhole)
If Not fn Is Nothing Then
fn.Offset(1) = sh1.Range("E5").Value
End If
Next
End Sub
WB2: https://docs.google.com/spreadsheets/d/1vcfnluE_PSm5dEEeHuBPA9XRoP-VPQRk3YDE7ONS-NE/edit?usp=sharing
ЕСЛИ у кого-нибудь есть какие-либо предложения, я был бы очень рад.
// с уважением, Даниэль
Ответ №1:
Похоже, что Excel ищет рабочий лист не в том файле. Перед вставкой значений необходимо активировать правильную книгу. Вот так:
Sub NPS()
Dim sh1 As Worksheet, sh2 As Worksheet, c As Range, wb2 As Workbook, fn As Range
Set sh1 = ThisWorkbook.ActiveSheet
Set wb2 = Workbooks.Open("F:ExcelChefNPS Samtal 777 agentnivå.xlsx")
For Each c In sh1.Range("C8", sh1.Cells(Rows.Count, 3).End(xlUp))
wb2.Activate
Set sh2 = wb2.Sheets(c.Value)
Set fn = sh2.Rows(24).Find(sh1.Range("B5").Value, , xlValues, xlWhole)
If Not fn Is Nothing Then
fn.Offset(1) = sh1.Range("E5").Value
End If
Next
End Sub
Примечание: листы в вашем файле ppsTest не выровнены (NPS -tal находится в другой строке в примере 1).
Комментарии:
1. Все еще получаю ту же ошибку, может быть, что-то еще заставляет меня выдавать эту ошибку? И спасибо за уведомление с неправильной строкой в примере 1. Когда я в режиме отладки запускаю код, я могу по какой-то причине удерживать курсор мыши над c.значение = пустое, если это помогает..