2017-07-11 35 views
1

为了简化数据输入,我允许用户在没有“/”的情况下输入日期“ddmmyyyy”,例如“12032017”。输入之后,我想更新目标单元格的值为“dd/mm/yyyy”,例如“12/03/2017”。
开始时,目标单元格的格式设置为“常规”,但一旦计算日期值,单元格的格式会自动更改为“dd/m/yyyy”。 我试图使用通用和日期格式。下面是VBA代码将字符串值转换为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 
+0

'12032017'不是一个有效的识别日期Excel将自动更改,所以只需更改格式将不起作用。您需要在Worksheet_Change事件中使用vba,解析字符串并返回日期,然后才能正确格式化。 –

+0

@ScottCraner,谢谢你的回复。是的,我使用的是宏,下面是代码; 如果没有相交(目标,范围( “D11:D510”))是没有那么 如果不是(Target.Value = “”)然后 Application.EnableEvents =假“非常重要 Target.Value =左(目标。 Value,2)&“/”&Mid(Target.Value,3,2)& “/”&Right(Target.Value,4) Application.EnableEvents = True'非常重要 End If End If – Ehsan

+0

Please将代码放在原始帖子中,而不是在评论中使用[edit]。 –

回答

1

你还是返回一个字符串,它看起来像一个日期,而不是实际的日期,使用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 
+0

Scott,我得到了If Not的溢出错误(Target.Value =“”)Then语句 – Ehsan

+0

target中的值是多少?这个对我有用。 –

+0

通过将目标单元格的格式设置为一般而不是日期,现在它的工作正常。感谢您的时间 – Ehsan