Страницы: 1
RSS
Создание надстройки, Не работает Worksheet_SelectionChange
 
Всем доброго дня!
Объясните, пж. "чайнику", следующий вопрос:
Сделал из файла надстройку, которая создает шаблон таблицы.
В исходном .xls файле по событию Worksheet_SelectionChange
открывалось контекстное меню на определенных столбцах таблицы, с целью ее редактирования.
Сейчас, после запуска надстройки, этого не происходит.
Как связать события листа надстройки и события листа книги к которой эта надстройка применяется?
Что нужно указать в коде надстройки и где об этом почитать в доступной начинающему форме?
P.S.
Можно ли расположить "ленту" надстройки ниже строки формул, не отключая эту строку?
Изменено: Михаил Львов - 27.11.2014 06:10:37
 
Цитата
Михаил Львов пишет: Как связать события листа надстройки и события листа книги к которой эта надстройка применяется?
Необходимо создать отдельный класс(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.
Изменено: PowerBoy - 27.11.2014 17:38:36
Excel + SQL = Activetables
 
Я так и подозревал, только не знал практическую реализацию!
Скопировал Ваш код, не работает?!
Изменено: Михаил Львов - 27.11.2014 10:05:40
 
P.S.
Не совсем понятно, что запускает процедуры Инициализации и Уничтожения переменной oExcel
в модуле класса?
Может быть, они должны "висеть" на событиях Открытия и Закрытия рабочей книги?!
И что запускает процедуру Init?!
Изменено: Михаил Львов - 27.11.2014 10:09:59
 
http://www.excel-vba.ru/chto-umeet-excel/kak-otsledit-sobytienaprimer-vydelenie-yacheek-v-lyuboj-knige/
F1 творит чудеса
 
Спасибо, разобрался, все работает!
 
Всем доброго дня!
Сделал перехват события надстройкой:
Код
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 не выполняется!
Что, не так, я сделал?
 
Хех. Вы "Cancel=True", наверное, прописали в процедуре "Menu_oplata", а надо в "App_SheetBeforeRightClick".
There is no knowledge that is not power
 
Вот лопух я! Конечно, вы правы! :oops:
Спасибо!
Страницы: 1
Наверх