VBA Date + TimeValue returns no time
我有一个日期和时间,我将这些日期和时间从形式为
的字符串组合成一个日期时间
1 2 3 4 5 6 7
| 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)返回00:00:00。
因此,在将日期和时间组合到日期时间字符串时,这肯定是一个问题。
有人可以告诉我为什么Excel VBA中不存在午夜或我在创建时间码时出现的错误吗?
编辑:
我试图更好地解释自己的情况:
我在代码中执行此日期,日期/时间的操作,然后将结果放入循环数组中。仅在稍后将其写入表中的单元格。
通过将时间写入到单元格中,即使将单元格自定义格式为" DD.MM.YYYY hh:mm "也不会显示时间,因为它完全丢失了单元格值。
我是否需要在date_code + time_code点应用格式?
- 您是否尝试格式化单元格以包括时间?如果默认日期格式为零,则不包含时间。
-
日期和时间是表示自给定日期(第1天为01/01/1900)以来的时间的数字。加整数可增加天数,加分数可增加时间。午夜(00:00:00)用于表示一天的开始(例如1.0是01/01/1900的午夜),如果未对单元格应用格式,则Excel通常会省略时间。
有时候答案可能是如此简单。感谢Variatus和Paul,我检查了格式。
我在代码中应用了date_time = Format(date_code + time_code,"dd.mm.yyyy hh:mm")。使用此代码,即使在Excel表的单元格值中,我的代码也会按预期运行,并且00:00:00会按预期显示。
当您在单元格中输入整数(如43930)时,Excel会将数字记录为整数,就像您输入的那样。然后,您可以将单元格格式设置为#,##0.000,从而使数字显示为43930.000。或者,您可以格式化与自定义dd mmm yyy hh:mm:ss相同的数字,并将其显示为2020年4月9日00:00:00。关键是Excel选择以最有效的方式将数字记录为整数。
因此,如果您输入一个DateValue TimeValue,该值加起来等于一个整数Excel将正确记录该整数。在工作表中显示该整数的格式取决于单元格的格式。
- 日期(和时间)存储为<??x0>,而不存储为Integer。整数没有时间部分所需的任何分数部分。
-
@FunThomas你是完全正确的。 VBA确实使用Double数据类型进行日期/时间计算。但是,由于43930没有小数位,因此即使您将其分配给Double数据类型的变量,它也是一个整数。我认为甚至1234567890都是整数,不是因为可以在VBA中将其分配给该数据类型,而是因为它没有十进制数字。
-
我认为谈论Integer会导致混乱。诸如CDate或TimeValue之类的函数返回VarType 7(vbDate),其内部表示为Double。在00:00的情况下,小数部分只是0,但值是43930.0,而不是43930。顺便说一句:即使您将一个整数放在一个单元格中并将其读入VBA,您也会得到一个Double(Vartype 5)。