सरल उत्तर डिफ़ॉल्ट मान है।
निम्नलिखित परिणाम निदर्शी है:
debug.Print day(0)
30
क्यों? क्योंकि वीबीए कैलेंडर में Day(0)
दिनांक 30/12/1899
है। निम्नलिखित द्वारा प्रदर्शन:
debug.Print format(Cdate(0), "dd/mm/yyyy")
30/12/1899
जब तक आप अपने मॉड्यूल के शीर्ष पर Option Explicit
लिखते हैं, VBA आप अनायास चर बनाने का प्रयोग के पहले बिंदु पर अनुमति देता है (Variant
प्रकार के रूप में)।
जब एक चर बनाया गया है (लेकिन सेट नहीं है) यह अपने 'डिफ़ॉल्ट मान पर सेट है। नमूना डिफ़ॉल्ट मान:
Long
--- 0
(Date
, Integer
, सहित अन्य numerics, के लिए एक ही Byte
, Double
आदि)
Boolean
--- False
(जो, VBA के अनुमोदक प्रकार प्रणाली में, 0
लिए मजबूर किया जा सकता है)
Variant
--- Empty
(जो भी 0
लिए मजबूर किया जा सकता है)
String
--- Zero-Length-String ("")
(जो , वास्तव में, 0
लिए मजबूर नहीं किया जा सकता, और यदि आप Day("")
मुद्रित करने के लिए) की कोशिश में एक त्रुटि फेंक होगा
Any Object
--- Nothing
,210
इसलिए, यदि आप लिखना Debug.Print Day(Var)
और Var
किसी भी संख्यात्मक डेटा प्रकार, या एक बूलियन, या एक संस्करण (या कभी नहीं पहली जगह में घोषित) तो यह Day(0)
जो 30
के उत्पादन में जैसा कि ऊपर देखा देता है मजबूर हो जाएगा।
प्रश्न में विशिष्ट स्थिति में:
VBA ow
एक अघोषित चर के रूप में पहचानता है, तो यह यह बनाता है (और एक Variant
डेटा प्रकार के लिए यह initialises) और Day()
को पास कर देता। चूंकि यह एक संस्करण है, इसकी प्रारंभिक मान Empty
है जिसे उसके बाद 0
पर ले जाया गया है, जिसके परिणामस्वरूप Day(0)
है जो 30
देता है।
शायद यह समझाएगा? https://social.msdn.microsoft.com/Forums/office/en-US/f1eef5fe-ef5e-4ab6-9d92-0998d3fa6e14/what-is-story-behind-december-30-1899-as-base-date? फोरम = accessdev – tjb1