将字符串值转换为 vba 中的日期值
Convert a string value to a date value in vba
为了简化数据输入,我允许用户输入不带“/”的 "ddmmyyyy" 日期,例如“12032017”。输入后我想用值 "dd/mm/yyyy" 更新目标单元格,例如“12/03/2017”。
开始时,目标单元格的格式设置为 "General",但一旦计算出日期值,单元格的格式就会自动更改为 "dd/m/yyyy"。
我尝试同时使用常规格式和日期格式。下面是VBA代码
If Not Intersect(Target, Range("D11:D510")) Is Nothing Then
If Not (Target.Value = "") Then
Application.EnableEvents = False ' very important
Target.Value = Left(Target.Value, 2) & "/" & Mid(Target.Value, 3, 2) &
"/" & Right(Target.Value, 4)
Application.EnableEvents = True 'very important
End If
End If
您仍然返回一个看起来像日期而不是实际日期的字符串,使用 DateSerial:
If Not Intersect(Target, Range("D11:D510")) Is Nothing Then
Target.NumberFormat = "@"
If Not (Target.Value = "") Then
Application.EnableEvents = False ' very important
Target.Value = DateSerial(Right(Target.Value, 4), Mid(Target.Value, 3, 2), Left(Target.Value, 2))
Target.NumberFormat = "dd/mm/yyyy"
Application.EnableEvents = True 'very important
End If
End If
为了简化数据输入,我允许用户输入不带“/”的 "ddmmyyyy" 日期,例如“12032017”。输入后我想用值 "dd/mm/yyyy" 更新目标单元格,例如“12/03/2017”。
开始时,目标单元格的格式设置为 "General",但一旦计算出日期值,单元格的格式就会自动更改为 "dd/m/yyyy"。
我尝试同时使用常规格式和日期格式。下面是VBA代码
If Not Intersect(Target, Range("D11:D510")) Is Nothing Then
If Not (Target.Value = "") Then
Application.EnableEvents = False ' very important
Target.Value = Left(Target.Value, 2) & "/" & Mid(Target.Value, 3, 2) &
"/" & Right(Target.Value, 4)
Application.EnableEvents = True 'very important
End If
End If
您仍然返回一个看起来像日期而不是实际日期的字符串,使用 DateSerial:
If Not Intersect(Target, Range("D11:D510")) Is Nothing Then
Target.NumberFormat = "@"
If Not (Target.Value = "") Then
Application.EnableEvents = False ' very important
Target.Value = DateSerial(Right(Target.Value, 4), Mid(Target.Value, 3, 2), Left(Target.Value, 2))
Target.NumberFormat = "dd/mm/yyyy"
Application.EnableEvents = True 'very important
End If
End If