2016-04-07 14 views
0

Sabah tüm, Bir çalışma kitabım var; bir dizi UserForms ile birden çok veri türünün girilmesine izin veren metin, sayısal değerler ve bir çok şey var. tarih alanları Her şey iyi çalışıyor, bir kullanıcı uygun bir kullanıcı formunu kullanarak bir tarihi silmek istiyorsa, çalışma sayfasındaki değerin üzerine yazmaz. Aşağıda, kullanıcı formundaki değerin bir tarih olup olmadığını kontrol etmek için kullanıyorum kod ve çalışma sayfasını doldurun, ancak hiçbir şey yapmıyor. Herhangi bir yardım takdir edildi.Excel VBA Userform IIf (IsDate) boş kaydedmiyor

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

Güncelleme: txtCollectionDate o değeri başlangıçta 2016/09/01 oldu, ama yanlışlıkla girildiği gibi kullanıcı, bunu silmek istiyor bir metin kutusu olduğunu. Kullanıcı değeri vurgulayabilmeli, silmeye (klavye) basmalı, ardından kaydetmelidir.

+0

Hiçbir şey yapmıyorsa ve Excel'de ve işletim sisteminizde kısa tarih için varsayılan tarih ayarlarınızdan bahsediyorsanız, lütfen 'txtCollectionDate' içeriğini gösterin. –

+0

Teşekkürler Axel, ana soruyu güncelledi. Excel/OS'deki varsayılan tarih ayarları dd/aa/yyyy (İngiltere stili) –

+0

'' çalışma sayfasındaki değerin üzerine yazmaz '- bu, _nothing_? ya da değeri boş ile değiştirir? –

cevap

1

IIf ile sanki, bölüm kısmı doğru olmasa bile parça işlenir. Bu, CDate("") ile 13 tür uyuşmazlığa neden olur.

Yani yapmanız gereken:

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

Düzenleme:

Sil "görünüyor". Bu davranış belgelenmiştir: https://msdn.microsoft.com/en-us/library/office/gg264412.aspx

+0

Teşekkürler Axel ile değiştirmek istedim, bu bir muamele çalışır. Bunu düşünmüştüm ama kodu olabildiğince 'temiz' olarak tutmaya çalışıyordum… bu yine de çalışıyor, teşekkürler. Şimdi diğer 8 tarihle aynı mantığı uygulamak :) –