簡體   English   中英

Excel將錯誤的日期值傳遞給VBA函數

[英]Excel Passing Wrong Date Value to VBA Function

我有一個帶有日期值的工作表。 Excel將它們正確解釋為日期。

我有一個VBA函數,它接受Date參數。

當我從工作表中調用此函數時,有時它可以正常工作,有時卻不能。 當我在函數中設置斷點以檢查從不正確的單元格傳遞給函數的值時,我發現錯誤的日期傳遞給了函數-與應該傳遞給函數的日期相隔一天。 時間值正確。

這發生在工作表上的隨機位置。 實際上,在昨天無法正常工作的一個單元中,現在它今天可以正常工作。

該值的時間部分似乎沒有什么不同。 可能是22:00,08:00,還是一天休息。

這對任何人有意義嗎? 我很困惑。

編輯:

我沒有發布任何代碼,因為我發現它不是代碼問題。 但是這是函數簽名:

Function timeToDecimal(time As Date, semanticTimeFormat As String) As Double

在函數的第一行可執行代碼中設置斷點,我看到time是例如1/1/1900 1:09:25 PM ,而在工作表上,時間顯然是1/2/1900 1:09:25 PM

問題不是我編寫的VBA代碼。 問題是Excel將數據傳遞給函數。 在Excel和VBA之間的界面中是否有一些我不熟悉的怪癖?

它會出現! 由於某種原因,excel中存在一個錯誤,其中1990年被錯誤地解釋為a年-此處提到: 如何在公認的答案中表示Excel中的DateTime 然后我自己進行了測試,將日期從01/01/1900到31/12/1901,然后我像這樣使用vba:

Sub test()


Dim str As String
Dim test As String
Dim test2 As String

test2 = ActiveCell.FormulaR1C1
test = ActiveCell.Value



While Not ActiveCell.FormulaR1C1 = ""
    str = ActiveCell.Value
    ActiveCell.Offset(0, 2).Value = str
    ActiveCell.Offset(1, 0).Activate

Wend



End Sub

並且從01/01/1900-01/03/1900那是日期關閉的地方。 由於vba的日期比電子表格中的日期晚了一天:

01/01/1900 0:00     31/12/1899
02/01/1900 0:00     01/01/1900 0:00
03/01/1900 0:00     01/02/1900 0:00
04/01/1900 0:00     01/03/1900 0:00
05/01/1900 0:00     01/04/1900 0:00
06/01/1900 0:00     01/05/1900 0:00
07/01/1900 0:00     01/06/1900 0:00
08/01/1900 0:00     01/07/1900 0:00
09/01/1900 0:00     01/08/1900 0:00
10/01/1900 0:00     01/09/1900 0:00
11/01/1900 0:00     01/10/1900 0:00
12/01/1900 0:00     01/11/1900 0:00
13/01/1900 0:00 01/12/1900 0:00

但是從1990年1月3日開始,日期一直排到我在1901年底停止的地方:

01/01/1901 0:00     01/01/1901 0:00         
02/01/1901 0:00     01/02/1901 0:00         
03/01/1901 0:00     01/03/1901 0:00         
04/01/1901 0:00     01/04/1901 0:00         
05/01/1901 0:00     01/05/1901 0:00         
06/01/1901 0:00     01/06/1901 0:00          
07/01/1901 0:00     01/07/1901 0:00         
08/01/1901 0:00     01/08/1901 0:00         
09/01/1901 0:00     01/09/1901 0:00         
10/01/1901 0:00     01/10/1901 0:00         
11/01/1901 0:00     01/11/1901 0:00         
12/01/1901 0:00     01/12/1901 0:00         

所以! 您可能需要該功能的一部分來檢查日期,並且從1899年1月31日到1900年2月28日,您需要將日期提高1。

*您會注意到右邊顯示的第二組日期均為mm / dd / yyyy格式-我不知道為什么excel會這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM