2012-07-21 13 views
6

मेरे पास निम्न स्वरूप में एक एक्सेल शीट में डेटा:VBA स्ट्रिंग तारीख पर कन्वर्ट

 
ItemCode       DeliveryDate 
5456987        24.01.2009 
5456988           
5456989        12.24.2009 
5456990        12/24/2009 

मैं एक सरणी में DeliveryDate के मूल्यों को संग्रहीत किया है। मुझे तारीख की मूल बातें पर निर्णय लेने की आवश्यकता है और फिर परिणाम को एक नई शीट में प्रिंट करना होगा।

Dim current as Date, highest as Date, result() as Date 
For Each itemDate in DeliveryDateArray 
    current = CDate(itemDate) 
    if current > highest then 
     highest = current 
    end if 
    ' some more operations an put dates into result array 
Next itemDate 
'After activating final sheet... 
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result) 

दुर्भाग्य से, CDate() फ़ंक्शन त्रुटि फेंकता है:: तो मैं सरणी में मानों को परिवर्तित करने के लिए है

  • पार्स:

    Run-time error '13':

    Type mismatch

    वहाँ VBA में एक समारोह जो कर सकते हैं के साथ स्ट्रिंग दिनांक प्रारूप और साथ काम करने के लिए एक दिनांक वस्तु वापस करें।

  • स्ट्रिंग खाली या विकृत होने पर (लूप में तुलना के लिए) खाली खाली ऑब्जेक्ट लौटाएं।

संपादित करें:

त्रुटि पुन: पेश करने के लिए बस चलाने myDate = CDate("24.01.2009")

+0

नहीं है इस साइट [के अनुसार http://www.example-code.com /vb/stringtodate.asp] आप इसे सही कर रहे थे .. यह त्रुटि को फेंक देता है? किस पंक्ति पर - पहली एक या दूसरी पंक्ति (खाली स्ट्रिंग)? क्या आपने स्ट्रिंग प्रारूप को बदलने की कोशिश की है? आप इस प्रारूप को बदलना चाहेंगे कि आप अपनी डेट स्ट्रिंग्स को कैसे पार्स कर रहे हैं। "24.01.2009" को पहचाना नहीं जा सकता है लेकिन "12/24/2009" हो सकता है - केवल 12/24/2009 को परिवर्तित करने का प्रयास करें और देखें कि यह काम करता है या नहीं। यदि यह काम करता है, तो 24.01.2009 प्रारूप अस्वीकार्य हो सकता है। –

+0

यह देखने के लिए कि क्या यह काम करता है 12/24/2009 को परिवर्तित करने का प्रयास करें। यदि यह काम करता है, तो प्रारूप dd.MM.yyyy सीडीएटी के लिए अपरिहार्य हो सकता है। आपके लिए यह निर्दिष्ट करने का एक तरीका हो सकता है कि यह कैसे स्वरूपित किया गया है ताकि यह वही तरीके से इसे पार्स कर सके जो आप चाहते हैं। यदि dd.MM.yyyy प्रारूप समस्या का कारण बन रहा है, तो प्रारूप को पहले बदलें "।" एक "/" के साथ और इसे फिर से बदलने की कोशिश करें। या इसे प्रारूपित करें कि यह एमएम/डीडी/yyyy बन जाता है और फिर इसे परिवर्तित करें। मुझे लगता है कि मैं सिर्फ यह जानना चाहता हूं कि "12/24/2009" त्रुटि करेगा या नहीं। पहले जांचें और मुझे बताएं। –

+0

@ एएनएनबी, ठीक है मेरा पहला सवाल है; क्या कोई वीबीए फ़ंक्शन है जो * किसी भी * दिनांक प्रारूप के साथ स्ट्रिंग को पार्स कर सकता है और काम करने के लिए डेट ऑब्जेक्ट वापस कर सकता है? –

उत्तर

8

यह देखने के लिए कि यह आपके लिए काम करेगा या नहीं, Replace का उपयोग करने का प्रयास करें। समस्या जैसा कि मैंने इसे देखा है, ऊपर उल्लिखित कुछ बार उल्लेख किया गया है कि सीडीएटी फ़ंक्शन अवधि पर चकित हो रहा है। आप उन्हें स्लेश में बदलने के लिए प्रतिस्थापन का उपयोग कर सकते हैं। वीबीए में एक फ़ंक्शन के बारे में अपने प्रश्न का उत्तर देने के लिए जो कि किसी भी दिनांक प्रारूप को पार्स कर सकता है, आपके पास बहुत सीमित विकल्प नहीं हैं।

ws.Range ("एक: ए ')

Dim current as Date, highest as Date, result() as Date 
For Each itemDate in DeliveryDateArray 
    Dim tempDate As String 
    itemDate = IIf(Trim(itemDate) = "", "0", itemDate) 'Added per OP's request. 
    tempDate = Replace(itemDate, ".", "/") 
    current = Format(CDate(tempDate),"dd/mm/yyyy") 
    if current > highest then 
     highest = current 
    end if 
    ' some more operations an put dates into result array 
Next itemDate 
'After activating final sheet... 
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result) 
+0

@ जेसनविल्लियम्स मैं इसे उत्तर में जोड़ दूंगा, क्या आप वाकई "0" का उपयोग करना चाहते हैं, यह एक समय में डिफ़ॉल्ट है (12:00:00 पूर्वाह्न) एक तारीख नहीं। –

0

लग रहा है यह खाली डेटा पंक्ति पर त्रुटि फेंक किया जा सकता है की तरह है, तो आप सिर्फ यह सुनिश्चित itemDate प्रतिसाद नहीं करने की कोशिश की है सीडीएटी() फ़ंक्शन चलाने से पहले खाली नहीं है? मुझे लगता है कि यह आपकी समस्या हो सकती है।

+0

नहीं, यह मामला नहीं है। संपादन की जांच करें। –

+1

ठीक है। जब आप अपना डेटा वहां डालते हैं तो यह उपयोगी होता। –

+0

और आपने सीडीएटी() के लिए आवश्यक स्वरूपण की जांच की है, तो यह उपयोगी हो सकता है यदि आपके पास [समान थ्रेड] नहीं है (http://stackoverflow.com/questions/7481309/vba-issues-converting-string-to-date उपयोग करना प्रारूप या cdate)। इसकी प्रकृति से आपको उस तिथि को दोबारा सुधारना पड़ सकता है जिसमें आप गुजर रहे हैं। –

0

मैं इस कोड का इस्तेमाल किया। FormulaR1C1 =" = DATEVALUE (आर सी [1]) "

स्तंभ एक हो जाएगा mm/dd/वर्ष

आर सी [1] स्तंभ बी, पाठ स्ट्रिंग, जैसे, 01/30/12, इस तिथि प्रकार

+0

यह वास्तव में प्रश्न का उत्तर नहीं देता है। वे 'dd.mm.yyyy 'को पार्स करने की कोशिश कर रहे थे, जो मूल रूप से वीबी/वीबीए/एक्सेल फ़ंक्शंस द्वारा नियंत्रित नहीं है। – Deanna

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