我正在尝试使用VBA脚本将日期转换为long。 以下是代码段
Sub test()
Dim str as string
Dim d as variant
str="1/1/2016"
d=cdate(str)
end sub
以上代码段在Windows上运行良好,但在MAC上给出了类型不匹配错误。 在日期中转换有效字符串是否有任何转变。
答案 0 :(得分:1)
您的代码在使用Excel的本地OS X计算机上运行。不过,我有不同的区域设置。我建议尝试使用国际日期格式(“YYYY-mm-dd”)。
Sub Main
Dim str as String
Dim d as Variant
str = "2016-01-01"
d = CDate(str)
End Sub
或者,您可以尝试“2016年1月1日”。
P.S。:你可以看到你的日期&系统偏好设置下的OS X中的时间设置 - >语言与地区 - >高级 - >日期:
答案 1 :(得分:1)
您的区域设置是根本原因。
你可以尝试修改它们吗?
defaults write NSGlobalDomain AppleICUDateFormatStrings -dict 1 dd/MM/yyyy
答案 2 :(得分:0)
也许尝试删除" /"在转换之前?我没有Mac测试:
Public Sub test()
Dim str As String
Dim d As Long 'should be Date, but your question states Long
str = "1/1/2016"
d = CDate(Replace(str, "/", ""))
Debug.Print d
End Sub
另外,您是否尝试过检查丢失的参考文献? Date for VBA not working in Excel 2011?
答案 3 :(得分:0)
您可以使用IsDate()函数检查它是否是转换前的日期。否则使用解决方法:
Sub test()
Dim str as string
Dim d as variant
str = "1/1/2016"
If IsDate(str) then
d = CDate(str)
Else
Dim aDateParts() as String
aDateParts() = Split(str, "/")
' DateSerial(Year, Month, Day)
d = DateSerial(CInt(aDateParts(2)), CInt(aDateParts(0)), CInt(aDateParts(1)))
End If
end sub
答案 4 :(得分:0)
许多不同的答案,所以我不妨把这种方式扔进戒指,
Sub test()
Dim str As String
Dim d As Variant
str = "1/1/2016"
d = CDate(Format(str, "dd/MM/yyyy"))
Debug.Print d
End Sub
答案 5 :(得分:0)
我最初没有发布这个,因为我认为它没有解决问题的根源,但是,如果你想要一个解决方法,你可以像你一样使用下面的功能通过致电CDate
使用ConDate("12/12/2016")
。
这就是我解决问题的方法:
Sub MainTest()
Dim InputString As String, OutputDate As Date
InputString = "01/12/2016"
OutputDate = ConDate(InputString)
Debug.Print OutputDate, TypeName(OutputDate)
End Sub
Function ConDate(ByRef InputString As String) As Date
Dim Day As Long, Month As Long, year As Long
'mmddyyyy format
Month = CLng(Left(InputString, InStr(1, InputString, "/", vbTextCompare) - 1))
Day = CLng(Mid(InputString, InStr(1, InputString, "/", vbTextCompare) + 1, InStrRev(InputString, "/", , vbTextCompare) - InStr(1, InputString, "/", vbTextCompare) - 1))
year = CLng(Right(InputString, 4))
ConDate = DateSerial(year, Month, Day)
End Function
我不想让sebifeixler回答我的原始左/中/右分开日/月/年,但我觉得用他的分割功能分开日期更整洁by" /"。两者的结合将是一个很好的解决方法。