Пишу макрос, хочу чтобы он проверял значение ячейки K1 каждого листа каждой открытой книги, и если находит заданное значение в ячейке K1, то этот лист копируется в новую книгу.
ниже код и что-то безрезультатно. прошу помощи
Код
Sub FindKeyWord()
Dim book As Object 'переменная книги
Dim h As Variant 'переменная листа
Dim bkOtchet As Excel.Workbook
Dim bkNew As Excel.Workbook
Workbooks.Add 'создаю новую книгу
Set bkNew = ActiveWorkbook 'присваиваю ей переменную bkNew
For Each book In Workbooks 'проверяю каждую открытую книгу
For h = 1 To Sheets.Count 'определяю кол-во листов в книге
Worksheets(h).Activate 'проверяю каждый лист в книге
If Cells(1, 11) Like "*KEY_WORD*" Then 'ищу в ячейке K1 значение KEY_WORD
Sheets(h).Move Before:=Workbooks(bkNew).Sheets(1) 'пытаюсь скопировать лист в котором была найдена ячейка K1 с идентичным значением в созданную книгу bkNew перед 1ым листом
Workbooks(bkNew).Sheets(1).Range("K1").FormulaR1C1 = "PAPI" 'переименовываю значение ячейки K1 чтобы не вызвать циклического повторения операции
End If
Next h
Next
End Sub
К тому же вот так писать тоже не следует Workbooks(bkNew) Вы ведь раньше уже объявили Dim bkNew As Excel.Workbook
В итоге код должен выглядить примерно так:
Код
Sub FindKeyWord()
Dim book As Excel.Workbook 'переменная книги
Dim h As Byte '(листов в одной книге больше чем 255 вроде быть не может) / но можно заменить на integer если у Вас все же встречаются
'Dim bkOtchet As Excel.Workbook 'в Вашем коде ни где не используется, можно удалить
Dim bkNew As Excel.Workbook
On Error Resume Next
For Each book In Workbooks 'проверяем каждую книгу
For h = 1 To book.Sheets.Count 'определяем кол-во листов в книге и последовательно перебираем
'If book.Sheets(h).Cells(1, 11) Like "*KEY_WORD*" Then 'ищу в ячейку K1 значение KEY_WORD
'на случай если нужных значений в листах найдено не будет, новую книгу создаем только после нахождение первого значения
If bkNew Is Nothing Then 'проверяем что новая книга не существует
Set bkNew = Workbooks.Add 'добавляем новую книгу и запоминаем ее
End If
book.Sheets(h).Move Before:=Workbooks(bkNew).Sheets(1) 'копируем лист в котором была найдена ячейка K1 с идентичным значением в созданную книгу bkNew перед 1ый листом
bkNew.Sheets(1).Range("K1").FormulaR1C1 = "PAPI" 'переименовываю значение ячейки K1 чтобы не вызвать циклического повторения опереации
'End If
Next h
Next
End Sub
SkyShark, спасибо вам, но макрос так же как и у меня не переносит вкладку с найденным значением "KEY_WORD" в новую книгу, а просто присваивает ячейке K1 значение "PAPI"
а подразумевалось другое: он будет искать лист со значением KEY_WORD в ячейке K1 в каждом листе, каждой открытой книги, и в случае нахождения, этот лист перемещался/копировался в новую книгу.
caustic пишет: я возможно не видел ваших сообщений.
Так посмотрите по форуму: Темы Удаление строк по цвету Объединение диапазонов ячеек с одинаковыми значениями Проверка значений ячеек по уникальному номеру