Страницы: 1
RSS
Как запомнить Target изначально выделенной ячейки
 
Добрый день всем !

Имеется на листе событие 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

Изменено: oleg355 - 07.05.2018 13:04:44
 
Не до конца понятно что нужно. Может так
Код
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 ваш макрос замечательно подошел то что надо - огромное спасибо  !!
Изменено: oleg355 - 07.05.2018 14:42:03
Страницы: 1
Наверх