Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отслеживание изменений в конкретных ячейках - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Отслеживание изменений в конкретных ячейках
alex2609 Дата: Пятница, 21.08.2015, 16:10 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 6 ±
Замечаний: 20% ±

Excel 2013
Необходимо отслеживать изменения в диапазоне ячеек, были/не были
Читал тут http://www.excelworld.ru/forum/2-8734-1 но применить к своему файлу не смог.
Подробное описание в файле.
Реальный файл очень большой и отслеживаемые ячейки находятся на разных листах.
К сообщению приложен файл: 222.xlsx (11.6 Kb)
 
Ответить
СообщениеНеобходимо отслеживать изменения в диапазоне ячеек, были/не были
Читал тут http://www.excelworld.ru/forum/2-8734-1 но применить к своему файлу не смог.
Подробное описание в файле.
Реальный файл очень большой и отслеживаемые ячейки находятся на разных листах.

Автор - alex2609
Дата добавления - 21.08.2015 в 16:10
Michael_S Дата: Пятница, 21.08.2015, 17:49 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Конкретно для вашего примера, в модуль Лист1
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Worksheets("Лист3").Cells(Target.Row, 3) = Date ' или "изменено " & date
End Sub
[/vba]но мне почему-то кажется, что пример очень далек от реальности...
К сообщению приложен файл: 222-1-.xlsm (17.9 Kb)
 
Ответить
СообщениеКонкретно для вашего примера, в модуль Лист1
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
Worksheets("Лист3").Cells(Target.Row, 3) = Date ' или "изменено " & date
End Sub
[/vba]но мне почему-то кажется, что пример очень далек от реальности...

Автор - Michael_S
Дата добавления - 21.08.2015 в 17:49
alex2609 Дата: Воскресенье, 23.08.2015, 13:28 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 6 ±
Замечаний: 20% ±

Excel 2013
Да вы правы далек.

В реальном файле и примере Лист 1 отличается, вставка кода в модуль Листа 1 бессмысленна, т.к. там содержится лишь часть данных для расчета Листа 3 и изменения на Листе 1, не всегда приводят к изменениям на Листе 3.

При вставке кода в Лист 3, работает, но только при изменении ячеек вручную, а при изменении формулы на предыдущих листах нет.

Возможно ли адаптировать код, чтобы учитывать изменения конкретно на Листе 3, учитывая, что данные в нем не вводятся вручную, а рассчитываются по формуле по данным с нескольких других Листов или даже файлов?
 
Ответить
СообщениеДа вы правы далек.

В реальном файле и примере Лист 1 отличается, вставка кода в модуль Листа 1 бессмысленна, т.к. там содержится лишь часть данных для расчета Листа 3 и изменения на Листе 1, не всегда приводят к изменениям на Листе 3.

При вставке кода в Лист 3, работает, но только при изменении ячеек вручную, а при изменении формулы на предыдущих листах нет.

Возможно ли адаптировать код, чтобы учитывать изменения конкретно на Листе 3, учитывая, что данные в нем не вводятся вручную, а рассчитываются по формуле по данным с нескольких других Листов или даже файлов?

Автор - alex2609
Дата добавления - 23.08.2015 в 13:28
AndreTM Дата: Воскресенье, 23.08.2015, 19:04 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Может, применить несколько иной подход?
Не отслеживать каждое изменение, а просто сравнивать два состояния листа в конкретные моменты времени?
То есть, при необходимости, сначала делаем копию "наблюдаемого" листа (можно скрытую), а затем, когда нас интересует, насколько изменились данные - сравниваем текущее состояние с копией и как-то показываем расхождения.
Ну или вообще сравнивать состояния целых книг.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеМожет, применить несколько иной подход?
Не отслеживать каждое изменение, а просто сравнивать два состояния листа в конкретные моменты времени?
То есть, при необходимости, сначала делаем копию "наблюдаемого" листа (можно скрытую), а затем, когда нас интересует, насколько изменились данные - сравниваем текущее состояние с копией и как-то показываем расхождения.
Ну или вообще сравнивать состояния целых книг.

Автор - AndreTM
Дата добавления - 23.08.2015 в 19:04
alex2609 Дата: Понедельник, 24.08.2015, 13:54 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 6 ±
Замечаний: 20% ±

Excel 2013
Можно, в случае если Листов несколько, а если их 100, тогда смысл этих действий теряется, т.к. они направлены на максимальное упрощение и автоматизацию работы. В данном варианте придется следить за состоянием Листов копировать их и перекопировать.
 
Ответить
СообщениеМожно, в случае если Листов несколько, а если их 100, тогда смысл этих действий теряется, т.к. они направлены на максимальное упрощение и автоматизацию работы. В данном варианте придется следить за состоянием Листов копировать их и перекопировать.

Автор - alex2609
Дата добавления - 24.08.2015 в 13:54
AndreTM Дата: Понедельник, 24.08.2015, 15:30 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
alex2609, почему теряется смысл? Вам же не вручную что-то делать, вы вообще по идее ничего не должны замечать...
Ну 100 листов... Ну или 10 книг, по 10 листов... Ну завести книгу-накопитель для этих листов, правильно организовать соответствие связей... и копии будут сбрасываться туда, и сверяться потом... Не вами же сверяться, вы только результаты увидите. Это и есть автоматизация :)
Ну, если скажем, надо следить только за определенными ячейками или диапазонами, а не целыми листами - можно организовать список наблюдения, сверяться только по нему, но получится такой же накопитель, только для диапазонов...
Или вы всё же продолжаете умалчивать что-то? Например, вам нужно не просто видеть, что изменилось, а отслеживать историю изменений?
Хотя, если честно, я вообще не могу вникнуть в затею "отслеживать изменения". Вижу желание. Но не вижу смысла данного действа.


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщениеalex2609, почему теряется смысл? Вам же не вручную что-то делать, вы вообще по идее ничего не должны замечать...
Ну 100 листов... Ну или 10 книг, по 10 листов... Ну завести книгу-накопитель для этих листов, правильно организовать соответствие связей... и копии будут сбрасываться туда, и сверяться потом... Не вами же сверяться, вы только результаты увидите. Это и есть автоматизация :)
Ну, если скажем, надо следить только за определенными ячейками или диапазонами, а не целыми листами - можно организовать список наблюдения, сверяться только по нему, но получится такой же накопитель, только для диапазонов...
Или вы всё же продолжаете умалчивать что-то? Например, вам нужно не просто видеть, что изменилось, а отслеживать историю изменений?
Хотя, если честно, я вообще не могу вникнуть в затею "отслеживать изменения". Вижу желание. Но не вижу смысла данного действа.

Автор - AndreTM
Дата добавления - 24.08.2015 в 15:30
alex2609 Дата: Понедельник, 24.08.2015, 21:22 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 6 ±
Замечаний: 20% ±

Excel 2013
По поводу копий до конца не понимаю как это работает. Есть функция автоматического копирования? Возможно вы правы, надо разбираться. Не хватает знаний.

Я ничего не умалчиваю, но если начну описывать файлы полностью, то это будет много букв...
Нужно просто отслеживать факт изменений без отслеживания истории изменений.
Кратко есть Таблица с несколькими параметрами Товар (строки -константа) и цена, наличие, скидка (столбцы - переменные)
Переменные не вводятся вручную на данном Листе, а рассчитываются на основании данных с других Листов этой же Книги.
Соответственно в Таблице не видно были изменения или нет.
Нужно понимать изменилась цена на товар или нет (насколько неважно)

Есть желание упростить работу и в этом я вижу смысл.
Возможно существует удивительно простой способ это сделать:)


Сообщение отредактировал alex2609 - Понедельник, 24.08.2015, 21:23
 
Ответить
СообщениеПо поводу копий до конца не понимаю как это работает. Есть функция автоматического копирования? Возможно вы правы, надо разбираться. Не хватает знаний.

Я ничего не умалчиваю, но если начну описывать файлы полностью, то это будет много букв...
Нужно просто отслеживать факт изменений без отслеживания истории изменений.
Кратко есть Таблица с несколькими параметрами Товар (строки -константа) и цена, наличие, скидка (столбцы - переменные)
Переменные не вводятся вручную на данном Листе, а рассчитываются на основании данных с других Листов этой же Книги.
Соответственно в Таблице не видно были изменения или нет.
Нужно понимать изменилась цена на товар или нет (насколько неважно)

Есть желание упростить работу и в этом я вижу смысл.
Возможно существует удивительно простой способ это сделать:)

Автор - alex2609
Дата добавления - 24.08.2015 в 21:22
Michael_S Дата: Понедельник, 24.08.2015, 23:42 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Можно, в случае если Листов несколько, а если их 100, тогда смысл этих действий теряется,
а зачем сто листов отслеживать? у вас вроде все на один лист собирается?
 
Ответить
Сообщение
Можно, в случае если Листов несколько, а если их 100, тогда смысл этих действий теряется,
а зачем сто листов отслеживать? у вас вроде все на один лист собирается?

Автор - Michael_S
Дата добавления - 24.08.2015 в 23:42
alex2609 Дата: Среда, 26.08.2015, 16:48 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 6 ±
Замечаний: 20% ±

Excel 2013
Собирается на 1 лист в одной книге. Сейчас книг 25, будет больше

Код из сообщения 2 работает но только при вводе данных, а если вместо чисел формулы то нет

Другого варианта кроме копирования и сравнивания данных нет?
К сообщению приложен файл: 223.xlsm (8.5 Kb)


Сообщение отредактировал alex2609 - Среда, 26.08.2015, 16:53
 
Ответить
СообщениеСобирается на 1 лист в одной книге. Сейчас книг 25, будет больше

Код из сообщения 2 работает но только при вводе данных, а если вместо чисел формулы то нет

Другого варианта кроме копирования и сравнивания данных нет?

Автор - alex2609
Дата добавления - 26.08.2015 в 16:48
Michael_S Дата: Среда, 26.08.2015, 17:33 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
можно так попробовать
К сообщению приложен файл: 223-1-.xlsm (17.2 Kb)
 
Ответить
Сообщениеможно так попробовать

Автор - Michael_S
Дата добавления - 26.08.2015 в 17:33
alex2609 Дата: Среда, 25.11.2015, 15:42 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 6 ±
Замечаний: 20% ±

Excel 2013
Файл 223-1-.xlsm работает так как нужно, но при любых изменениях (например увеличении количества строк) пишет ошибку "Run-time error (9): Subscript out of range
Не зная VBA сложно разобраться в коде.
В моем файле ячеек где надо отслеживать изменения больше и находятся они в других столбцах, и идут с пробелами (пустые строки)
Можно ли вписать свои области данных в код (куда?)

[vba]
Код
Option Explicit

Private Sub Worksheet_Calculate()
Dim Arr1(), cell As Range, i&
Set cell = UsedRange
Arr1 = Intersect(UsedRange, Range("A:A")).Value
For i = 1 To UBound(Arr1)
If Arr1(i, 1) <> Arr(i, 1) Then cell.Cells(i, 2) = "Изменено " & Now
Next
Arr = Intersect(UsedRange, Range("A:A"))
End Sub
[/vba]

При изменении ссылок на Листе1 не на Лист2, а на нужный мне в принципе все работает, но мне нужно увеличить количество ячеек (строк), но получается ошибка
При протягивании или копировании А9 и В9 вниз на 6 строк вниз все работает, а на 7 строк - ошибка "Run-time error (9): Subscript out of range
[moder]Для оформления кода используйте кнопку #. Исправила за Вас[/moder]


Сообщение отредактировал alex2609 - Среда, 25.11.2015, 16:38
 
Ответить
СообщениеФайл 223-1-.xlsm работает так как нужно, но при любых изменениях (например увеличении количества строк) пишет ошибку "Run-time error (9): Subscript out of range
Не зная VBA сложно разобраться в коде.
В моем файле ячеек где надо отслеживать изменения больше и находятся они в других столбцах, и идут с пробелами (пустые строки)
Можно ли вписать свои области данных в код (куда?)

[vba]
Код
Option Explicit

Private Sub Worksheet_Calculate()
Dim Arr1(), cell As Range, i&
Set cell = UsedRange
Arr1 = Intersect(UsedRange, Range("A:A")).Value
For i = 1 To UBound(Arr1)
If Arr1(i, 1) <> Arr(i, 1) Then cell.Cells(i, 2) = "Изменено " & Now
Next
Arr = Intersect(UsedRange, Range("A:A"))
End Sub
[/vba]

При изменении ссылок на Листе1 не на Лист2, а на нужный мне в принципе все работает, но мне нужно увеличить количество ячеек (строк), но получается ошибка
При протягивании или копировании А9 и В9 вниз на 6 строк вниз все работает, а на 7 строк - ошибка "Run-time error (9): Subscript out of range
[moder]Для оформления кода используйте кнопку #. Исправила за Вас[/moder]

Автор - alex2609
Дата добавления - 25.11.2015 в 15:42
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!