सीमा से बाहर सदस्यता (त्रुटि 9)


1

वर्कबुक में यह फंक्शन काम करता था। यह एक अन्य कार्यपुस्तिका में, स्तंभ A: A में एक आइटम मास्टर वर्कशीट पर एक सीमा और पाया गया भाग के लिए एक रेंज लौटा रहा था।

Set FindRowअब एक पॉपअप सीमा से बाहर सबस्क्रिप्ट कहने के साथ विफल रहता है। मदद पर क्लिक करने से कुछ जानकारी मिलती है लेकिन मैं इसे यहाँ लागू नहीं कर पाया हूँ। किसी भी सहायता की सराहना की जाएगी।


Function FindPartNumber(ByVal Part As String, ByVal mpl_wb As Workbook) As Range

    Dim FindRow As Range

    Set FindRow = mpl_wb.Worksheets("Item Master").Range("A:A").Find(What:=Part, _
                   LookIn:=xlValues, _
                   LookAt:=xlWhole, _
                   SearchOrder:=xlByRows, _
                   MatchCase:=True)
    If Not FindRow Is Nothing Then
        Set FindPartNumber = FindRow
    Else
        Set FindPartNumber = Nothing
    End If

End Function

जवाबों:


2

दोनों फ़ंक्शन मापदंडों को मान्य करने की कोशिश करें, और लौटी हुई वस्तु की जांच करें Nothing

शीर्ष Subएक परीक्षा है, जिसमें दर्शाया गया है कि रिटर्न प्रकार कैसे जांचेंFunction


Option Explicit

Public Sub TestPart()

    Dim result As Range

    Set result = FindPartNumber(123, ThisWorkbook)    'Make sure that "result" is Set

    If Not result Is Nothing Then Debug.Print result.Address  'Check result object

End Sub

'If String/Workbook params are missing, or part is not found, this returns "Nothing"

Public Function FindPartNumber(ByVal part As String, ByVal mplWb As Workbook) As Range

    Dim findRow As Range, ws As Worksheet

    If mplWb Is Nothing Or Len(part) = 0 Then Exit Function    'Invalid file (mplWb)

    With mplWb
        On Error Resume Next   'Expected error: sheet name not found (sheet doesn't exist)
        Set ws = .Worksheets("Item Master")
        If Not ws Is Nothing Then
            With ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)

                Set findRow = .Find(What:=part, _
                                    LookIn:=xlValues, _
                                    LookAt:=xlWhole, _
                                    MatchCase:=True)

                If Not findRow Is Nothing Then Set FindPartNumber = findRow

            End With
        End If
    End With
End Function

ध्यान दें

फ़ंक्शन को अधिक सामान्य (पुन: प्रयोज्य) बनाने के लिए, सभी हार्ड-कोडेड भागों को बाहर स्थानांतरित करें


Option Explicit

Public Sub TestPart()

    Dim ws As Worksheet, result As Range, searchRange As Range

    Set ws = ThisWorkbook.Worksheets("Item Master")

    Set searchRange = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)

    Set result = FindPartNumber(123, searchRange)

    If Not result Is Nothing Then Debug.Print result.Address
End Sub

'If String/Range params are missing, or part is not found, this returns "Nothing"

Public Function FindPartNumber(ByVal part As String, ByVal rng As Range) As Range

    Dim findRow As Range

    If rng Is Nothing Or Len(part) = 0 Then Exit Function  'Invalid search range or part

    Set findRow = rng.Find(What:=part, _
                           LookIn:=xlValues, _
                           LookAt:=xlWhole, _
                           MatchCase:=True)

    If Not findRow Is Nothing Then Set FindPartNumber = findRow

End Function

महान काम करता है, संगठित संरचना ने मुझे समस्या का कारण खोजने की अनुमति दी। यह तब होता है जब भाग नहीं मिलता है, फ़ंक्शन अब "ऑब्जेक्ट चर या ब्लॉक चर के साथ सेट नहीं" अंत फ़ंक्शन पर त्रुटि उत्पन्न करता है। मैंने विकल्प स्पष्ट, कोई संकलन त्रुटियों का उपयोग नहीं किया, सब कुछ डिम अस है। लगता है FindRow होने के नाते कुछ भी समस्या नहीं है? हालांकि यह कैसे हल करने के लिए निश्चित नहीं है।
रब

@ रब - तो समस्या सिर्फ फ़ंक्शन में सामने आ रही है, लेकिन इस फ़ंक्शन को कॉल करने वाली कोड की लाइन के कारण होता है: यह "स्ट्रिंग" आईडी के रूप में एक खाली स्ट्रिंग भेजता है (यह सुनिश्चित नहीं है कि क्या कारण है)
पॉल बिका

भाग आबाद है और खाली नहीं है लेकिन भाग FindRow द्वारा नहीं मिला है क्योंकि यह पुराना या गलत हो सकता है और ws.Range में नहीं हो सकता है। यह FindRow को छोड़ देता है क्योंकि कुछ भी नहीं होता है FindPartNumber को एक सीमा के साथ सेट नहीं किया जाता है और फ़ंक्शन एक त्रुटि फेंक देता है?
रब

हां, उस स्थिति में फ़ंक्शन वापस आ जाता है Nothingऔर दूसरा कोड उम्मीद कर रहा है Range; यदि आप भाग नहीं पा रहे हैं, तो आप फ़ंक्शन को एक निश्चित सीमा वापस कर सकते हैं
पॉल बिका

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