Excel VBA Userform IIf (IsDate) не сохраняет пробел
Утром все, у меня есть рабочая книга с несколькими UserForms, на которых допускается запись нескольких типов данных, включая текст, число и множество полей даты. Кажется, что все работает хорошо, за исключением случаев, когда пользователь хочет удалить дату, используя соответствующую пользовательскую форму, она не перезаписывает значение на листе. Ниже приведен код, который я использую, чтобы проверить, является ли значение в пользовательской форме датой, а затем заполняет рабочий лист, но ничего не делает. Любая помощь оценивается.
ws.Cells(lastRow, txtCollectionDate.Tag).Value = IIf(IsDate(txtCollectionDate), CDate(txtCollectionDate), "")
Обновление: txtCollectionDate является текстовым полем, это значение первоначально было 09/01/2016, но пользователь хочет удалить его, поскольку он был введен с ошибкой. Пользователь должен иметь возможность выделить значение, нажать «Удалить» (клавиатура), а затем сохранить.
- Выход VBA в отношении кнопок выбора
- Отключить / включить вкладку в Multitab на основе значения флажка-EXCEL
- EXCEL VBA: код пользовательской формы, улучшение повторяющихся кодов
- Добавление серийной коллекции в диаграмму с помощью UserForm (combobox)
- VBA не правильно вытягивает формат
- Выбрать переменный объект с помощью счетчика
- Добавление изображения в рабочий лист из пользовательской формы (excel vba)
- Excel VBA UserForm - если не IsEmpty Then
- Кнопка VBA Options, как подключиться к модулю?
- Вызов пользовательской формы в Excel VBA и продолжение в зависимости от того, какая кнопка была нажата
- Измените пользовательскую форму для работы с несколькими листами
- Может ли формула ячейки Excel ссылаться на элемент управления UserForm?
- Использование Combobox для выбора и кнопки выбора в excel userform
Кажется, что с IIf
тогда часть будет обработана, даже если часть критерия неверна. Это приводит к ошибке несоответствия типа 13 с CDate("")
.
Итак, вы должны сделать:
If IsDate(txtCollectionDate) Then ws.Cells(lastRow, txtCollectionDate.Tag).Value = CDate(txtCollectionDate) Else ws.Cells(lastRow, txtCollectionDate.Tag).Value = "" End If
Редактировать:
Удалить «Кажется». Это поведение документировано: https://msdn.microsoft.com/en-us/library/office/gg264412.aspx