VBA में इंडेक्स-मैच का उपयोग करना


1

मेरे VBA मैक्रो में इंडेक्स-मैच फ़ंक्शन डालने की कोशिश कर रहा है, यह इस तरह दिखता है:

कॉलम ("C: C")। Forumla = "= INDEX ('[blabla.xlsm, Sheet1!'! $ F $ 4: $ F $ 102, MATCH (B1, '[blabla.xlsm] Sheet1'! $ G $ 4: $) जी $ 102,0)) "

हालाँकि मुझे "रन-टाइम त्रुटि 438 प्राप्त होती रहती है: वस्तु इस संपत्ति या विधि का समर्थन नहीं करती"

कोई सुझाव, सुझाव बहुत सराहना की जाएगी।


माफी - थोड़ा और अधिक विस्तार से जोड़ा जाना चाहिए। मेरे पास डेटा के साथ एक फ़ाइल है, और मैंने डेटा के 2 कॉलम के बीच एक कॉलम डाला है जो फ़ाइल के साथ आता है। मैं नए बनाए गए कॉलम में इंडेक्स-मैच फॉर्मूले को रखना चाहता हूं, और फिर इंडेक्स-मैच कॉलम को पेस्ट करें और शुरुआती 2 कॉलम में से 1 को एक अलग शीट में पेस्ट करें। इसलिए "कॉलम ()" का उपयोग।
१er

1
ForumlaRangeवर्ग का सदस्य नहीं है । Formulaकाम करता है ?
मथिउ गुइंडन

.formula एक पाठ () फ़ंक्शन के लिए काम करता है, लेकिन इंडेक्स () फ़ंक्शन के लिए नहीं जो अन्य शीट्स को संदर्भित कर रहा है
Riyer

मुझे लगता है कि यह एक अलग त्रुटि है - 1004 किसी भी मौके से? सूत्र को वास्तविक सेल में ले जाने का प्रयास करें - यदि एक्सेल इसका मूल्यांकन नहीं कर सकता है, तो आपके पास VBA कोड नहीं हो सकता है जो उस अमान्य सूत्र को एक सेल में बाध्य करने का प्रयास करता है।
मथिउ गुइंडन

जवाबों:


2

किसी Rangeवैरिएबल को डिक्लेयर करें, और उसे असाइन करें Columns("C:C")जैसे Set myRange = ActiveSheet.Columns("C:C")(यदि वह स्टैण्डर्ड मॉड्यूल में है) या Set myRange = Me.Columns("C:C")(यदि वह वर्कशीट मॉड्यूल में है)।

Dim myRange As Range
Set myRange = Columns("C:C")
myRange.Formula = "..."

फिर जब आप डॉट को टाइप करते हैं myRange., तो आपको उपलब्ध सदस्यों, पैरामीटर-क्विकइन्फो टूलटिप्स और संकलन-टाइम सत्यापन को सूचीबद्ध करने के लिए एक ड्रॉपडाउन मिलेगा। जिस कारण से आपके कोड को संकलित करने और चलाने की अनुमति दी गई थी (चाहे Option Explicitवह निर्दिष्ट हो या नहीं) Columnsएक Rangeवस्तु लौटाता है , लेकिन इसका कोई पैरामीटर नहीं है - ("C:C")तर्क वास्तव में Range.[_Default]संपत्ति को प्रदान किए जाते हैं, जो एक रिटर्न देता है Variant। कोई भी सदस्य इसके लिए जंजीर कॉल करता है, इसलिए इसे केवल रन-टाइम पर हल किया जाता है, अर्थात कोई भी टाइपो संकलन को नहीं रोकेगा, और रन-टाइम पर त्रुटि 438 फेंक देगा।

एक Rangeचर घोषित करके , आप "टाइप-कास्टिंग" कर रहे हैं जो कि Variantएक में है Range, और वहाँ से कंपाइलर यह सत्यापित करने में सक्षम है कि कौन से सदस्य मौजूद हैं, और कंपाइल-टाइम त्रुटियों को टाइपो दिया गया है।


लीजेंड। इसने काम कर दिया। चीयर्स m8।
रियाल

(@Riyer - यदि यह काम करता है, और आपके लिए समस्या हल करता है, तो आप इसे पोस्ट के बचे चेक मार्क पर क्लिक करके उत्तर के रूप में चिह्नित कर सकते हैं। यह लेखक को अतिरिक्त क्रेडिट देता है, और आपके प्रश्न को अनुत्तरित कतार से हटा देता है।)
ब्रूसवेयने

समझ गया। धन्यवाद ब्रूस। और सुपर धन्यवाद मैथ्यू।
रियाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.