Приведенный ниже код вызывает функцию, которая будет возвращать значение «Не верно», если значение, полученное из шаблона отправки, не является датой, и это приводит к тому, что строка не обрабатывается.Я построил его для выполнения в цикле, но вы, вероятно, сможете адаптировать методы для немного разных приложений.
Private Sub CheckDate()
Dim Dstart As Variant ' invoice start date
Dim Dend As Variant
If GetDate(17, 6, Dstart) Then
If GetDate(17, 7, Dend) Then
With Worksheets("Despatch Template").PivotTables("PivotTable1")
.PivotCache.Refresh
' does this field name really have a blank at its end?
With .PivotFields("DESPATCH Date ")
.ClearAllFilters ""
.PivotFilters.Add2 Type:=xlDateBetween, _
Value1:=Dstart, _
Value2:=Dend
End With
End With
End If
End If
End Sub
Private Function GetDate(R As Long, _
Clm As Long, _
Dat As Variant) As Boolean
Dat = Worksheets("Despatch Template").Cells(R, Clm).Value
If IsDate(Dat) Then
Dat = CLng(Dat)
GetDate = True
End If
End Function
Приведенный выше код не проверен.Изменить 31/01/2019 ================= Приведенный ниже код будет определять ячейки, которые не содержат дату.Вместо отображения окна сообщения вы можете предпринять действия по исправлению.
Private Sub CorrectDates()
Const Clm As Long = 3 ' your dates column (3 = C)
Const FirstDataRow As Long = 2 ' presuming row 1 to hold captions
Dim Ws As Worksheet
Dim Dat As Variant
Dim Rl As Long ' last used row in column Clm
Dim R As Long
Set Ws = ActiveSheet ' change as appropriate
With Ws
Rl = .Cells(.Rows.Count, Clm).End(xlUp).Row
For R = FirstDataRow To Rl
If Not GetDate(.Cells(R, Clm), Dat) Then
MsgBox "Cell " & .Cells(R, Clm).Address & " is not a date." & vbCr & Dat
End If
Next R
End With
End Sub
Private Function GetDate(Cell As Range, _
Dat As Variant) As Boolean
Dat = Cell.Value
If IsDate(Dat) Then
Dat = CLng(Dat)
GetDate = True
End If
End Function