Generally, I let users enter Dates in any format they want, as long as IsDate recognizes it. All Dates in UserForm Controls and TextFrames are really just Strings of text anyway. I only convert the date Text to a Date Type as Code or Record keeping require. I only reformat Dates when Business Rules require. Ex: A DB Field requires Dates to be 6 characters.
I notice that you're using three 'TextBoxes' to handle the Dates; One for Date Entry, One for Date Storage, and one for Format Warning.
I suggest just the TextBox1 for both entry and display, a Variable to hold the actual Date, and an InValidDate Warning object of your choice from whatever PP offers. In MS Forms, I use a Label Control as the warning because they take the least memory. The only thing my warning says is
Please enter a valid Date in the format of 4 July, 76.
Click me to continue.
Note that I don't hold them to that format, they can use any format they choose, as long as IsDate recognizes it. My code for this looks something similar to
Dim ThatDate As Date
Private Sub txbxDate_Change()
If IsDate(txbxDate Then
ThatDate = CDate(txbxDate)
If ThatDate is in the Valid Range then
Exit Sub
Else
ThatDate = Null
.txbxDate = ""
ShowDateWarning
End If
Else
.txbxDate = ""
ShowDateWarning
End If
Private Sub ShowDateWarning()
With lblDateWarning
'Position over txbxDate
.top = 123
.Left = 456
'lblDateWarning is not visible at run time.
.Visible = True
End With
End Sub
Private Sub lblDateWarning_click()
lblDateWarning.Visible = False
txbxDate.SetFocus
End Sub
Private Sub UpdateDBField()
Access.SomeDB.SomeDate = Format(ThatDate, "ddmmyy")
End Sub
Please note that the above is NOT real code.