Необходимо отслеживать изменения в диапазоне ячеек, были/не были Читал тут http://www.excelworld.ru/forum/2-8734-1 но применить к своему файлу не смог. Подробное описание в файле. Реальный файл очень большой и отслеживаемые ячейки находятся на разных листах.
Необходимо отслеживать изменения в диапазоне ячеек, были/не были Читал тут http://www.excelworld.ru/forum/2-8734-1 но применить к своему файлу не смог. Подробное описание в файле. Реальный файл очень большой и отслеживаемые ячейки находятся на разных листах.alex2609
Конкретно для вашего примера, в модуль Лист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]но мне почему-то кажется, что пример очень далек от реальности...
Конкретно для вашего примера, в модуль Лист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
В реальном файле и примере Лист 1 отличается, вставка кода в модуль Листа 1 бессмысленна, т.к. там содержится лишь часть данных для расчета Листа 3 и изменения на Листе 1, не всегда приводят к изменениям на Листе 3.
При вставке кода в Лист 3, работает, но только при изменении ячеек вручную, а при изменении формулы на предыдущих листах нет.
Возможно ли адаптировать код, чтобы учитывать изменения конкретно на Листе 3, учитывая, что данные в нем не вводятся вручную, а рассчитываются по формуле по данным с нескольких других Листов или даже файлов?
Да вы правы далек.
В реальном файле и примере Лист 1 отличается, вставка кода в модуль Листа 1 бессмысленна, т.к. там содержится лишь часть данных для расчета Листа 3 и изменения на Листе 1, не всегда приводят к изменениям на Листе 3.
При вставке кода в Лист 3, работает, но только при изменении ячеек вручную, а при изменении формулы на предыдущих листах нет.
Возможно ли адаптировать код, чтобы учитывать изменения конкретно на Листе 3, учитывая, что данные в нем не вводятся вручную, а рассчитываются по формуле по данным с нескольких других Листов или даже файлов?alex2609
Может, применить несколько иной подход? Не отслеживать каждое изменение, а просто сравнивать два состояния листа в конкретные моменты времени? То есть, при необходимости, сначала делаем копию "наблюдаемого" листа (можно скрытую), а затем, когда нас интересует, насколько изменились данные - сравниваем текущее состояние с копией и как-то показываем расхождения. Ну или вообще сравнивать состояния целых книг.
Может, применить несколько иной подход? Не отслеживать каждое изменение, а просто сравнивать два состояния листа в конкретные моменты времени? То есть, при необходимости, сначала делаем копию "наблюдаемого" листа (можно скрытую), а затем, когда нас интересует, насколько изменились данные - сравниваем текущее состояние с копией и как-то показываем расхождения. Ну или вообще сравнивать состояния целых книг.AndreTM
Можно, в случае если Листов несколько, а если их 100, тогда смысл этих действий теряется, т.к. они направлены на максимальное упрощение и автоматизацию работы. В данном варианте придется следить за состоянием Листов копировать их и перекопировать.
Можно, в случае если Листов несколько, а если их 100, тогда смысл этих действий теряется, т.к. они направлены на максимальное упрощение и автоматизацию работы. В данном варианте придется следить за состоянием Листов копировать их и перекопировать.alex2609
alex2609, почему теряется смысл? Вам же не вручную что-то делать, вы вообще по идее ничего не должны замечать... Ну 100 листов... Ну или 10 книг, по 10 листов... Ну завести книгу-накопитель для этих листов, правильно организовать соответствие связей... и копии будут сбрасываться туда, и сверяться потом... Не вами же сверяться, вы только результаты увидите. Это и есть автоматизация Ну, если скажем, надо следить только за определенными ячейками или диапазонами, а не целыми листами - можно организовать список наблюдения, сверяться только по нему, но получится такой же накопитель, только для диапазонов... Или вы всё же продолжаете умалчивать что-то? Например, вам нужно не просто видеть, что изменилось, а отслеживать историю изменений? Хотя, если честно, я вообще не могу вникнуть в затею "отслеживать изменения". Вижу желание. Но не вижу смысла данного действа.
alex2609, почему теряется смысл? Вам же не вручную что-то делать, вы вообще по идее ничего не должны замечать... Ну 100 листов... Ну или 10 книг, по 10 листов... Ну завести книгу-накопитель для этих листов, правильно организовать соответствие связей... и копии будут сбрасываться туда, и сверяться потом... Не вами же сверяться, вы только результаты увидите. Это и есть автоматизация Ну, если скажем, надо следить только за определенными ячейками или диапазонами, а не целыми листами - можно организовать список наблюдения, сверяться только по нему, но получится такой же накопитель, только для диапазонов... Или вы всё же продолжаете умалчивать что-то? Например, вам нужно не просто видеть, что изменилось, а отслеживать историю изменений? Хотя, если честно, я вообще не могу вникнуть в затею "отслеживать изменения". Вижу желание. Но не вижу смысла данного действа.AndreTM
По поводу копий до конца не понимаю как это работает. Есть функция автоматического копирования? Возможно вы правы, надо разбираться. Не хватает знаний.
Я ничего не умалчиваю, но если начну описывать файлы полностью, то это будет много букв... Нужно просто отслеживать факт изменений без отслеживания истории изменений. Кратко есть Таблица с несколькими параметрами Товар (строки -константа) и цена, наличие, скидка (столбцы - переменные) Переменные не вводятся вручную на данном Листе, а рассчитываются на основании данных с других Листов этой же Книги. Соответственно в Таблице не видно были изменения или нет. Нужно понимать изменилась цена на товар или нет (насколько неважно)
Есть желание упростить работу и в этом я вижу смысл. Возможно существует удивительно простой способ это сделать:)
По поводу копий до конца не понимаю как это работает. Есть функция автоматического копирования? Возможно вы правы, надо разбираться. Не хватает знаний.
Я ничего не умалчиваю, но если начну описывать файлы полностью, то это будет много букв... Нужно просто отслеживать факт изменений без отслеживания истории изменений. Кратко есть Таблица с несколькими параметрами Товар (строки -константа) и цена, наличие, скидка (столбцы - переменные) Переменные не вводятся вручную на данном Листе, а рассчитываются на основании данных с других Листов этой же Книги. Соответственно в Таблице не видно были изменения или нет. Нужно понимать изменилась цена на товар или нет (насколько неважно)
Есть желание упростить работу и в этом я вижу смысл. Возможно существует удивительно простой способ это сделать:)alex2609
Сообщение отредактировал alex2609 - Понедельник, 24.08.2015, 21:23
Файл 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]
Файл 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
Сообщение отредактировал alex2609 - Среда, 25.11.2015, 16:38