Здравствуйте, есть таблица с ведением клиентской базы, руководитель пожелал видеть работу за неделю. Сейчас в таблице есть столбец с датой, но он заполняется только при внесении новой строки (новый клиент от такой то даты). Можно ли как-то сделать обновление даты при любых изменениях в строке? тогда мы бы могли фильтром выбрать даты прошедшей недели и увидеть все что произошло за неделю. Тоже конечно не очень удобно, постоянно в фильтре искать нужные даты, но хоть так. Если есть другие решения буду рад услышать.
Здравствуйте, есть таблица с ведением клиентской базы, руководитель пожелал видеть работу за неделю. Сейчас в таблице есть столбец с датой, но он заполняется только при внесении новой строки (новый клиент от такой то даты). Можно ли как-то сделать обновление даты при любых изменениях в строке? тогда мы бы могли фильтром выбрать даты прошедшей недели и увидеть все что произошло за неделю. Тоже конечно не очень удобно, постоянно в фильтре искать нужные даты, но хоть так. Если есть другие решения буду рад услышать.skawn
Можно сделать сводную с фильтром "Прошлая неделя" и такой примерно код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim d_ As Range, c_ As Range Application.ScreenUpdating = 0 r1_ = Range("B" & Rows.Count).End(xlUp).Row c1_ = 9 'столбец с датами обновления Set d_ = Intersect(Target, Range("B2").Resize(r1_ - 1, c1_ - 2)) If d_ Is Nothing Then Exit Sub For Each c_ In d_ ri_ = c_.Row If CDate(Cells(ri_, c1_)) <> Date Then Cells(ri_, c1_) = Date End If Next c_ Me.PivotTables("СводнаяТаблица1").PivotCache.Refresh Application.ScreenUpdating = 1 End Sub
[/vba]
Можно сделать сводную с фильтром "Прошлая неделя" и такой примерно код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim d_ As Range, c_ As Range Application.ScreenUpdating = 0 r1_ = Range("B" & Rows.Count).End(xlUp).Row c1_ = 9 'столбец с датами обновления Set d_ = Intersect(Target, Range("B2").Resize(r1_ - 1, c1_ - 2)) If d_ Is Nothing Then Exit Sub For Each c_ In d_ ri_ = c_.Row If CDate(Cells(ri_, c1_)) <> Date Then Cells(ri_, c1_) = Date End If Next c_ Me.PivotTables("СводнаяТаблица1").PivotCache.Refresh Application.ScreenUpdating = 1 End Sub
Ексель мой ругается на файл вот это пишет и выводит цифры разбросанные по табличке.
Была выполнена проверка на уровне файла с последующим восстановлением файла. Некоторые фрагменты документа могли быть восстановлены либо удалены. Удаленный компонент: часть /xl/sharedStrings.xml с ошибкой XML. (Строки) Непредусмотренный конец входных данных. Строка 3, столбец 353. Удаленный компонент: Параметры печати. Удаленный компонент: Компонент /xl/pivotTables/pivotTable1.xml. (Представление сводной таблицы) Удаленные записи: Именованный диапазон из части /xl/workbook.xml (Книга) Удаленные записи: Сведения о ячейках из части /xl/worksheets/sheet1.xml Восстановленные записи: Сведения о ячейках из части /xl/worksheets/sheet1.xml
Ексель мой ругается на файл вот это пишет и выводит цифры разбросанные по табличке.
Была выполнена проверка на уровне файла с последующим восстановлением файла. Некоторые фрагменты документа могли быть восстановлены либо удалены. Удаленный компонент: часть /xl/sharedStrings.xml с ошибкой XML. (Строки) Непредусмотренный конец входных данных. Строка 3, столбец 353. Удаленный компонент: Параметры печати. Удаленный компонент: Компонент /xl/pivotTables/pivotTable1.xml. (Представление сводной таблицы) Удаленные записи: Именованный диапазон из части /xl/workbook.xml (Книга) Удаленные записи: Сведения о ячейках из части /xl/worksheets/sheet1.xml Восстановленные записи: Сведения о ячейках из части /xl/worksheets/sheet1.xml
Пишет "невозможно прочитать файл", потом предлагает восстановить данные, все восстановил, но сводная вообще не подгрузилась видимо. Но теперь я хоть вижу мою табличку слева и сводную справа, но тут дело не только в суммах по договорам, начальство интересует вообще любые изменения, чем занимались мы на неделе, поэтому если изменился статус это тоже нужно как-то видеть, если комментарий изменился тоже видимо надо. Было бы шикарно если будет "было" и "стало", например, был статус "на расчете", 08.11.2016 изменили на "на согласовании". Ну или мой первый вариант, просто при любом изменении в строке ставить текущую дату в ячейку в этой же строке, потом фильтром будем прошедшую неделю выбирать.
Пишет "невозможно прочитать файл", потом предлагает восстановить данные, все восстановил, но сводная вообще не подгрузилась видимо. Но теперь я хоть вижу мою табличку слева и сводную справа, но тут дело не только в суммах по договорам, начальство интересует вообще любые изменения, чем занимались мы на неделе, поэтому если изменился статус это тоже нужно как-то видеть, если комментарий изменился тоже видимо надо. Было бы шикарно если будет "было" и "стало", например, был статус "на расчете", 08.11.2016 изменили на "на согласовании". Ну или мой первый вариант, просто при любом изменении в строке ставить текущую дату в ячейку в этой же строке, потом фильтром будем прошедшую неделю выбирать.skawn
[/vba] Держите файл без сводной. Если опять ругаться будет, то просто топните правой мышой на ярлычок листа, выберите "Исходный код" и в появившемся окне вставьте мой код, который я привел выше. Без 3-й снизу строки.
Для простановки дат используйте макрос в модуле листа. Его я Вам уже дал, только сотрите там строчку про сводную таблицу. [vba]
[/vba] Держите файл без сводной. Если опять ругаться будет, то просто топните правой мышой на ярлычок листа, выберите "Исходный код" и в появившемся окне вставьте мой код, который я привел выше. Без 3-й снизу строки._Boroda_
Извиняюсь, еще пара вопросов возникла, как-то можно сделать, чтобы код применялся ко всем листам файла? у нас на каждый месяц новый лист создается с клиентской базой, чтобы не копировать каждый раз. А второй вопрос, возможно ли как то вести лог изменений? например, на отдельном листе дата - клиент - что добавилось\изменилось, можно просто фразу или цифру, я думаю понятно будет к какому столбцу это относится. Понимаю конечно, что для этого существуют црм системы, но у нас и времени нет изучать и выбирать и сильно специфичная услуга, ну и платить конечно никто не хочет...
Извиняюсь, еще пара вопросов возникла, как-то можно сделать, чтобы код применялся ко всем листам файла? у нас на каждый месяц новый лист создается с клиентской базой, чтобы не копировать каждый раз. А второй вопрос, возможно ли как то вести лог изменений? например, на отдельном листе дата - клиент - что добавилось\изменилось, можно просто фразу или цифру, я думаю понятно будет к какому столбцу это относится. Понимаю конечно, что для этого существуют црм системы, но у нас и времени нет изучать и выбирать и сильно специфичная услуга, ну и платить конечно никто не хочет...skawn
Ну, первый вопрос из вновь возникших ещё можно отнести с натяжкой к данной теме, а вот для второго (лог изменений) создайте новую. А перед этим поищите по форуму, обсуждалось не раз
Ну, первый вопрос из вновь возникших ещё можно отнести с натяжкой к данной теме, а вот для второго (лог изменений) создайте новую. А перед этим поищите по форуму, обсуждалось не разPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
можно сделать, чтобы код применялся ко всем листам файла?
1. Если Вы размножаете листы копированием листа "Ноябрь", то код в модуле листа у Вас тоже копируется вместе с листом. 2. Можно не писать код в модуле каждого листа, а один раз написать в модуле книги. Но, на мой взгляд, первый способ лучше [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim d_ As Range, c_ As Range Application.ScreenUpdating = 0 With Sh r1_ = .Range("B" & Rows.Count).End(xlUp).Row c1_ = 9 'ñòîëáåö ñ äàòàìè îáíîâëåíèÿ Set d_ = Intersect(Target, .Range("B2").Resize(r1_ - 1, c1_ - 2)) If d_ Is Nothing Then Exit Sub For Each c_ In d_ ri_ = c_.Row If CDate(.Cells(ri_, c1_)) <> Date Then .Cells(ri_, c1_) = Date End If Next c_ End With Application.ScreenUpdating = 1 End Sub
можно сделать, чтобы код применялся ко всем листам файла?
1. Если Вы размножаете листы копированием листа "Ноябрь", то код в модуле листа у Вас тоже копируется вместе с листом. 2. Можно не писать код в модуле каждого листа, а один раз написать в модуле книги. Но, на мой взгляд, первый способ лучше [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim d_ As Range, c_ As Range Application.ScreenUpdating = 0 With Sh r1_ = .Range("B" & Rows.Count).End(xlUp).Row c1_ = 9 'ñòîëáåö ñ äàòàìè îáíîâëåíèÿ Set d_ = Intersect(Target, .Range("B2").Resize(r1_ - 1, c1_ - 2)) If d_ Is Nothing Then Exit Sub For Each c_ In d_ ri_ = c_.Row If CDate(.Cells(ri_, c1_)) <> Date Then .Cells(ri_, c1_) = Date End If Next c_ End With Application.ScreenUpdating = 1 End Sub
Pelena, хорошо, поищу. _Boroda_, спасибо, другие листы на пол года вперед созданы уже, в них то я бы мог и просто накопировать код, а вот если через пол года я уже не буду работать тут, как будут продлевать код не знаю) поэтому было бы круче конечно на всю книгу сразу.
Pelena, хорошо, поищу. _Boroda_, спасибо, другие листы на пол года вперед созданы уже, в них то я бы мог и просто накопировать код, а вот если через пол года я уже не буду работать тут, как будут продлевать код не знаю) поэтому было бы круче конечно на всю книгу сразу.skawn