使用VBA获取正确的日期

Ant*_*ony 1 excel vba date excel-vba

01/02/2018 12:25:00 PM

我在Excel电子表格的B1单元格中有上述日期.日期是2018年2月1日,但下面是VBA代码

thedate = CDate(Application.Cells(linecount, 2))
Run Code Online (Sandbox Code Playgroud)

将此转换为2018年1月2日

我用什么VBA代码保留2018年2月01日?

ash*_*awg 5

如果要使用VBA返回表示在本地区域日期设置中Date的字符串的数据类型值(在消息框中),则可以使用:01/02/2018 12:25:00 PM01 February 2018

Dim dt as String
dt = "01/02/2018 12:25:00 PM"
MsgBox DateSerial(Mid(dt, 7, 4), Mid(dt, 4, 2), Left(dt, 2))
Run Code Online (Sandbox Code Playgroud)

IMG 这是它为显示的方式.见下面的注释.

如果您确实希望以您提到的特定格式返回一个字符串(在消息框中)"dd MMMM yyyy",您可以使用:

Dim dt as String
dt = "01/02/2018 12:25:00 PM"
MsgBox Format(DateSerial(Mid(dt, 7, 4), Mid(dt, 4, 2), Left(dt, 2)), "dd MMMM yyyy")
Run Code Online (Sandbox Code Playgroud)

IMG

如果你想存储这些数据(包括时间),或者用它来计算,那么正确的方法更像是:

Dim strMyDate as String, dtMyDate as Date
strMyDate = "01/02/2018 12:25:00 PM"
dtMyDate = DateSerial(Mid(strMyDate, 7, 4), Mid(strMyDate, 4, 2), _
    Left(strMyDate, 2)) + TimeValue(Mid(strMyDate, 11))
MsgBox dtMyDate
Run Code Online (Sandbox Code Playgroud)

IMG


请注意,这些MsgBox显示的日期/时间基于我的系统的Windows设置(如下所示),如下所示,可根据需要进行调整.(因此,上面的结果对您来说会有所不同.)

  • 点击Windows Key类型打开这些设置region,然后点击ᴇɴᴛᴇʀ.

    (点击放大)

  • DateTime实际上存储在Excel中作为数字,其中0= December 30, 1899+1 = +1 day,因此您的示例日期01 February 2018 12:25:00 PM实际上只是DateTime序列号的格式化表示,在本例中 43132.5173611.


更多信息: