VBA, чтобы найти первое вхождение сегодняшней даты и вставить строку выше

#vba #insert #find

Вопрос:

У меня есть следующий код, чтобы вставить строку выше первого вхождения слова, запланированного в столбце D, а затем найти первое вхождение слова Заблокировано и вставить строку выше этого, но когда я пытаюсь найти первое вхождение сегодняшней даты в столбце C и вставить строку выше, это не работает. Любая помощь будет очень признательна. Я планирую продолжить код с поиском завтрашней даты и вставкой строки выше и т. Д

 Dim cl As Range

Set cl = Range("D:D").Find("Scheduled")
If Not cl Is Nothing Then cl.Select
    ActiveCell.Offset(0).EntireRow.Insert
    ActiveCell.Offset(0, -3).FormulaR1C1 = "SCHEDULED"

Set cl = Range("D:D").Find("Roadblock")
If Not cl Is Nothing Then cl.Select
    ActiveCell.Offset(0).EntireRow.Insert
    ActiveCell.Offset(0, -3).FormulaR1C1 = "ROADBLOCKED"

Set cl = Range("C:C").Find([Today()])
If Not cl Is Nothing Then cl.Select
    ActiveCell.Offset(0).EntireRow.Insert
    ActiveCell.Offset(0, -2).FormulaR1C1 = "DUE TODAY"
 

Комментарии:

1. Возможно, это не связано, но, судя по вашему отступу, вы ожидаете, что эти строки с отступом будут частью вашего If заявления, а это не так. Они будут работать каждый раз, независимо cl от того, ничего это или нет.

2. @Брэкс. Ты прав, я только что это обнаружил. Он отлично работает, если он находит «Запланированное», но если он его не находит, он просто вставляет строку в последнюю выбранную ячейку. Я попробовал команду Else, чтобы перейти к следующему разделу, если «по расписанию» не найдено, но получил ошибку. Мне придется сделать кое-какую домашнюю работу, чтобы разобраться в этом; или начать другой пост. Спасибо

Ответ №1:

Замените строку

 Set cl = Range("C:C").Find([Today()])
 

с

 Set cl = Range("C:C").Find(Date)
 

Надеюсь, этого будет достаточно. Если нет, убедитесь, что форматы ваших дат совпадают. Попробуйте a Debug.Print Date() , чтобы узнать, соответствует ли VBA формату даты в ваших ячейках.