2016-04-07 2 views
0

Утро все, У меня есть рабочая книга с несколькими пользовательскими формами, на которых разрешено вхождение нескольких типов данных, включая текст, число и много поля даты. Кажется, что все работает хорошо, за исключением случаев, когда пользователь хочет удалить дату, используя соответствующую пользовательскую форму, она не перезаписывает значение на листе. Ниже приведен код, который я использую, чтобы проверить, является ли значение в пользовательской форме датой, а затем заполняет рабочий лист, но ничего не делает. Любая помощь оценивается.Excel VBA Userform IIf (IsDate) не сохраняет пробел

ws.Cells(lastRow, txtCollectionDate.Tag).Value = IIf(IsDate(txtCollectionDate), CDate(txtCollectionDate), "") 

Update: txtCollectionDate это текстовое поле, это значение изначально было 09/01/2016, но пользователь хочет удалить это, как оно было введено в заблуждении. Пользователь должен иметь возможность выделить значение, нажать «Удалить» (клавиатура), а затем сохранить.

+0

Просьба отображать содержимое 'txtCollectionDate', если он ничего не делает, и указать, какие у вас настройки даты по умолчанию для короткой даты в Excel и в вашей операционной системе. –

+0

Спасибо Axel, обновил главный вопрос. Настройки даты по умолчанию в Excel/OS равны dd/mm/yyyy (стиль в Великобритании) –

+0

'он не перезаписывает значение на листе' - означает ли это, что это делает _nothing_? или что он заменяет значение пустым? –

ответ

1

Кажется, что с IIf тогда часть будет обработана, даже если часть критерия неверна. Это приводит к ошибке несоответствия типа 13 с CDate("").

Так что вы должны сделать:

If IsDate(txtCollectionDate) Then 
ws.Cells(lastRow, txtCollectionDate.Tag).Value = CDate(txtCollectionDate) 
Else 
ws.Cells(lastRow, txtCollectionDate.Tag).Value = "" 
End If 

Edit:

Удалить "Кажется". Это поведение задокументировано: https://msdn.microsoft.com/en-us/library/office/gg264412.aspx

+0

Спасибо Axel, это работает. Я подумал об этом, но пытался сохранить код как можно «чистым» ... это работает, так что спасибо. Теперь применить ту же логику к другим 8 датам :) –

Смежные вопросы