gpt4 book ai didi

vba - CDate() 的行为不一致

转载 作者:行者123 更新时间:2023-12-02 19:56:22 24 4
gpt4 key购买 nike

Windows 中的区域设置为 MM/DD/YYYY

现在看看这两行,以及月份的变化:

Sub DateBug()
Debug.Print Format(CDate("11/4/1999"), "MMMM D, YYYY")
Debug.Print Format(CDate("30/4/1999"), "MMMM D, YYYY")
End Sub

输出:

November 4, 1999
April 30, 1999

太好了,是吗?到底是怎么回事?

在第二行中,我想要一个错误,而不是“猜测”。

这是一个错误吗?知道如何规避这个问题吗?

Excel 2007、2010、2013 中相同

最佳答案

不是错误。如果可以的话,VB 将使用默认区域设置将字符串转换为日期文字。这是第一次约会时所做的。但在第二次约会时,这会给出无效日期,因此它尝试了 DD/MM/YYYY 并且成功了。解决方案,使用日期文字而不是字符串。在两个日期文字周围放置 # 号(例如:“#4/30/1999#”)以忽略区域设置并强制使用 MM/DD/YYYY 格式。 '#30/4/1999#' 会给你你想要的错误。这将使您的代码独立于计算机的区域设置 - 即,无论如何它都会工作。或者使用 DateTime(1999, 4, 30, 0, 0, 0)。看这里... Date Data Type (Visual Basic)

在 Excel 中,您可以使用不带单引号的文字:

Sub Macro1()
Range("D2").Select
ActiveCell.FormulaR1C1 = CDate(#4/30/1999#)
End Sub

关于vba - CDate() 的行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com