2014-10-14 5 views
1

У меня возникла проблема с формой Excel, и я не понимаю. Форма имеет 2 поля даты Начало и конец даты и 1 CHeckbox, называемый Fixed Period.Excel - ошибка времени выполнения 13: несовпадение типа?

Цель состоит в том, чтобы установить флажок, чтобы период составлял 1 год, следовательно Дата окончания пересчитывается с помощью Начального значения в качестве базы. Код VBA ниже приводит к ошибке 13 Тип Несоответствие в инструкции If.

Я думал, что Даты должны быть преобразованы с помощью CDate или это проблема с nog? Любой указатель оценил

Private Sub BeginDatum_Change() 
Static OldValue As String 

With Me.BeginDatum 
    Debug.Print "Value: "; .Value; " Old Value: "; OldValue 
    If CDate(.Value) > CDate(EindDatum.Value) Or CDate(.Value) > Date Then 
     Debug.Print "EindDatum " & EindDatum.Value & " is NOT Good" 
      .Value = OldValue 
    Else 
     Sheets("Traject").Range("Begin") = .Value 
     OldValue = .Value 
     If (FixedPeriod) Then 
      EindDatum.Value = Format(DateAdd("yyyy", 1, Me.BeginDatum.Value), "dd/mm/yyyy") 
     End If 
    End If 
End With 
End Sub 
+0

что BeginDatum? так как ваш юзер «BeginDatum_Change», а позже вы пытаетесь получить «BeginDatum.Value». –

+0

Вы пытались удалить «CDate». Думаю, тебе следовало хотя бы попробовать? Но я предполагаю, что вместо использования события * Change * попробуйте * AfterUpdate *? – L42

+0

Извините ... BeginDatum и EindDatum являются полями формы ... и BeginDatum_Change - это процедура, которая срабатывает, когда происходит изменение. Уже пробовал без CDate. Я не вижу событие AfterUpdate ??? –

ответ

0

Один из этих концов итоге не дата или невозможно преобразовать в дату.

  1. CDate (.Value)
  2. CDate (EindDatum.Value)
  3. CDate (.Value)

Вы должны определить, является ли входные данные представляют собой действительную дату, прежде чем пытаться преобразовать.

If IsDate(.Value) then 
    'use the input 
End if 

Etc ...

IsDate