Копирование с одного листа в другую книгу на основе нескольких критериев VBA Excel

#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
  

WB1: https://docs.google.com/spreadsheets/d/14CyC2CQWWH-Bxifw2EBni0Uj2YjlN-kIUVki2rle3LA/edit#gid=1398323909

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.значение = пустое, если это помогает..