Пропускать пробелы при запуске «For loop»

#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