2012-05-17 12 views
13

मेरे पास एक स्प्रेडशीट के भीतर एक वीबीए फ़ंक्शन है जो मेरे मैक्रो के पहले चरण में खोला गया एक और स्प्रेडशीट पर चलता है। मैक्रो ठीक काम करने के लिए प्रयुक्त होता है लेकिन हाल ही में त्रुटि ("वर्कशीट फ़ंक्शन वर्ग") की राउंडडाउन संपत्ति प्राप्त करने में असमर्थ होने पर यह हाल ही में शुरू हो गया है।एक्सेल त्रुटि 1004 "वर्कशीट फंक्शन क्लास की संपत्ति प्राप्त करने में असमर्थ" असंगत रूप से

मुझे विश्वास है कि मैं समझता हूं कि त्रुटि क्या होगी (राउंडडाउन चलाने में समस्या) लेकिन मैं नहीं देख सकता कि यह मेरे मैक्रो में क्यों ट्रिगर हो रहा है और अजीब हिस्सा यह है कि जब मैं डीबग मोड में जाता हूं और कोड के माध्यम से कदम उठाता हूं वीबीई में त्रुटि दोबारा नहीं होती है (कुछ भी स्पष्ट रूप से बदल नहीं होने के बावजूद)।

क्या किसी के पास असंगत रूप से इस तरह की त्रुटि का एक समान अनुभव है और पता है कि मैं इसे हल करने के लिए क्या कर सकता हूं?

मैं उचित रूप से वीबीए/एक्सेल-समझदार हूं, लेकिन इसका निदान करने के लिए आगे के चरणों पर किसी भी सुझाव की सराहना की जाएगी। मैं सोच रहा हूं कि खुली स्प्रेडशीट के साथ कुछ मुद्दा तैयार नहीं है, लेकिन मैं नहीं देख सकता कि कैसे।

कोड यहाँ है। एक टिप्पणी के साथ चिह्नित लाइन पर त्रुटि होती है।

Public Function GetDatesA(sWorkbookname As String, sSheetname As String, sCell As String) As Variant 

    Dim vDateList() As Variant 
    Dim currentCell As Range 
    Dim n As Long 

    Set currentCell = Workbooks(sWorkbookname).Worksheets(sSheetname).Range(sCell) 

    n = 0 

    Do 
     If Trim(currentCell.Value) = "" Then 
      Exit Do 
     Else 
      ReDim Preserve vDateList(0 To 1, 0 To n) 
      vDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0) 'error occcurs on this line 
      vDateList(1, n) = currentCell.Column 
      'Debug.Print currentCell.Value 
     End If 
     Set currentCell = currentCell.Offset(0, 1) 
     n = n + 1 
    Loop While currentCell.Column < XL_LAST_COLUMN 

    GetDatesA = vDateList 

End Function 

अन्य विवरण हैं:

  • एक्सेल संस्करण: 2010

  • फ़ाइल मेरी सी पर स्थानीय रूप से बसता था खोला जा रहा: ड्राइव; मेरी मैक्रो नेटवर्क पर एक स्प्रेडशीट में है

  • दोनों फ़ाइलों के लिए फ़ाइल फ़ॉर्मेट .xls है (यानी Excel 2003) - मैं इस

  • विंडोज 7 बदलने का विकल्प नहीं है (नहीं मुझे लगता है कि यह प्रासंगिक होगा)

दो अंक मैं पहले से ही की कोशिश की है इस प्रकार हैं:

  • स्थानापन्न किसी दूसरे कार्यपत्रक समारोह (जैसे मिन (currentCell)) और वें यह भी एक ही समस्या का कारण बनता है

  • फ़ाइल खोलने से पहले ही समस्या को रोकना प्रतीत होता है - मुझे आश्चर्य है कि अगर कोई कार्यपुस्तिका खोला जा रहा है (इसके मैक्रो के साथ मेरी मुख्य कार्यपुस्तिका के बजाय) मैक्रोज़ के लिए सक्षम है और यह हस्तक्षेप कर रहा है। लेकिन अगर यह कारण भी है तो मुझे यकीन नहीं है कि इसके आसपास कैसे जाना है!

कोई विचार?

+0

काम करेंगे आप 'सिर्फ' पहले vDateList (0, एन) = WorksheetFunction.RoundDown (currentCell.Value, 0) ', क्या करना सम्मिलित Debug.Print currentCell.Value' आपको मिला? क्या यह वैध संख्या है? –

+3

'वर्कशीटफंक्शन। राउंडडाउन (currentCell.Value, 0)' को 'एप्लिकेशन' में बदलें। वर्कशीटफंक्शन। राउंडडाउन (currentCell.Value, 0) ' –

+0

धन्यवाद! मैंने उसे जाने दिया। मुझे तिथियों की एक सूची मिलती है (प्रभावी रूप से संख्याएं - जब तक कि मैं दिनांक के अनुरूप अंतर्निहित एक्सेल नंबर प्राप्त करने के लिए 1 तक गुणा नहीं करता) तक एक तिथि के रूप में दिखाता हूं। यदि मैं कोड के माध्यम से कदम उठाता हूं तो ये निश्चित रूप से ठीक से चलते हैं, लेकिन अगर मैं इसे अपने आप चलाने के लिए नहीं देता (जब यह सटीक समान मान वापस खींचता है), तो शायद यह मेरे खराब डेटा की बजाय वर्कशीट फ़ंक्शन के बारे में कुछ है। अब मैं "ऑन त्रुटि ..." का उपयोग करने पर काम कर रहा हूं - ऐसा लगता है कि पहली बार त्रुटि हुई है, इसलिए पहले से ही ऑन रेज़्यूमे के साथ एक मनमानी वर्कशीट फ़ंक्शन कॉल करना होगा और उसके बाद यह बंद हो जाएगा। – Neil

उत्तर

21

यह त्रुटि तब होती है जब वर्कशीट फ़ंक्शन पर कोई भी तर्क पारित होता है, सही प्रकार का नहीं है या बस समझ में नहीं आता है।

उदाहरण के लिए, मैं इस समस्या को जब एक तर्क से 1. बड़ा अपने मामले, मुझे लगता है था currentCell.Value में साथ WorksheetFunction.Asin बुला लिया है एक गैर-अंकीय मान या एक संख्या के बारे में अपने क्षेत्र सेटिंग्स के अनुसार नहीं है।

हां, त्रुटि संदेश वास्तव में गुमराह कर रहा है।

+0

बस संदर्भ के लिए, वही त्रुटि होती है जब वर्कशीटफंक्शनक्शन को कॉल करते हैं। नकारात्मक मानों के साथ। –

+0

या 1-आधारित एक्सेल संग्रह जैसे शीट पर स्थिति 0 पर किसी आइटम के लिए पूछते समय। चित्र (0) – Cel

+0

यह तब भी होता है जब आप जिस श्रेणी को ट्रांसफर करने का प्रयास कर रहे हैं वह "एक टुकड़े में नहीं" है। तो आप फ्रैक्चर की श्रेणियों को स्थानांतरित नहीं कर सकते हैं –

1

मुझे "* वर्कशीट फ़ंक्शन क्लास की संपत्ति" ट्रांज़ेप, एमएमल्ट, एमडीटरएम और मिनवर्स फ़ंक्शंस का उपयोग करने में त्रुटि मिली।

मैं संपादक में विशेष मॉड्यूल के घोषणा (वास्तविक कोड से पहले) खंड में "विकल्प बेस 1" डालकर अपना कोड चलाने में सक्षम था।

एक्सेल "विकल्प बेस 0" मानता है जो खाली कोशिकाओं की एक अतिरिक्त पंक्ति और कॉलम जोड़ देगा। इससे त्रुटि उत्पन्न हो जाएगी और यह देखने के लिए तत्काल स्पष्ट नहीं है।

0

मैं पहले इस पर आ गया हूं, और मेरे लिए यह मानदंड सीमा का कोई मतलब नहीं था, जैसा आंद्रे ने ऊपर कहा था।

देखें नीचे दिए गए उदाहरण सूत्र: .Cells(11, i).Formula = Application.WorksheetFunction.CountIfs(Sheets("Sheet1").Range("AC8:C" & n), "S")

रेंज पर एक नज़र डालें ... यह कोई मतलब नहीं है। "AC8:AC" करने के लिए "AC8:C" से सीमा संशोधन किया है और यह पूरी तरह

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

  • कोई संबंधित समस्या नहीं^_^