2016-04-02 8 views
9

enter image description hereदिनांक "31-12-1899" क्यों देता है जब 1 इसे पास किया जाता है?

मैं खिड़कियों 10 ओएस उत्कृष्टता 13 उपयोग कर रहा हूँ तो नीचे दिए गए कोड 1 में 1/1/1900 सही लौट जाना चाहिए? इसके नीचे क्यों नहीं है।

this पर प्रश्न ओपी 2016 पास किया गया और मुझे एक ही परिणाम मिला, अगर मुझे कुछ त्रुटि मिली तो मुझे ओपी के समान परिणाम क्यों मिला जब मैंने 2016 पास किया?

Sub ndat() 

Dim dt As Date 
dt = 2016 
Debug.Print "dt is " & dt 

End Sub 

enter image description here

+0

क्योंकि सभी एमएस ऑफ़िस अनुप्रयोगों में आधार तिथि (तारीख शून्य) 1899/12/30 है, और 12 में उस तारीख परिणाम के लिए 1 जोड़ने -31-1899। (आप एक एक्सेल सेल में 0 डालने और एक तिथि के रूप में यह फ़ॉर्मेट करके इस अपने आप को सत्यापित कर सकते हैं।) –

+0

@KenWhite तो क्यों MacroMan 1900/01/01 [यहां] मिल गया है (http://stackoverflow.com/questions/36375368/ टिप्पणियों में सरल-क्यों-है-my-msgbox-not-returning-the-current-year? noredirect = 1 # comment60374031_36375368)। क्या आप अपने सिस्टम पर 'सीडीएटी (1)' भी कर सकते हैं और मुझे बता सकते हैं कि आपको क्या मिलता है? – newguy

+0

@KenWhite युग तारीख के बारे में सही है - आप के बारे में पढ़ सकते हैं * क्यों * [यहां] (https://blogs.msdn.microsoft.com/ericlippert/2003/09/16/erics-complete-guide-to-vt_date /) – Comintern

उत्तर

5

पूर्णांकों और तारीखें वर्कशीट में से VBA में अलग ढंग से मैप करें। उदाहरण के लिए:

Sub marine() 
    Dim i As Integer, d As Date 
    Dim mgs As String 

    msg = "" 
    For i = -10 To 10 
     d = CDate(i) 
     msg = msg & i & vbTab & Format(d, "mm/dd/yyyy") & vbCrLf 
    Next i 

    MsgBox msg 
End Sub 

का उत्पादन:

यह:

enter image description here

नोट आपको कोई भी पूर्व 1/1/1900

संपादित करें # 1 दिनांकों प्राप्त कर सकते हैं अंतर को समझने में मदद कर सकते हैं। मैंने कॉलम में कुछ पूर्णांक डाले।

बी 1 में, मैंने =A1 डाल दिया और प्रतिलिपि बनाई। मैं तिथि प्रारूप में प्रदर्शित करने के लिए कॉलम बी प्रारूपित करता हूं।

मैं इस यूडीएफ() का उपयोग करें:

Public Function VBA_Date(i As Long) As String 
    VBA_Date = Format(CDate(i), "mm/dd/yyyy") 
End Function 

भरने के लिए स्तंभ सी:

enter image description here

नोट पंक्तियों के बीच संक्रमण # 19 और # 20

+0

मेरा प्रश्न नहीं है, लेकिन क्या आप जानते हैं * क्यों * शून्य तिथियां अलग हैं? मुझे लगता है कि यह सैंडविच में असली मांस है। –

+0

@MacroMan यह सिर्फ शून्य तारीख नहीं है! –

+0

मेरे हिस्से पर खराब वाक्यांश - मेरा मतलब है * क्यों * वर्कशीट और वीबीए के बीच पूर्णांक-टू-डेट मैपिंग अलग है? –

3

यह है केवल वर्कशीट ही। या सही होने के लिए: वर्कशीट-कार्यक्षमता!

त्वरित परीक्षण:

?cdate(1) 
1899-12-31 
?format(1,"YYYY-MM-DD") 
1899-12-31 
?worksheetfunction.Text(1,"YYYY-MM-DD") 
1900-01-01 

लेकिन आज की तारीख के लिए जा रहा इस अंतर दिखाई नहीं देता:

?clng(now) 
42463 
?worksheetfunction.Text(now,"0") 
42463 

से पता चलता है कि कहीं न कहीं 1 के बीच और 42,463 एक अंतर है (त्वरित कमल की जांच यह पता चलता है :

?cdate(60) & " --- " & cdate(61) 
1900-02-28 --- 1900-03-01 
?format(60,"YYYY-MM-DD") & " --- " & format(61,"YYYY-MM-DD") 
1900-02-28 --- 1900-03-01 
?worksheetfunction.Text(60,"YYYY-MM-DD") & " --- " & worksheetfunction.Text(61,"YYYY-MM-DD") 
1900-02-29 --- 1900-03-01 

बस एक अंतिम परीक्षण इसे फिर से दिखाने के लिए:

?format("1900-02-28","0") & " --- " & format("1900-03-01","0") 
60 --- 61 
?worksheetfunction.Text("1900-02-28","0") & " --- " & worksheetfunction.Text("1900-03-01","0") 
59 --- 61 

61 से शुरू होने पर, संख्याओं में अब अंतर है। लेकिन लोटस-बग 1 9 00-02-29 को "संगतता" के लिए जोड़ता है।

इसके अलावा: यह एक्सेल के लिए "फीचर" है और मूल, vbscript, vba .......... के साथ कुछ भी नहीं है। अन्य सभी प्रोग्राम सही तरीके से काम करते हैं और इसे बहुत सारी परेशानी होगी अगर वीबीए नहीं होगा। तो "संगतता" के लिए एक्सेल में VBA सिर्फ सही तरीके से करता है;)

संबंधित मुद्दे

 संबंधित मुद्दे