2012-03-06 31 views
4

我試圖從Excel窗體上選定的下拉框中返回文本。我已經嘗試了很多東西,而且我得到的最接近的是返回索引號。也有一看:從下拉框中返回選定的文本

鏈接:Return the text from a dropdown box rather than the index number

我還沒有發現該網頁上的一個可行的解決方案。我已經試過的東西,如:

ActiveSheet.DropDowns("DropDown1").Value 
ActiveSheet.DropDowns("DropDown1").Text 
ActiveSheet.DropDowns("DropDown1").SelectedValue 
ActiveSheet.Shapes("DropDown1").Value 

+0

您聲明_「...在Excel表單上選擇的下拉框」_,但鏈接和示例代碼指的是工作表上的形狀。你想要做什麼?另外,您使用的是哪個版本的Excel? – 2012-03-06 05:25:32

+0

我使用的是excel 2010.嗯,在我的代碼的一部分中,我將下拉列表稱爲ActiveSheet.Shapes,該代碼部分工作正常。 – karlstackoverflow 2012-03-06 05:29:45

+0

我不確定你使用的是什麼:你是否添加了一個控件到工作表(例如從Developer選項卡,插入表單或ActiveX控件,如果是的話)或者你是否添加了數據驗證到一個單元格或範圍(例如從數據選項卡,數據驗證,以及如果確切是什麼設置) – 2012-03-06 05:41:02

回答

6

這將從下拉

Sub TestDropdown() 
    Dim ws As Worksheet 
    Dim dd As DropDown 

    Set ws = ActiveSheet 
    Set dd = ws.Shapes("DropDown1").OLEFormat.Object 

    MsgBox dd.List(dd.ListIndex) 
End Sub 

BTW返回當前的選擇,分配給聲明爲Dim dd As DropDown變量會給你的智能感知dd

+0

哇,它像一個魅力工作。我從來不會想到這一點,我認爲它會像.SelectedIndex一樣簡單。謝謝克里斯。 – karlstackoverflow 2012-03-06 06:06:02

3

如果宏由下拉框本身調用,您也可以獲取調用者名稱。你鴕鳥政策這樣擔心重命名下拉框:)

Sub Dropdown_OnSelect() 
    Dim dd As DropDown 

    Set dd = ActiveSheet.Shapes(Application.Caller).OLEFormat.Object 

    MsgBox dd.List(dd.ListIndex) 
End Sub 
+1

這是真正的答案,因爲獲取對象名稱是PITA。 – Rob 2017-02-17 14:32:43

1

如果您無法Dim as DropDown我發現,這種改變會工作。

Sub TestDropdown() 
    Dim ws As Worksheet 
    Dim dd As Object 

    Set ws = ActiveSheet 
    Set dd = ws.DropDowns("DropDown1") 

    MsgBox dd.List(dd.ListIndex) 
End Sub 
相關問題