Eu também às vezes já me deparei com erros em datas com o MaskEditBox.
Ultimamente eu resolvi salvar nas tabelas o campo como texto e não como data.
Ao invés de utilizar o MaskEditBox eu uso o TextBox, mesmo.
Acrescento algumas linhas de código no evento keypress do TextBox.
O efeito é quase o mesmo, você digita apenas os números e as barras são criadas automaticamente. É mais ou menos assim.
Private Sub TxtData_KeyPress(KeyAscii as Integer)
If Len(TxtData.Text) = TxtData.SelLength Then
If KeyAscii = vbKeyReturn Or KeyAscii = vbKeyEscape Then
Exit Sub
Else
Exit Sub
End If
End If
' se for teclado BackSpace no campo
Select Case KeyAscii
Case 8
If TxtData.Text = "" Then
Exit Sub
End If
TxtData.Text = Left(TxtData.Text, Len(TxtData.Text))
TxtData.SelStart = Len(TxtData.Text)
Case 48 To 57
If Len(TxtData.Text) = 2 Or Len(TxtData.Text) = 5 Then
TxtData.Text = TxtData.Text & "/"
SendKeys "{End}", True
End If
Case Else
KeyAscii = 0
End Select
KeyAscii = SoNumeros(KeyAscii)
End Sub
Function SoNumeros(Key As Integer) As String
Const Numeros$ = "0123456789"
SoNumeros = Key
If Key <> 8 Then ' conferindo se é backspace
'vê se é caracter permitido
If InStr(Numeros$, Chr(Key)) = 0 Then
SoNumeros = 0
End If
End If
End Function
Tenta e veja se dá certo com o que você precisa.
Eu acho melhor para manipular, já que se você salvar um campo em branco, sendo tipo texto, ela não vai retornar nenhum erro.
Espero ter ajudado.
Até mais