【问题标题】:Runtime Error 13 when TextBox containing a Date is empty包含日期的文本框为空时出现运行时错误 13
【发布时间】:2020-06-19 00:42:19
【问题描述】:

尽管检查了许多与错误 13 相关的问题,但我找不到问题的答案,所以我在这里试一试:

我正在构建我的代码以保存来自用户表单的信息,但首先我正在测试强制文本框是否为空。因为我使用的是 64 位机器,所以我使用了 Trevor Eyre 的 CalendarForm。

但是,在测试代码时,我遇到了从 CalendarForms 接收日期的空文本框的问题:

在这一行:

Dim dteCompraDataOps As Date: dteCompraDataOps = Me.txtTesouro_Compra_DataOps.value

这部分高亮显示并返回运行时错误 13:

dteCompraDataOps = Me.txtTesouro_Compra_DataOps.value 

当我检查来自空文本框的值时,我得到:

dteCompraDataOps = "00:00:00"` 

这是正确的,因为它应该被视为日期,但是:

Me.txtTesouro_Compra_DataOps.value = ""

以字符串的形式出现。

我做了一些搜索,发现当它们来自的文本框为空时,日期数据类型很棘手。

我可以找到一个解决方案:在声明变量之前创建一个 Select Case 来测试必填字段,但我想学习如何处理应该为空的空文本框。

你有没有机会解开我的难题?

提前致谢。 Cub4_RJ

【问题讨论】:

    标签: excel vba string date


    【解决方案1】:

    有两种方法可以解决这个问题。

    a) 检查空值:

    With Me.txtTesouro_Compra_DataOps
        If Not IsNull(.Value) Then
            If IsDate(.Value) Then dteCompraDataOps = . Value
        End if
    End With
    

    b) 引入一个Variant 类型的新变量,它接受所有内容(包括空值)并检查它的值。

    Dim rawData As variant
    rawData = Me.txtTesouro_Compra_DataOps.Value
    
    If Not IsNull(rawData) Then
        If IsDate(rawData) Then dteCompraDataOps = rawData
    End If
    


    方法 A 的问题在于,值 123 被视为日期,但选项 B 会捕获它。

    【讨论】:

    • 感谢您的回复科斯塔斯。这两种情况都必须在定义变量之前运行,对吗?出现此问题的原因是因为仅当变量位于 SELECT CASE 或 IF 之前才会出现此错误,这将捕获最终的空白文本框。每当我在定义变量之后放置“空白捕手”时,我都会收到错误 13 - 因此我的问题是我是否可以以另一种方式定义日期,以便 VBA 在运行代码之前不会尝试调试它。
    • Kostas,我刚刚修改了您的选项 2 并应用于我的代码。它确实按我的预期工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2018-12-12
    • 1970-01-01
    • 2014-11-04
    • 2020-06-08
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多