मेरे पास एक लूप है जो एक स्ट्रिंग वेरिएबल में सबराउटिन का नाम संग्रहीत करता है, उस सबराउटिन को कॉल करता है, और दोहराता है।

Public Sub CallByVar_Click()
        Dim i
        Dim st As String
        Dim subName(1)
        subName(0) = "A"
        subName(1) = "B"

        For i = 0 To 1
            st = "Sub_" & subName(i)
            Application.Run st
        Next i
    End Sub

Public Sub Sub_A()
        Debug.Print "run Sub_A"
    End Sub

Public Sub Sub_B()
        Debug.Print "run Sub_B"
    End Sub

यह एक मॉड्यूल में पूरी तरह से काम करता है, लेकिन जब मैं इसे फॉर्म की कोड विंडो में काटता और चिपकाता हूं, तो यह त्रुटि देता है: Microsoft Access 'Sub_A' प्रक्रिया नहीं ढूंढ सकता।

मैंने सब्सक्रिप्शन के बजाय फ़ंक्शंस का उपयोग करने का प्रयास किया है, मैंने Application.Run के बजाय Call Eval() का उपयोग करने का प्रयास किया है, मुझे यह पता नहीं लग रहा है कि यह मॉड्यूल में क्यों काम करता है, लेकिन फॉर्म में नहीं। किसी भी मदद की सराहना की जाती है।

1
MaybeOn8 18 जिंदा 2020, 06:36

1 उत्तर

सबसे बढ़िया उत्तर

इसके लिए CallByName का उपयोग करें:

Public Sub CallByVar_Click()

    Dim i           As Integer
    Dim st          As String
    Dim subName(1)  As String

    subName(0) = "A"
    subName(1) = "B"

    For i = 0 To 1
        st = "Sub_" & subName(i)
        CallByName Me, st, VbMethod
    Next i

End Sub
0
Gustav 18 जिंदा 2020, 09:43