【问题标题】:Runtime 13 error due to incorrect time entry format由于时间输入格式不正确,运行时 13 错误
【发布时间】:2020-01-17 03:02:37
【问题描述】:

我有使用特定时间格式将时间输入值移动到字段的代码。但是,在输入时间时,如果输入的格式不正确,用户会收到 Runtime 13 错误,然后只能关闭用户窗体,停止代码运行,然后重试。我可以格式化一条消息以返回一个错误,告诉用户更正输入但我使用什么代码将用户放回该字段并允许他们进行更正?我将这个用户表单文本框的代码放在这里以供参考:

Private Sub txtDepartTime_AfterUpdate()
'When time is entered, time transfers immediately to spreadsheet datafield.

Dim TargetRow As Integer
TargetRow = Sheets("Codes").Range("D43").Value + 1

With Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 25)
 .Value = TimeValue(txtDepartTime)
 .NumberFormat = "hh:mm" 'departure time

 End With

End Sub

【问题讨论】:

    标签: excel vba runtime-error


    【解决方案1】:

    首先测试 txtDepartTime 是否可以转换为时间。如果不能,则通知用户并退出执行,以便他们重新输入时间。

    Private Sub txtDepartTime_AfterUpdate()
    'When time is entered, time transfers immediately to spreadsheet datafield.
    
    Dim TargetRow As Integer, TestTime As Date
    
    On Error Resume Next
    TestTime = TimeValue(txtDepartTime)
    On Error GoTo 0
    
    If TestTime = 0 Then
        MsgBox "Time entered is not valid. Please try again.", vbExclamation
        Exit Sub
    End If
    
    TargetRow = Sheets("Codes").Range("D43").Value + 1
    
    With Sheets("Travel Expense Voucher").Range("Data_Start").Offset(TargetRow, 25)
        .Value = TimeValue(txtDepartTime)
        .NumberFormat = "hh:mm" 'departure time
    End With
    
    End Sub
    

    (此解决方案假设没有人会故意输入 12am 或 00:00 作为时间)

    【讨论】:

    • 旁注:Long should be used instead of Integer 以避免潜在的溢出错误。这里没有任何好处,只有使用Integer 的潜在问题。值得指出。
    • 谢谢你,Michael 和 Big Ben,我不再收到错误消息,但我也没有收到消息框,也没有无效时间需要我进行更改?
    • 抱歉,我创建的测试不正确。我已将其更新为使用 TimeValue 而不是 DateValue。你能再试一次吗?
    • 完美! :) 非常感谢,迈克尔。每次收到您的回复,我都觉得我学到了一些新东西!
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多