2011-03-17 90 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編輯器中功能時所需的「下拉」效應。但是,如果您要在Excel單元格公式中調用「GetDrinkSpecial」,則無法訪問枚舉,並且需要專門將枚舉的長整型值傳遞給枚舉。

+1

你打敗了我。在這裏看到更多的信息:http://www.cpearson.com/excel/Enums.aspx – mwolfe02 2011-03-17 14:29:14

+1

我還應該指出,「枚舉」只是一個整數的標籤。仍然有可能通過枚舉函數參數傳遞57這樣的「非法值」,因此爲什麼Fink在這裏包含Case Else。 – 2011-03-17 14:31:36

+1

值得一提的是,根據Pearson的網站,Enum是_long_整數:http://www.cpearson.com/excel/Enums.aspx。 – 2011-03-17 17:20:02

2

不完全是你問的方式。

首先,你必須定義一個「公共枚舉」一個模塊中可能的選項(可以是相同的模塊,只要它不是一個類模塊)

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比較,而不是 「A」, 「B」 和 「C」 vArg3。順便說一下,OPTION_A,OPTION_B等可能會被重新命名以更有意義,但它們在整個項目中應該是唯一的。