2017-07-11 33 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