Страницы: 1
RSS
Записать макросом в модуль листа
 
Здравствуйте, есть код модуля листа:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("Y5")) Is Nothing Then
Call б_ОбновитьФильтры
End If
End Sub

я бы хотел чтобы он автоматически записываться в модуль активного листа.

Попробовал сохранить его как КодЛиста.cls и загружать макросом в книгу:
Код
ActiveWorkbook.VBProject.VBComponents.Import "C:\Users\" & CreateObject("WScript.Network").UserName & "\Google Диск\!Distrib\КодЛиста.cls"
так не получается, создается Class Modules

Подскажите, как правильно?
 
Что значит 'автоматически'?
Согласие есть продукт при полном непротивлении сторон
 
Как добавить код процедуры программно, скопировать модуль
Там есть пример кода создания событийных процедур. В качестве примера события листа используется как раз событие Change.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Sanja, можно читать без "автоматически", просто записывался в модуль листаю
Дмитрий(The_Prist) Щербаков, нет более стройного кода? мне кажется, для моей задачи, должно быть проще решение?!
может я в синтаксисе ошибаюсь?
 
Paha_Fil, объясните цель вставки кода. Возможно, задачу можно решить без хирургического вмешательства: обработка события книги или приложения, вставка листа с кодом из шаблона.
 
Казанский, спасибо!
Каждый день мне поступает лист с данными, я вставляю его в свою книгу и редактирую до удобного мне вида при помощи макросов,
в том числе мне нужно чтобы при изменении определенной ячейки срабатывал макрос перерабатывающий таблицу.
Способа лучше чем запись кода (указанного вначале) в модуль листа я не нашел, я остановился на том как мне добавлять код в лист каждый раз.
Если есть другие варианты, подскажите
 
Цитата
Paha_Fil написал: Если есть другие варианты, подскажите
Вам подсказали
Цитата
Казанский написал: ...обработка события книги...
Вот такой код будет срабатывать при изменении ячейки 'Y5' на любом листе. Если не надо на всех листах отслеживать это событие, то в коде можно прописать условия, для каких листов оно срабатывает или нет.
В модуль ЭтаКнига
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("Y5")) Is Nothing And Target.Count = 1 Then
    Call б_ОбновитьФильтры
End If
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, это хороший вариант, как прописать условия, чтобы определенные листы исключить?

Мне все-таки хотелось бы, чтобы код был в листе, чтобы можно было лист скопировать в новую книгу, сохранить отдельно и там все работало
 
Цитата
Paha_Fil написал: как прописать условия, чтобы определенные листы исключить?
Вариантов может быть много. Если листов, которые нужно исключить из обработки не много (один/два), то можно проверять их имя на прямую
Код
If Sh.Name <> "Исключить_1" And Sh.Name <> "Исключить_2" Then
    If Not Intersect(Target, Range("Y5")) Is Nothing And Target.Count = 1 Then
        Call б_ОбновитьФильтры
    End If
End If
Если 'исключительных' листов много, то можно создать массив с именами этих листов, собрать их в словарь и проверять на .Exists
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim shNames(), iTemp, I&
shNames = Array("Лист1", "Лист3", "Лист5", "Лист7", "Лист9")
With CreateObject("Scripting.Dictionary")
    For I = LBound(shNames) To UBound(shNames): iTemp = .Item(shNames(I)): Next
    If Not .Exists(Sh.Name) Then
        If Not Intersect(Target, Range("Y5")) Is Nothing And Target.Count = 1 Then
            Call б_ОбновитьФильтры
        End If
    End If
End With
End Sub
Если листов, которые нужно обрабатывать меньше, чем тех, которые нужно исключить из обработки, то можно проводить те же самые проверки, только проверять на равенство.
Изменено: Sanja - 14.04.2019 08:24:26
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Paha_Fil написал: Мне все-таки хотелось бы, чтобы код был в листе, чтобы можно было лист скопировать в новую книгу, сохранить отдельно и там все работало
Только способом, который Вам подсказал Дмитрий(The_Prist) Щербаков,
Согласие есть продукт при полном непротивлении сторон
 
Sanja, большое спасибо за Ваши ответы,  и всем учавствовавшим, буду разбираться.
Страницы: 1
Наверх