2011-03-17 14 views
6

belirleyin:VBA Fonksiyon argüman listesi aşağıdaki gibi bir şey yapmak için arıyorum

diyorlar kullanıcı vArg3 için listenin bir açılır alır
Public Function myFunc(vArg1 as string, vArg2 as string, vArg3 as ["A","B","C"]) 


    End Function 

. Bu aşağıdakine benzer olacaktır: vbTextCompare fonksiyonu için önceden tanımlanmış liste veya argümanlar seçilebilir

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

.

Teşekkür

cevap

11

Bu numaralandırma olarak bilinen şeydir. Burada hızlı bir örnektir:

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 

Bu VBA düzenleyici içindeki işlevi çağrılırken aradığınız istenen 'Drop Down' Effect alacak. Ancak, bir excel hücre formülü içinden 'GetDrinkSpecial' olarak adlandırılacak olsaydınız, numaralandırmaya erişemezsiniz ve numaralandırmanın uzun değerini özel olarak iletmeniz gerekir.

+1

Bana onu dövdün. Daha fazla bilgi için buraya bakın: http://www.cpearson.com/excel/Enums.aspx – mwolfe02

+1

Ayrıca bir "enum" un sadece tamsayı için bir etiket olduğunu belirtmeliyim. Numaralandırılmış bir fonksiyon parametresi üzerinden 57 gibi "yasadışı değerler" den geçmek mümkündür, dolayısıyla Fink burada Case Else'e dahil edilmiştir. –

+1

Bir Enum'un, Pearson'un web sitesine göre bir _long_ tamsayı olduğunu unutmayın: http://www.cpearson.com/excel/Enums.aspx. –

2

Tam olarak istediğin şekilde değil.

Önce, bir modülde muhtemel seçenekler için "Kamu Enum" tanımlamalıdır

Public Enum myFuncEnum 
    OPTION_A 
    OPTION_B 
    OPTION_C 
End Enum 

Sonra Fonksiyonu, (o sürece bir sınıf modülü değil, aynı modül olabilir) tanım olacaktır:

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

End Function 

yerine "A", "B" ve "C" nin, OPTION_A, OPTION_B ve OPTION_C ile vArg3 karşılaştırmak gerektiğini unutmayın. Bu arada OPTION_A, OPTION_B, vb. Daha anlamlı olmak için yeniden adlandırılabilir, ancak bunlar proje boyunca benzersiz olmalıdır.

İlgili konular