Наши рабочие книги генерируемые сервером SpreadsheetML , которые не могут содержать любой код VBA. К сожалению, создание собственных файлов Excel или XML-файлов Excel 2007 также не вариант.
Итак, у меня есть надстройка для Excel (VBA, а не XLL), которую каждый из наших пользователей устанавливает для добавления дополнительных UDF и т. Д., Необходимых нашим книгам.
Это прекрасно работает, но теперь мне нужно иметь макрос, который должен выполнять каждый раз, когда пользователь изменяет текст в любой ячейке, независимо от того, какую книгу он активно использует в данный момент.
Пока что я создал новый модуль Class (SheetChangeHandler) в моей надстройке со следующим кодом:
Option Explicit
Private WithEvents App As Application
Private Sub Class_Initialize()
Set App = Application
End Sub
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Debug.Print "Changed"
On Error GoTo Finish
App.EnableEvents = False
DoWorkOnChangedStuff Sh, Source
Finish:
App.EnableEvents = True
End Sub
В моей надстройке я добавил строку для создания экземпляра нового класса:
Public MySheetHandler As New SheetChangeHandler
Насколько я понимаю, это должно заставить Excel отправлять надстройку all SheetChange для всех открытых рабочих книг, при этом эти книги не должны содержать макросов.
Но это не работает ... нет строк отладки, и мой код DoWorkOnChangedStuff не вызывается при изменении ячейки на любом листе.
Есть идеи?