Excel VBA:发生错误后突出显示文本框值

时间:2014-06-04 07:13:38

标签: validation date excel-vba textbox highlight

我正在尝试突出TextBox中输入的值。 TextBox值表示日期格式DD-MM-YYYY中的日期值。我写了一些代码来验证插入的日期是否正常(在4月的例子31中)。

Hightlight本身不是问题,但我想在发生错误后立即执行此操作。因此,当我插入31-04-2014时,我应该收到消息“您插入了错误的日期”,并且日期值应该高亮显示。现在它向我显示消息,高亮值和焦点设置为另一个CommandButton

到目前为止,我做了类似的事情:

Private Sub data_faktury_AfterUpdate()

Dim dzien As Byte, miesiac As Byte
Dim rok As Integer

On Error GoTo blad:

dzien = Mid(data_faktury.Value, 1, 2)
miesiac = Mid(data_faktury.Value, 4, 2)
rok = Right(data_faktury.Value, 4)



Call spr_date(dzien, miesiac, rok)


Exit Sub

blad:
If Err.Number = 13 Then
    If data_faktury <> "" Then
        If Len(data_faktury) < 10 Then: MsgBox ("Źle wpisana data faktury.")
    End If
End If

End Sub

第二个程序的代码:

Sub zle()

MsgBox ("Wybrałeś zły dzień")

With Faktura.data_faktury
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Text)
End With

End Sub

1 个答案:

答案 0 :(得分:2)

评论有点长,所以这里有。基本原则是使用退出事件并在必要时取消。要防止在关闭表单时触发此操作,您需要使用标志变量 - 示例userform代码:

Private bSkipEvents As Boolean
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If bSkipEvents Then Exit Sub

    With TextBox1
        If Not IsValidDate(.Text) Then
            Cancel = True
            MsgBox "Invalid date"
            .SelStart = 0
            .SelLength = Len(.Text)
        End If
    End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    bSkipEvents = True
End Sub