#excel #vba
#excel #vba
Вопрос:
Здравствуйте, я пишу простой код для сравнения дат в диапазоне: «начиная с ячейки «G9″ до конца столбца» сравните даты в этом диапазоне с сегодняшней датой и верните разницу в днях, которая будет помещена в соответствующую ячейку в столбце «P»
Проблема в том, что мне нужно пропускать пробелы во время цикла, поэтому, если ячейка пуста, vba пропустит и перейдет к следующей ячейке
Sub overduedate()
Dim LastRow As Long, i As Long
With Worksheets("sheet1")
LastRow = .Cells(.Rows.Count, "G").End(xlUp).Row
For i = 9 To LastRow
.Range("P" amp; i).Value = DateDiff("d", .Range("G" amp; i).Value, Date)
Next i
End With
End Sub
Комментарии:
1.
Dim cell as range
Затем в цикле просто добавьте условиеIf cell.value <> vbNullString Then 'run code after this event
2. Куда я должен поместить «End If»?
3. Я сделал это, добавив: If Range («G» amp; i) <> «» Затем . Диапазон («P» и i). Значение = DateDiff(«d», .Range («G» amp; i). Значение, дата)
Ответ №1:
Вот так:
Sub overduedate()
Dim LastRow As Long, i As Long
Dim cell as range
With Worksheets("sheet1")
LastRow = .Cells(.Rows.Count, "G").End(xlUp).Row
For i = 9 To LastRow
If cell.value <> vbNullString then
.Range("P" amp; i).Value = DateDiff("d", .Range("G" amp; i).Value, Date)
End If
Next i
End With
End Sub
Или вы можете использовать If
инструкцию без End If
, как показано ниже:
Sub overduedate()
Dim LastRow As Long, i As Long
Dim cell as range
With Worksheets("sheet1")
LastRow = .Cells(.Rows.Count, "G").End(xlUp).Row
For i = 9 To LastRow
If cell.Value <> vbNullString then .Range("P" amp; i).Value = DateDiff("d", .Range("G" amp; i).Value, Date)
Next i
End With
End Sub
Комментарии:
1. оба способа выделяют эту строку «Если ячейка. Значение <> vbNullString Then» и выдает ошибку «Требуется объект»
2. вам нужно добавить
Dim cell As Range