Страницы: 1
RSS
Обнуление данных при смене текущей даты
 
Всем доброго дня.
Возникла проблема - может кто-нибудь сможет помочь...

Надо : при изменении текущей даты в ячейке M1 очистить значения дат меньших чем сегодня() в столбце  "Дата - Факт оплаты Расход / Затраты" (K)

Спасибо откликнувшимся!
 
Здравствуйте.
Попробуйте как-то так:
Код
Sub DelDayPassed()
    Dim oCell As Range
    For Each oCell In Range("K4:K" & Range("K3").End(xlDown).Row)
        If oCell < Range("M1") Then
            oCell.ClearContents
        End If
    Next
End Sub
Изменено: Пытливый - 09.05.2023 09:38:30
Кому решение нужно - тот пример и рисует.
 
Круто!!! Спасибо! Протестировала!
За 9/5 все правильно делает.
А вот ставлю даты 10/5-11/5 очищает не все необходимые ячейки...
Если ставишь любую дату - первый раз макрос работает корректно. Второй и последующие разы - очищает не все необходимые ячейки...
Изменено: Dagmar - 09.05.2023 11:00:28
 
Точно. Там по другому столбцу лучше диапазон определять.
Код
Sub DelDayPassed()
    Dim oCell As Range, i&
    For Each oCell In Range("K4:K" & Range("G3").End(xlDown).Row)
        If oCell < Range("M1") Then
            oCell.ClearContents
        End If
    Next
End Sub
Кому решение нужно - тот пример и рисует.
 
Пытливый, Работает  8-0 .!!!
Но не могу догнать логику почему нужен столбец G? Поясните, пожалуйста... :oops:  
 
В макросе для определения нижней ячейки диапазона, по которому бегаем и проверяем данные на соответствие заданной дате находим через метод End с параметром - двигай вниз! (xlDown). Если все ячейки заполнены, то он двинет вниз и правильно найдет ячейку, после которой начинаются пустые значения. Но если мы из этого столбца удалим данные, то он при следующем прогоне остановится на первой пустой ячейке и дальше вниз не пойдет. Поэтому для определения последней заполненной строки надо использовать тот столбец, данные из которого не удаляются при работе макроса. В примере таким столбцом мне показался столбец G.
Изменено: Пытливый - 09.05.2023 23:49:27
Кому решение нужно - тот пример и рисует.
 
Пытливый, СПАСИБО, поняла.
Я правильно понимаю что автоматически при смене даты макрос НЕ сработает и надо запускать его "насильно"?
 
Да, этот надо запускать "насильно".
Если нужна автоматизация, можно его перенести в модуль листа и повесить на событие активации листа, например.
Кому решение нужно - тот пример и рисует.
 
Пытливый, Если это займет у вас не много времени - допишите, пожалуйста "(можно его перенести в модуль листа и повесить на событие активации листа)"
Лист называется "Общая"

СПАСИБО, очень выручили!!!
Изменено: Dagmar - 10.05.2023 09:49:39
 
Я правильно делаю ? модуль листа : Стоя на листе - insert - module
Изменено: Dagmar - 10.05.2023 10:09:02
 
Немножко не так. Посмотрите в файле: 1. Вставлен стандартный модуль. Там код макроса. 2. Два раза клик в редакторе VBA на лист ОБЩИЙ (слева вверху) - откроется модуль листа - там в этом модуле на событие Worksheet_Activate прописана инструкция вызова того макроса по удалению дат, которые меньше заданной в М1.
Изменено: Пытливый - 10.05.2023 16:12:06
Кому решение нужно - тот пример и рисует.
 
Пытливый, обязательно гляну и отпишусь, только завтра с утра. СПАСИБО
 
Пытливый, Открыла файл, прощелкала несколько ячеек - ничего не происходит.
Перешла на соседний лист и вернулась назад на "Общая"  - тогда сработал макрос )))
Может на событие открытие файла повесить макрос ? ) - иначе это срабатывает по "нажатию кнопки"
Изменено: Dagmar - 11.05.2023 09:35:10
 
Цитата
Dagmar написал:
Пытливый , Если это займет у вас не много времени - допишите, пожалуйста "(можно его перенести в модуль листа и повесить на событие активации листа)"
Это ж не я писал, правда? :)
Можно и на открытие.
Кому решение нужно - тот пример и рисует.
 
Пытливый, СПАСИБО за терпение )))) и помощь!!!
 
Пытливый,  Подключила макрос на оригинальный файл. Очистить дат надо было строк 5. А потом завешивает компьютер, пока остальные 800 проверяет.

Что-нибудь посоветуете ?
 
Добрый день всем. Подключила макрос, открывала 10 минут, но тут все значения константы.
А в оригинальном файле формулы, связи с другими файлами - не дождалась открытия и сняла через диспетчер задач.
Решить эту проблему как-то можно ?
Спасибо всем откликнувшимся!
 
Прикрепила файл первоначальный. Помогите, пожалуйста
 
Актуально, может есть кто может помочь ?
 
Цитата
написал:
Актуально, может есть кто может помочь ?
Попробуйте открыть так. И отключить макрос. Или намного уменьшить диапазон поиска дат.
 
PITBY , Спасибо - гляну, интересный вариант.
Супер, буду знать как воевать с не работающими макросами.
Но мне надо проверять порядка 700-800 ячеек (((
Изменено: Dagmar - 29.05.2023 17:11:49
 
Попробуйте так
Код
Sub DelDayPassed()
    Dim arr, n, d As Date
    d = Range("M1")
    arr = Range("K4:K" & Cells(Rows.Count, 10).End(xlUp).Row)
    For n = 1 To UBound(arr)
        If arr(n, 1) < d Then arr(n, 1) = ""
    Next
    Range("K4:K" & Cells(Rows.Count, 10).End(xlUp).Row) = arr
End Sub

Повесил на событие изменения ячейки M1 (при смене даты в М1 будет происходить пересчет)
 
Msi2102, Спасибо! Завтра на работе обязательно гляну - отпишусь!!!
Изменено: Dagmar - 29.05.2023 19:49:00
 
Msi2102, , Сработало.  :)  буду тестировать дальше. Спасибо за помощь!
Изменено: Dagmar - 30.05.2023 09:11:54
Страницы: 1
Наверх