- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在浏览一些没有错误处理的旧代码时,我偶然发现了意外的 CDate() function行为。
Sub Test()
Dim userinput as Variant
userinput = Application.Inputbox("Enter a date")
'userinput will be a Variant/String with the inputs below
Debug.Print CDate(userinput)
End Sub
Input: "27/8", "27/08", "27-8", "27-08", "27.8", "27.08"
Output: 27.08.2019 ' for all of the above
Input: "27.8.", "27.08."
Output: 04.10.1900, 31.05.1907
Error 13: Type-mismatch
, 或
27.08.1900
或
27.08.2019
作为输出。
Additional input: "26.8." -> output: 24.09.1900
Input: "26.08." -> output: 20.02.1907
DD.MM.YYYY
Sub Test()
Dim userinput As Variant
Dim cancelBool As Boolean
Do While Not ((IsDate(userinput) And Not userinput = vbNullString) Or cancelBool)
userinput = Application.InputBox("Enter a date")
If userinput = False Then cancelBool = True
'the following line was inspired by Plutian
If Not IsDate(userinput) And IsNumeric(userinput) Then userinput = userinput & Year(Now())
Loop
If Not cancelBool Then Debug.Print CDate(userinput)
End Sub
最佳答案
这似乎不是 CDate 行为问题,只是一般问题的文本到数字转换。
我没有引用,但根据观察:当尝试将文本转换为数值时,Excel 将检查文本是否是明显的日期。如果不是,它将删除任何千位分隔符 - 毫无疑问,还有本地货币符号和其他东西 - 以尽可能将文本减少为一个数字。
因此,在我的英语语言环境设置中:"27.8"
( "27,8"
在你的)是一个可识别的十进制值
= 27 天和 8/10 过去 31/12/1899
= 26/01/1900 19:12:00
"27,8"
("27.8"
在你的)是一个不可识别的十进制值,也不是一个可识别的日期
所以它变成了"278"
因为它去掉了 000 分隔符(我的设置是逗号,你的设置是句点)
过去 278 天 31/12/1899
= 27/09/1900
然而,正如@Nacorid 所指出的,CDATE
对此略有不同(与标准转换)并尝试将其解决为一个日期 - 8 月 27 日(当年)。"27.8."
(你的 "27,8,"
)抛出一个错误,因为它是一个不可识别的日期,并且由于两个十进制指针,Error
被生产。"27,8,"
(您的 "27.8."
)不是可识别的日期,Excel 假定需要删除 000 分隔符,因此将其转换为 278
=过去 278 天 31/12/1899
= 04/10/1900
所以,TL;DR 是 "27.8."
- 虽然在德语中可以接受作为日期 - Excel 不能接受,您需要捕获这些并添加假设的年份或类似的时间来解决它。
或者,考虑添加一个日历弹出表单,强制用户提供日、月和年。
关于excel - 意外的 CDate() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57670002/
我有一个我在 8 月中旬创建的电子表格,其中有一个表格,从那时起每天都有一列。列标题是当天的日期。日期以我希望的方式显示:“dd/mm/yyyy” 但是,我有宏需要读取这些日期才能执行其工作。因为我使
Windows 中的区域设置为 MM/DD/YYYY 现在看看这两行,以及月份的变化: Sub DateBug() Debug.Print Format(CDate("11/4/1999"),
我们有一个 VB6 应用程序(在 COM 组件中),它使用 CDate() 获取字符串并将其转换为日期,以便存储在数据库中。 例如,根据我们希望应用程序以 dd/MM/yy 还是 MM/dd/yy 进
在浏览一些没有错误处理的旧代码时,我偶然发现了意外的 CDate() function行为。 Sub Test() Dim userinput as Variant userinput
我有以下代码: minDate = CDate(Table.Cell(i, 4).Range.Text) 但我收到“类型不匹配错误”。Table.Cell(i, 4)采用“dd.mm.yy”格式。 最
我有一个下拉框,项目取决于区域设置: Private Sub UserForm_Initialize() Select Case Application.International(XlApplica
我尝试在记录集中使用 CDate() 将文本字段转换为日期,但不断收到类型不匹配错误。输入文本格式为MMDDYYYY。 CDate 不识别这种格式吗?我需要一个单独的功能吗?有什么想法吗? Text
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
似乎我一直在 VBA excel 中发现罕见的错误。CDate(Now())导致“编译错误:预期:标识符”和“运行时错误:'13':类型不匹配” Cell(1,1) = Now() Date1 = C
我对 VBA 几乎一无所知,但被分配修复错误,所以请允许这个非常基本的问题: 据我所知,将空白用户表单单元格写入工作表会导致错误结果。该值必须是日期格式,所以 CDate()被使用,但这会导致 Run
我一直在我的程序中使用 CDate,但令人担忧的是,它只能在 IE 中运行。cdate(strValue) 。 如果我将 strvalue 的值作为 01/02 传递,它返回为 Wed Jan 2 e
我想将字符串“mm/dd/yy hh:mm AM/PM”转换为日期“mm/yyyy” 为什么下面的代码输出11-2-2015? Sub Test() Dim yourStringDate As
我有一列以 DD-MM-YYYY 格式存储的日期。我正在使用 VBA 的 cdate 函数循环它们以将它们转换为值 - 但是,当月份的日期为 12 或更小时,Cdate 将日期解释为 MM-DD-YY
我三周前刚刚开始学习 VBA,所以请随意批评我的代码。 我想使用 IIF 语句来执行 If 语句内的操作: Dim rng_ModPlanStart as range Dim QueryDate as
我的任务是将旧的 VB6 程序转换为 C#。我一直难以移植的一个函数是计算从二进制文件中读取的文件的生日: .BirthDate = CDate((CLng(recPatient.birthDateB
我通常避免使用 VB 的内置转换函数(CStr、CDate、CBool、CInt 等),除非我需要进行实际转换。如果我只是将对象转换为字符串,那么我通常使用 DirectCast 或 TryCas
在 Excel 2010 VBA 中,我正在测试以确保我的代码能够正确处理无效的用户输入。我正在使用 CDate 来验证日期输入。我发现输入无效日期“0/5/14”时,CDate 返回日期 5/14/
我制作了一个名为 FormatDT 的函数,并将其放在 \include\basic_function.asp 这是该函数的代码: function FormatDT(ddate,format)
我正在尝试使用 VBA 脚本将日期转换为 long。下面是代码片段 Sub test() Dim str as string Dim d as variant str="1/1
我尝试将日期值设置为具有默认值的 PreparedStatement,但该值有时会作为 JulianValue 返回。例如(假设 spanBegin 和 spanEnd 为空) Calendar ca
我是一名优秀的程序员,十分优秀!