Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 Dateserial()奇怪的行为_Excel_Vba - Fatal编程技术网

Excel Dateserial()奇怪的行为

Excel Dateserial()奇怪的行为,excel,vba,Excel,Vba,有人能给我解释一下为什么这个代码: MsgBox DateSerial(Int(Val(Left("20180618", 4))), Int(Val(Mid("20180618", 3, 2))), Int(Val(Right("20180618", 2)))) 返回2019年6月18日???因为Mid20180618,3,2是18,它会溢出一年中的12个月,并将年份数增加1 显然你是指20180618,5,2年中期 巧合的是,Mid20180618,5,2和Mid20180618,3,2之间

有人能给我解释一下为什么这个代码:

MsgBox DateSerial(Int(Val(Left("20180618", 4))), Int(Val(Mid("20180618", 3, 2))), Int(Val(Right("20180618", 2))))
返回2019年6月18日???

因为Mid20180618,3,2是18,它会溢出一年中的12个月,并将年份数增加1

显然你是指20180618,5,2年中期


巧合的是,Mid20180618,5,2和Mid20180618,3,2之间的差异正好是12个月,因此您只看到年份的变化,而没有其他变化。

您的中间值返回了错误的所需数字,请将其用作您的中间值

Int(Val(Mid("20180618", 5, 2)))

每当你有很多参数,这些参数在代码中的计算结果是不同的,试着看看每个参数本身的计算结果是什么。Debug.Print是查看它的好方法:

Sub Main()

    Debug.Print (Left("20180618", 4))
    Debug.Print (Mid("20180618", 3, 2))
    Debug.Print (Right("20180618", 2))

End Sub
因此,您将得到:

2018
18
18
从那里可以看到错误。因为,当参数超过12个月时,年份增加:

调试.打印日期Serial2015,13,1返回2016年1月1日

相同的工作日数:

Debug.Print DateSerial2015,1363返回2015年12月29日