【问题标题】:VBA Date + TimeValue returns no timeVBA Date + TimeValue 不返回时间
【发布时间】:2020-07-21 19:13:43
【问题描述】:

我有一个日期和时间,我将表单中的字符串组合成日期+时间

date_string = "2020-12-30" 'yyyy-mm-dd    
date_code = CDate(date_string)

time_string = "00:00:00" 'hh:mm:ss
time_code = TimeValue(time_string)

date_time = date_code + time_code

通常返回看起来像05.01.2019 11:00:00,这是我所期望的。

如果我使用IsDate(date_time) 进行测试,返回的值也会全部检查为 TRUE

然而,只要时间是00:00:00,我只会得到返回的日期,没有附加时间。我不太明白这一点,因为TimeValue(time_string)returns 00:00:00

所以将日期和时间组合成日期+时间字符串时一定是个问题。

有人可以告诉我为什么 Excel VBA 中不存在午夜或者我在创建时间码时的错误在哪里?

编辑:

我试着更好地解释我的情况:

我在代码中执行此日期日期/时间的内容,然后在循环中生成数组。只是稍后才将其写入表格中的单元格。

当时间被写入单元格时,即使将单元格自定义格式设置为“DD.MM.YYYY hh:mm”也不会显示时间,因为它完全从单元格值中丢失。

我需要在date_code + time_code 处应用格式吗?

【问题讨论】:

  • 您是否尝试过格式化单元格以包含时间?如果时间为零,则默认日期格式不包括时间。
  • 日期和时间是表示自给定日期以来的时间的数字(第 1 天是 01/01/1900)。添加整数以增加天数,添加小数以增加时间。午夜 (00:00:00) 用于表示一天的开始(例如,1.001/01/1900 的午夜),如果没有对单元格应用格式,Excel 通常会省略时间。

标签: excel vba date time


【解决方案1】:

有时答案可能很简单。感谢 Variatus 和 Paul,我检查了格式。

我在代码中应用了date_time = Format(date_code + time_code, "dd.mm.yyyy hh:mm")。使用它,我的代码按预期运行,00:00:00 按预期显示,即使在 Excel 表的单元格值中也是如此。

【讨论】:

    【解决方案2】:

    当您在单元格中输入整数(如 43930)时,Excel 会将数字记录为整数,就像您输入的一样。然后,您可以继续将单元格格式化为#,##0.000,从而使数字显示为 43930.000。或者,您可以将该数字格式化为自定义 dd mmm yyy hh:mm:ss,并将其显示为 09 Apr 2020 00:00:00。关键是 Excel 选择以最有效的方式将数字记录为整数。

    因此,如果您输入一个 DateValue + TimeValue,它们加起来等于一个整数 Excel 将正确记录该整数。该整数在工作表中的显示格式与单元格格式有关。

    【讨论】:

    • 日期(和时间)存储为Double,而不是Integer。整数没有时间部分所需的任何小数部分。
    • @FunThomas 你是绝对正确的。 VBA 确实使用 Double 数据类型来进行日期/时间计算。但是,由于 43930 没有十进制数字,即使您将其分配给 Double 数据类型的变量,它也是一个整数。我认为即使 1234567890 也是一个整数,不是因为它可以在 VBA 中分配给该数据类型,而是因为它没有十进制数字。
    • 我认为谈论 Integer 会导致混淆。 CDateTimeValue 之类的函数返回 VarType 7 (vbDate),其内部表示为 Double。在00:00 的情况下,小数部分只是0,但值是43930.0,而不是43930。顺便说一句:即使你在一个单元格中放入一个整数并将其读入 VBA,你也会得到一个Double(Vartype 5)。
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多