В Personal.xlsb имеется макрос для создания новой книги с одним листом, содержащим копию только данных исходного:
Код
Sub Makros1 ()
Dim CurW As Window
Dim TempW As Window
Set CurW = ActiveWindow
Set TempW = ActiveWorkbook.NewWindow
CurW.SelectedSheets.Copy
TempW.Close
ActiveSheet.UsedRange = ActiveSheet.UsedRange.Value
End Sub
Как добавить в этот макрос следующий код, добавляющий расширенный фильтр с поиском по шаблону, который прописывался бы в модуль этого листа:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(Cells(1, 1), Cells(2, 1))) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
Range("A2").Select
End Sub
machodg, здравия. Чтобы с чистой совестью, не ожидая пинков со стороны модераторов, Вам помогать, зайдите в своё сообщение, оформите, как заведено здесь, код выделив и нажав на ниже указанную кнопочку: Спасибо.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
machodg написал: имеется макрос для создания новой книги с одним листом
Вообще-то строка CurW.SelectedSheets.Copy намекает на то, что в новую книгу может быть скопировано несколько листов, если выделено несколько листов. Но формулы в значения преобразуются только для одного листа. Для копирования одного листа этот макрос можно сделать в 2 строки:
Код
Sub Makros1()
ActiveSheet.Copy
ActiveSheet.UsedRange = ActiveSheet.UsedRange.Value
End Sub
Что касается добавления кода макросом - я бы не советовал это делать. Сделайте шаблон листа с кодом в Personal, копируйте его в новую книгу и заполняйте данными.
Казанский написал: Что касается добавления кода макросом - я бы не советовал это делать.
Спасибо за ответ. А почему не советуете? Да действительно, в макросе есть возможность копирования нескольких листов. Был задуман универсальный макрос. Но в каждый данный момнт у меня активирован только один лист и нет проблем.
Цитата
Казанский написал: Сделайте шаблон листа с кодом в Personal, копируйте его в новую книгу и заполняйте данными.
Дело в том, что листов очень много и надо делать отчеты по каждому листу отдельно только с данными с возможностью поиска в длинном списке наименований. Каждый раз копировать данные в шаблон вручную - минимум неудобно. Хочу автоматизировать весь процесс нажатием на одну кнопку. Не знаю как создать модуль листа средствами VBA и прописать в него код автоматический.
Модуль листа создается сам вместе с листом. А код в него можно записать так: Как добавить код процедуры программно, скопировать модуль Там есть пример кода как раз для Worksheet_Change. Но я соглашусь с Казанским - не лучшая это идея. Наверное, имеет смысл оптимизировать как-то свои коды таким образом, чтобы не пришлось модули создавать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...