Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2009, 13:46   #1
Светлана87
Пользователь
 
Регистрация: 07.10.2009
Сообщений: 17
По умолчанию событие Private Sub Worksheet_Change

Добрый день! Можно ли в событии Private Sub Worksheet_Change(ByVal Target As Range) отследить только изменения, произведенные пользователем вручную, а не программно. Спасибо.
Светлана87 вне форума Ответить с цитированием
Старый 10.10.2009, 14:08   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Светлана87.
а Вы не пробовали обратиться к другому "событию"
Worksheet_SelectionChange ?
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 10.10.2009, 14:28   #3
Светлана87
Пользователь
 
Регистрация: 07.10.2009
Сообщений: 17
По умолчанию Пробовала

Пробовала, не получается- мне требуется фиксировать изменения. 3 столбца - АВС Пользователь меняет значение в столбце В – изменение происходит в столбце С, меняет значение в А – изменение только в В. А про коду получается цикл – в С тоже значение меняется, только программно. Вот я и хочу отследить только те изменения, которые произведены пользователем.
Светлана87 вне форума Ответить с цитированием
Старый 10.10.2009, 14:29   #4
Светлана87
Пользователь
 
Регистрация: 07.10.2009
Сообщений: 17
По умолчанию

Пробовала, не получается- мне требуется фиксировать изменения. 3 столбца - АВС Пользователь меняет значение в столбце В – изменение происходит в столбце С, меняет значение в А – изменение только в В. А про коду получается цикл – в С тоже значение меняется, только программно. Вот я и хочу отследить только те изменения, которые произведены пользователем.
Вложения
Тип файла: rar Пример.rar (6.5 Кб, 22 просмотров)
Светлана87 вне форума Ответить с цитированием
Старый 10.10.2009, 17:44   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте такой вариант:

Код:
Public a As Double, OldValue

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    OldValue = ActiveCell.Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub    ' если изменено сразу несколько ячеек
    Application.EnableEvents = False    ' временно отключаем обработку событий
    On Error Resume Next
    Select Case Target.Column
        Case 1, 2: Target.Next = Target.Next + OldValue - Target
        Case Else:    ' ничего не делаем
    End Select
    Application.EnableEvents = True    ' снова включаем обработку событий
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 11.10.2009, 18:42   #6
Светлана87
Пользователь
 
Регистрация: 07.10.2009
Сообщений: 17
По умолчанию Спасибо!

Спасибо EducatedFool! Да, идеально подходит
Светлана87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Private: public: Swool Общие вопросы C/C++ 2 15.09.2009 13:53
Помогите с Worksheet_Change плз. zander Microsoft Office Excel 1 28.02.2009 21:46
Событие terminadoor Общие вопросы Delphi 13 17.07.2008 09:25
Событие maha Общие вопросы Delphi 6 18.06.2008 18:53
разделы type-а: private, pub....... Altera Общие вопросы Delphi 4 16.02.2008 17:19