Имеется на листе событие Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) в диапазоне H4:H500 Макрос привязан на изменение активной ячейки в диапазоне соответственно
Зафиксировать изменение активной ячейки можно 3 способами 1)С помощью формы UserForm - все нормально, макрос выполняется
Но пользователь же может и руками зафиксировать изменение активной ячейки
2)Клавишей Enter - тут при нажатии по умолчанию активная ячейка сползает вниз - регулируется в настройках Excel Файл-Параметры-Дополнительно - Переход к другой ячейке после нажатия Ввод Программно снять галку можно Application.MoveAfterReturn = False - все нормально, макрос выполняется
3)После изменения активной ячейки щелкнуть мышкой в диапазоне на другую ячейку Тут активная ячейка на срабатывание макроса меняется и надо как то видимо изначально запомнить Target активной ячейки и вернутся при изменении адреса активной ячейки - но как это сделать ? Познания мои невелики ...
Попробовал так - не получается
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.MoveAfterReturn = False
If Not Intersect(Target, Range("H4:H500")) Is Nothing Then
Dim ii
ii = Target.Address 'присваиваем переменной адрес выделенного диапазона
If Target.Address <> ii Then 'если кликом мыши поменяли адрес
''Application.Undo 'это не сработало
Target.Address(0, 0) = ii ' Target возвращается обратно - здесь ошибка идет
End If
''''''' мой макрос
End If
End Sub
Dim oldTarget As Range
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("H4:H500")) Is Nothing Then Set oldTarget = Target
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("H4:H500")) Is Nothing Then
Application.EnableEvents = False
If Not oldTarget Is Nothing Then oldTarget.Select
End If
Application.EnableEvents = True
End Sub
Согласие есть продукт при полном непротивлении сторон
Да вроде попытался все обьяснить выше - есть 3 способа изменить активную ячейку На активную ячейку по изменению повесил макрос Если во время изменения ячейки (запуска макроса) она изменит свое местоположение - то макрос в другой строке выполнится куда активная ячейка перепрыгнет (например по Enter либо просто по клику в другой ячейке диапазона) Вопрос зачем это надо: делаю табличку для работы - других людей же не заставишь - эту ячейку меняй только через форму (изменив нужную ячейку они и Enter нажмут и мышью повыделяют соседние ячейки в диапазоне)
Sanja ваш макрос замечательно подошел то что надо - огромное спасибо !!