Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA日期+时间值不返回时间_Excel_Vba_Date_Time - Fatal编程技术网

Excel VBA日期+时间值不返回时间

Excel VBA日期+时间值不返回时间,excel,vba,date,time,Excel,Vba,Date,Time,我有一个日期和时间,我从表单中的字符串组合成一个日期+时间 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 通常返回值看起来像2019年1月5日11:00:00,这是我所期望的 如果使用

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

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
通常返回值看起来像2019年1月5日11:00:00,这是我所期望的

如果使用IsDatedate_time进行测试,则返回的值也将全部检查为TRUE

但是,每当时间是00:00:00时,我只返回日期,没有附加时间。我不太明白这一点,因为TimeValuetime\u string返回00:00:00

因此,在将日期和时间组合为日期+时间字符串时,这一定是一个问题

有人能告诉我为什么ExcelVBA中不存在午夜,或者我在创建时间代码时的错误在哪里

编辑:

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

我在代码中处理日期/时间,然后在循环中生成一个数组。直到后来它才写入表中的单元格

在将时间写入单元格时,即使将单元格自定义格式设置为DD.MM.yyy hh:MM,也不会显示时间,因为它完全不在单元格值中


是否需要在日期\代码+时间\代码点应用格式?

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


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

有时答案可能非常简单。多亏了瓦里塔斯和保罗,我才查到了格式


我在代码中应用了日期\时间=格式日期\代码+时间\代码,dd.mm.yyyy hh:mm。使用此选项,我的代码按预期运行,00:00:00按预期显示,即使在Excel表格的单元格值中也是如此。

是否尝试将单元格格式化以包含时间?如果时间为零,则默认日期格式不包括时间。日期和时间是表示时间的数字,因为给定的日期1是01/01/1900。添加整数以增加天数,添加小数以增加时间。午夜00:00:00用于表示一天的开始,例如1.0是1900年1月1日的午夜,如果没有对单元格应用格式,Excel通常会忽略时间。日期和时间存储为双精度,而不是整数。整数没有时间部分所需的任何分数部分。@你完全正确。VBA使用双重数据类型进行日期/时间计算。但是,由于43930没有十进制数字,所以即使将其分配给双精度数据类型的变量,它也是一个整数。我认为即使1234567890也是一个整数,不是因为它可以在VBA中分配给该数据类型,而是因为它没有十进制数字。我认为谈论整数会导致混淆。像CDate或TimeValue这样的函数返回vartype7vbdate,它在内部表示为Double。在00:00的情况下,分数部分仅为0,但值为43930.0,而不是43930。顺便说一句:即使你把一个整数放在一个单元格里,并把它读入VBA,你也会得到一个双vartype5。