Вы ищете значение ячейки, относящейся к дате начала и окончания, а не сам диапазон. возьмите Dim StartDate As Range
и Dim EndDate As Range
и сделайте их Dim StartDate As Date
и Dim EndDate As Date
.
После этого изменения Set StartDate = ThisWorkbook.Worksheets("Enter Info").Range("C2")
до StartDate = ThisWorkbook.Worksheets("Enter Info").cells(2, "C").value
А Set EndDate = ThisWorkbook.Worksheets("Enter Info").Range("E2")
до EndDate = ThisWorkbook.Worksheets("Enter Info").cells(2, "E").value
Это даст вам значение ячейки вместо ее диапазона.
lngLastRow = .Range("G" & .Rows.Count).End(xlUp).Row
Должно быть lngLastRow = .Cells(.Rows.Count, "G").End(xlUp).row
Я не уверен, сколько строк вы пройдете, но на самом деле удаление может быть довольно медленным, если у вас много, так что это очистит строку и затем отсортирует.
Dim wksData As Worksheet
Dim lngLastRow As Long
Dim LastCol As Integer
Dim StartDate As Date
Dim EndDate As Date
Dim tDate As Date
Dim iter As Long
Set wksData = ThisWorkbook.Worksheets("Master Publisher Content")
StartDate = ThisWorkbook.Worksheets("Enter Info").Cells(2, "C").value
EndDate = ThisWorkbook.Worksheets("Enter Info").Cells(2, "E").value
With wksData
lngLastRow = .Cells(.Rows.Count, "G").End(xlUp).row
For iter = 2 To lngLastRow
if .Cells(iter, "G").value = "" or isnull(.Cells(iter, "G").value) then
.Rows(iter) = ""
else
tDate = .Cells(iter, "G").value
If tDate < StartDate Or tDate > EndDate Then
.Rows(iter) = ""
End If
end if
Next
LastCol = .Cells.Find(What:="*", after:=ActiveSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
.Range(Cells(1, 1), Cells(lngLastRow, LastCol)).Sort key1:=.Columns(1), Order1:=xlAscending, Header:=xlYes
End With