Всем доброго дня! Объясните, пж. "чайнику", следующий вопрос: Сделал из файла надстройку, которая создает шаблон таблицы. В исходном .xls файле по событию Worksheet_SelectionChange открывалось контекстное меню на определенных столбцах таблицы, с целью ее редактирования. Сейчас, после запуска надстройки, этого не происходит. Как связать события листа надстройки и события листа книги к которой эта надстройка применяется? Что нужно указать в коде надстройки и где об этом почитать в доступной начинающему форме? P.S. Можно ли расположить "ленту" надстройки ниже строки формул, не отключая эту строку?
Михаил Львов пишет: Как связать события листа надстройки и события листа книги к которой эта надстройка применяется?
Необходимо создать отдельный класс(myClass) в надстройке, объявить там переменную с типом Application с перехватом событий.
Код
Option Explicit
Public WithEvents oExcel As Excel.Application
Private Sub Class_Initialize()
Set oExcel = Application
End Sub
Private Sub Class_Terminate()
Set oExcel = Nothing
End Sub
Private Sub oExcel_SheetSelectionChange(ByVal Sh As Object, ByVal Target As range)
End Sub
В обычном модуле создать экземпляр класса.
Код
Dim myExcel
Sub Init
Set myExcel = New myClass
End Sub
Теперь события выбора на листах, во всех открытых книгах будут перехватываться процедурой oExcel_SheetSelectionChange.
P.S. Не совсем понятно, что запускает процедуры Инициализации и Уничтожения переменной oExcel в модуле класса? Может быть, они должны "висеть" на событиях Открытия и Закрытия рабочей книги?! И что запускает процедуру Init?!
Всем доброго дня! Сделал перехват события надстройкой:
Код
Private Sub App_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Sh.Name = "Лист1" Then
Call Menu_oplata
End If
End Sub
Как видно из кода, на событие открывается контекстное меню "Оплата". В коде меню, чтобы подавить открытие "штатного" меню, прописал:
Код
.ShowPopup
Cancel = True
Но Cancel = True не выполняется! Что, не так, я сделал?