2016-07-29 11 views
5

मैं Office 2007 का उपयोग कर रहा हूं। मेरे पास एक पावरपॉइंट मैक्रो है जो vLookup करने के लिए Excel वर्कशीट का उपयोग करता है। मैंने vLookup के लिए एक सार्वजनिक समारोह बनाया। यह अच्छी तरह से काम करता है जब सभी मूल्यों को सही ढंग से आपूर्ति की जाती है। अब मैं उन स्थितियों के लिए त्रुटियों को कैप्चर करने की कोशिश कर रहा हूं जहां लुकअप वैल्यू नहीं मिल सका। समारोह कोड है:Vlookup और ISERROR

Public Function v_lookup _ 
      (lookup_value As Variant, _ 
      table_array As Range, _ 
      col_index_num As Integer, _ 
      range_lookup As Boolean) _ 
      As String 

Dim varResult   As Variant 
Dim objExcelAppVL  As Object 
Set objExcelAppVL = CreateObject("Excel.Application") 
objExcelAppVL.Visible = False 

varResult = objExcelAppVL.Application.WorksheetFunction.VLookup _ 
      (lookup_value, _ 
      table_array, _ 
      col_index_num, _ 
      range_lookup) 
If IsError(varResult) Then varResult = "" 
v_lookup = varResult 

objExcelAppVL.Quit 
Set objExcelAppVL = Nothing 

End Function 

मैं निम्न कथन से प्राथमिक मैक्रो से इस फ़ंक्शन को कॉल करें:

varGatherNumber = v_lookup(varDateTime, Lit_Sched_Table_Lookup, 5, vbFalse) 

इस कोड को अच्छी तरह से काम करता है जब कोई त्रुटि नहीं है। समस्या यह है कि जब लुकअप विफल रहता है, तो मुझे

varResult = objExcelAppVL.Application.WorksheetFunction.VLookup 

.. कथन पर इंगित किया गया है। जब कोई vlookup त्रुटि हो तो यह If IsError(varResult)... कथन तक कभी नहीं पहुंचता है। मैं vLookup त्रुटि को सही तरीके से कैसे जा सकता हूं?

+1

आप आम तौर पर इस समारोह का बार-बार इस्तेमाल के साथ कई पंक्तियों (या कॉलम) को भरने के लिए? – Jeeped

+2

'वर्कशीटफंक्शन' को हटाएं, इसलिए 'एप्लिकेशन। दृश्य (... ' –

+0

धन्यवाद @ स्कॉटक्रैनर। वर्कशीट फंक्शन को हटाकर मेरी समस्या ठीक हुई। मैं आपकी मदद की सराहना करता हूं। – user3138025

उत्तर

5

WorksheetFunction object त्रुटि मानों को एक संस्करण में वापस नहीं भेजता है; यह बस उन पर चोक करता है। वर्कशीट फ़ंक्शन के बिना त्रुटि मान के साथ काम करने में सक्षम होने के लिए Excel Application object का उपयोग करें। आपने पहले ही एक्सेल बनाया है। एप्लीकेशन ऑब्जेक्ट; उसका उपयोग करें।

ऑब्जेक्ट वेरिएबल घोषणा स्थिर बनाकर CreateObject function के साथ किसी ऑब्जेक्ट ऑब्जेक्ट को बनाने (और नष्ट) करने के लिए दोहराया गया कॉल से बचा जा सकता है। यह एक यूडीएफ में विशेष रूप से उपयोगी है जिसे एक लंबे कॉलम की प्रतिलिपि बनाई जा सकती है।

मूल वर्कशीट VLOOKUP function बिना कॉलम के पूर्ण कॉलम संदर्भ की अनुमति देने के लिए लिखा गया है; Worksheet.UsedRange संपत्ति के पूर्ण कॉलम संदर्भों को छंटनी इस कार्य में सहायता करेगी।

Option Explicit 

Public Function v_lookup(lookup_value As Variant, _ 
         table_array As Range, _ 
         col_index_num As Integer, _ 
         Optional range_lookup As Boolean = False) As String 

    Dim varResult   As Variant 
    Static objExcelAppVL As Object 


    'only create the object if it doesn't exist 
    If objExcelAppVL Is Nothing Then 
     Set objExcelAppVL = CreateObject("Excel.Application") 
     objExcelAppVL.Visible = False 
    End If 

    'restrict full column references to the worksheet's .UsedRange 
    Set table_array = objExcelAppVL.Intersect(table_array.Parent.UsedRange, table_array) 

    varResult = objExcelAppVL.VLookup(lookup_value, _ 
             table_array, _ 
             col_index_num, _ 
             range_lookup) 

    If IsError(varResult) Then varResult = "" 
    v_lookup = varResult 

    'do not destruct static vars - they are reused on subsequent calls 
    'objExcelAppVL.Quit 
    'Set objExcelAppVL = Nothing 

End Function 

मुझे लगता है कि आप विशेष रूप से एक स्ट्रिंग को वापस भेज रहे हैं ताकि संख्याएं और तिथियां उनके टेक्स्ट समकक्ष हों। मुझे लगता है कि यह PowerPoint में मान प्राप्त करने का सबसे अच्छा तरीका है।

udf_vlookup

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