2017-06-22 53 views
0

通過輸入框我想定義單元格中使用的日期。手動輸入後的日期值錯配輸入

Sub Refresh() 

Dim myValue As Variant 

myValue = InputBox("Give me a starting date") 
Workbooks.Open Filename:="Y:\ 3300.xls" 
Range("A1").Value = myValue 
ActiveWorkbook.Close SaveChanges:=True 

End Sub 

奇怪的是,有時給定的日期是正確的,有時逆轉(通過重新打開指定文件選中)。我嘗試了以下日期:

30/01/17正確
14/05/17正確
17年4月2日反轉爲17年2月4日
17年8月9日反轉到17年9月8日
17年10月5日反轉爲17年5月10日
17年5月10日反轉爲17年10月5日

細胞格式是根據上述(DD/mm/yy)並且即使我改變它並且相應地調整輸入,行爲仍然存在

+0

最有可能您的系統格式爲mm/dd/yy和2017年2月4日更改爲02/04/2017。 30/01/17保持原樣,因爲它保持一般格式,因爲我們只有12個月。這不是一個實際的日期。您可以通過在'= value()'中包含包含日期的單元格來進行確認。前兩個將給出一個「#VALUE」錯誤,其餘的將被轉換爲它們各自的基礎編號。 –

回答

1

Exc el不會將您的輸入識別爲日期。這只是輸入到輸入框中的文本,Excel會在您將其添加到工作表時將其格式化。通過添加CDATE它將輸入的值轉換爲實際日期 - 如果我錯了,我肯定有人會在這裏糾正我的錯誤,但它似乎使用本地設置將其轉換。

我看到的另一個潛在的問題是,你只是在看ActiveWorkbook這可能不是剛剛打開的那個。下面的代碼將工作簿添加到變量中,因此您可以確保始終在該書中查找正確的書籍和正確的工作表。

Sub Refresh() 

    Dim myValue As Date 
    Dim wrkBk As Workbook 

    myValue = InputBox("Give me a starting date") 
    Set wrkBk = Workbooks.Open("Y:\ 3300.xls") 
    wrkBk.Worksheets("Sheet1").Range("A1") = CDate(myValue) 
    wrkBk.Close SaveChanges:=True 

End Sub