I have an idea that it's your textbox. If it isn't entered in exactly as excel will recognize it as a date, then you're scre***. I recommend using three combobox's, populating them at Initialize with their respective values. Then you Dim a variable as a Date type and use it something like this ..
myDate = DateSerial(ComboBox1.Value, Combobox2.value, Combobox3.value)
This assumes:
Combobox1 = Your year, 4 numeric digits only
Combobox2 = Your month, 1 or 2 numeric digits only
Combobox3 = Your day, 1 to 31 numeric only
If you want to use a string as month names in your combobox, you can do that as well. I'd take the ListIndex value (remembering it starts at 0 instead of 1) and use the MonthName() method.
I.e. ..
Dim myMonth as string
'...
myMonth = MonthName(Combobox2.listindex + 1, False)
Note: the True/False at the end is for abbreviation or not.
I find this to be a most effective way of getting the user to enter an excel-recognized date with the least amount of overhead. You can of course use DTpicker, although if this file is to be used anywhere else other than the one it's programmed on I recommend against it. It's just more pain than it's worth, IMHO.