Значение имеет тип Object
.
Это связано с тем, что значение указателя даты может быть либо действительной датой, либо пустым. Итак, вам нужно:
If IsDate(dtpicker1._Value) Then
sdate = CDate(dtpicker1._Value).AddDays(-1).ToShortDateString()
End If
Если значение пустое, оно фактически имеет тип System.DBNull
, что означает, что для преобразования в строку можно определить две функции с одинаковыми именами, но с разными типами параметров:
Public Function DateToString(ByVal _date As Date) As String
Return _date.ToShortDateString()
End Function
Public Function DateToString(ByVal _date As DBNull) As String
Return "No date selected!"
End Function
Затем вы можете изменить свой предыдущий код так:
Dim theDate As Object
theDate = dtpicker1._Value
If IsDate(theDate) Then
theDate = CDate(theDate).AddDays(-1)
End If
sdate = DateToString(theDate)