web-dev-qa-db-ja.com

VBAでドロップダウン値を取得し、ドロップダウンの名前を取得します...どこにも見つかりませんか?

ユーザーフォームツールバーからコンボボックスをシートにドラッグして、ドロップダウンを作成しました。本のいくつかのセルからいくつかの値を割り当てました。次に、VBAコードで、選択したドロップダウンアイテムの値に文字列の形式でアクセスできるようにします。

ドロップダウンにはテキストのみが含まれています。

また、この新しく作成されたドロップダウンの名前を見つけるにはどうすればよいですか(プロパティのどこにもありません!)?

8
EKet
Dim dd As DropDown
Set dd = ActiveSheet.DropDowns("Drop Down 6") 
Set r = Sheet2.Range(dd.ListFillRange)

Set ddValue = r(dd.Value)

注:

  • DropDownは表示可能なクラスではありません。あなたはそれを使うだけでそれは機能します。

  • ドロップダウンの名前[〜#〜] control [〜#〜](ユーザーフォームではない)を見つけるには、
    画面の左上隅の列Aのすぐ上にある名前ボックス。コントロールを右クリックすると、コントロールの名前が表示されます。-

  • Sheet2は、ドロップダウンリストが入力される場所です。したがって、リストデータがどこにあっても。

    それが皆さんのお役に立てば幸いです。

7
EKet

名前を知らなくても文字列を取得する方法は次のとおりです。

Dim DD As Shape

Set DD = ActiveSheet.Shapes(Application.Caller)

MsgBox DD.ControlFormat.List(DD.ControlFormat.ListIndex)
3
Lance Roberts

ランスロバーツはもうすぐそこにいました。サブを呼び出すドロップダウンの名前がわからない場合は、次を使用します。

Dim dd as DropDown
Set dd=ActiveSheet.Shapes(Application.Caller).OLEFOrmat.Object

Dim ddVal as String
ddVal=dd.List(dd.ListIndex)

これを使用して、多くのドロップダウンを持つフォームの汎用サブを作成しました。

0
Rhys

これは不格好な方法ですが、機能するはずです。

Dim o As Object

For Each o In Worksheets("Sheet1").Shapes
    MsgBox o.Name
Next o

DropDownsオブジェクトの非表示のWorksheetコレクションメンバーもあり、これを繰り返すことができます。これにより、Formsツールバーから挿入されたアイテムは検出されますが、Control Toolboxツールバーから挿入されたアイテムは検出されません。

0
barrowc