2017-10-25 8 views
0

プライマリデータがあります(スタティックではなく、他の実行時モジュールで変更される可能性があります) を1つの列に入力してから、プライマリ列の各要素に対して列があります。リストボックスの内容をExcelの別のリストボックス選択に応じて動的に変更する方法 - VBAユーザーフォーム

Aが3番目の要素を持つ場合、列B、CおよびDはさまざまなデータ行を持つ2次列になります。

私は2つのリストボックス1を持っています。& 2。ユーザーがリストボックス1で2番目の要素を選択すると、リストボックス2は "C"列の内容を表示します。

Private Sub ListBox1_Click() 
Dim X As Integer 
Dim vCol As Variant 
Dim srange As Range 
Dim ssheeet As Worksheet 
Set ssheeet = ThisWorkbook.Sheets("Sheet2") 
X = ListBox1.ListIndex 
Me.ListBox1.List = ssheeet.Columns(X + 1).Values* 
      '2nd selection i.e., 2+1 gives 3rd -> "C" column 
End Sub 

Private Sub UserForm_Initialize() 
Dim ssheeet As Worksheet 
Set ssheeet = ThisWorkbook.Sheets("Sheet1") 
Me.ListBox1.RowSource = "Sheet1!A:A" 
End Sub 

クエリ?

Me.ListBox1.List = ssheeet.Columns(X + 1).Valuesは、2番目のリストボックスにダイナミックレンジを与える必要がある場所では機能しません。 ありがとう!

答えて

0

これは動作しなければならない。それは私がこの方法をテストしてみたし、それがにBlank含めたすべての値をプッシュ

Private Sub ListBox1_Click() 
    Dim X As Integer 
    Dim vCol As Variant 
    Dim srange As Range 
    Dim ssheeet As Worksheet 
    Set ssheeet = ThisWorkbook.Sheets("Sheet2") 
    X = ListBox1.ListIndex 

    Dim myArray() as variant 
    myArray = ssheeet.Columns(X + 1).Values 
    Me.ListBox2.List = myArray 
End Sub 

に来るよう

Private Sub ListBox1_Click() 
    Dim X As Integer 
    Dim vCol As Variant 
    Dim srange As Range 
    Dim ssheeet As Worksheet 
    Set ssheeet = ThisWorkbook.Sheets("Sheet2") 
    X = ListBox1.ListIndex 
    Me.ListBox2.RowSource = ssheeet.Columns(X + 1).Address 
End Sub 

をあなたが唯一、Listプロパティに配列をプッシュすることができますListBox2。最初にデータ範囲を決定しない限り、良いものではありません。

+0

1.オブジェクトがこのプロパティまたはメソッドをサポートしていないため、実行時エラー438が発生しています myArray = ssheeet.Columns(X + 1).Values。 2.範囲のことについて、私は "X + 1"列の行数を持っています。例えば、セル(2,2)はX + 1列の行数を返します。助けてください –

関連する問題