2011-03-17 28 views
6

मैं निम्नलिखित की तरह कुछ करने के लिए देख रहा हूँ का चयन करें:VBA समारोह तर्क सूची

Public Function myFunc(vArg1 as string, vArg2 as string, vArg3 as ["A","B","C"]) 


    End Function 

कहाँ पर उपयोगकर्ताओं को इसे कहते vArg3 के लिए इस सूची में नीचे एक बूंद हो जाता है। यह निम्नलिखित के समान होगा:

  Public Sub Main() 
       Call StrComp("A", "B", vbTextCompare) 
      End Sub 

कहाँ vbTextCompare एक पूर्व निर्धारित सूची या समारोह के लिए तर्कों में से चुना जा सकता है।

धन्यवाद

उत्तर

11

यह एक गणना के रूप में जाना जाता है। यहां एक त्वरित उदाहरण है:

Public Enum DayOfWeek 
    Monday = 1 
    Tuesday = 2 
    Wednesday = 3 
    Thursday = 4 
    Friday = 5 
    Saturday = 6 
    Sunday = 7 
End Enum 

Public Function GetDrinkSpecial(day As DayOfWeek) As String 

    Select Case day 
     Case DayOfWeek.Monday 
      GetDrinkSpecial = "$1 Tap Domestics" 
     Case DayOfWeek.Tuesday 
      GetDrinkSpecial = "2 for 1 Rail Mixers" 
     Case DayOfWeek.Wednesday 
      GetDrinkSpecial = "$2 You-Call-Its" 
     Case DayOfWeek.Thursday 
      GetDrinkSpecial = "$1 Bush Bottles" 
     Case DayOfWeek.Friday 
      GetDrinkSpecial = "$3 Greenies" 
     Case DayOfWeek.Saturday 
      GetDrinkSpecial = "No Specials, Doh!" 
     Case DayOfWeek.Sunday 
      GetDrinkSpecial = "No Specials, Doh!" 
     Case Else 
      GetDrinkSpecial = "No Specials, Doh!" 
    End Select 
End Function 

Public Sub TestIt() 

    MsgBox GetDrinkSpecial(Monday) 
    MsgBox GetDrinkSpecial(Tuesday) 
    MsgBox GetDrinkSpecial(Wednesday) 
    MsgBox GetDrinkSpecial(Thursday) 
    MsgBox GetDrinkSpecial(Friday) 
    MsgBox GetDrinkSpecial(Saturday) 
    MsgBox GetDrinkSpecial(Sunday) 
End Sub 

यह वांछित 'ड्रॉप डाउन' प्रभाव आप जब VBA संपादक में समारोह फोन करने के लिए देख रहे हैं मिल जाएगा। हालांकि, अगर आप एक्सेल सेल फॉर्मूला के भीतर से 'GetDrinkSpecial' को कॉल करना चाहते थे, तो आपको गणना तक पहुंच नहीं होगी, और इसे विशेष रूप से गणना के लंबे मूल्य को पारित करने की आवश्यकता होगी।

+1

आपने मुझे इसे हराया। अधिक जानकारी के लिए यहां देखें: http://www.cpearson.com/excel/Enums.aspx – mwolfe02

+1

मुझे यह भी इंगित करना चाहिए कि एक "enum" एक पूर्णांक के लिए सिर्फ एक लेबल है। एक अनुमानित फ़ंक्शन पैरामीटर के माध्यम से 57 जैसे "अवैध मूल्य" से गुज़रना अभी भी संभव है, इसलिए फ़िंक में केस इल्स क्यों शामिल है। –

+1

यह याद रखने योग्य है कि पियरसन की वेबसाइट के अनुसार, एनम एक _long_ पूर्णांक है: http://www.cpearson.com/excel/Enums.aspx। –

2

बिल्कुल पूछे जाने वाले तरीके से नहीं।

पहले, आप एक मॉड्यूल में संभव विकल्प के लिए एक "सार्वजनिक Enum" को परिभाषित करना होगा (यह एक ही मॉड्यूल हो सकता है, जब तक कि यह एक वर्ग मॉड्यूल नहीं है)

Public Enum myFuncEnum 
    OPTION_A 
    OPTION_B 
    OPTION_C 
End Enum 

फिर, समारोह में परिभाषा आप होना चाहिए:

Public Function myFunc(vArg1 as string, vArg2 as string, vArg3 as myFuncEnum) 

End Function 

याद रखें कि आप, OPTION_A, OPTION_B और OPTION_C साथ vArg3 तुलना चाहिए 'ए', 'बी' और 'सी' के बजाय। वैसे, OPTION_A, OPTION_B, आदि का नाम अधिक समझने के लिए बदला जा सकता है, लेकिन उन्हें परियोजना के अनूठे ट्रॉउटआउट होना चाहिए।