2

VBA を使用して、別のシートの値の行 (列ではない) の内容をコンボボックスに入力したいと考えています。List を行の範囲に割り当てると、最初の値しか表示されないため、Excel は範囲の列を持つことを主張していると思います。だから、私はアイテムを追加するようなことを試みていました:

Private Sub ComboBox2_GotFocus()

 Dim i As Integer
 Dim myArray As Variant

 myArray = Worksheets("data").Range("A4:PB4").Value

 For i = LBound(myArray) To UBound(myArray)
  Me.ComboBox2.AddItem myArray(i)
 Next

End Sub

2 つの問題。それは配列ではなく、範囲だと思います。また、add を使用する場合は毎回クリアする必要がありますが、何とか同じルーチンで ComboBox2.Clear を使用すると、ロードされた後でもクリアされますか? したがって、何も表示されません:(

アイデアはありますか?

4

5 に答える 5

1

これはトリックを行うように見えました:

Private Sub ComboBox2_GotFocus()

  myArray = WorksheetFunction.Transpose(Worksheets("data").Range("A4:PB4"))
  With Me.ComboBox2
   .List = myArray
  End With

End Sub
于 2012-10-31T00:36:13.137 に答える
0

あなたが犯した唯一の間違いは、転置せずに myArray を「Range」型に変更したことです

    myArray = WorksheetFunction.Transpose(Worksheets("data").Range("A4:PB4"))
     For each cell in myArray
     Me.combobox2.additem(cell)
    Next
于 2012-10-29T02:32:26.623 に答える
0

おそらく、ここでは配列宣言を避けて、使用しているもののネイティブ形式 (範囲) を使用することをお勧めします。また、コンボボックスにデータを入力する前にメソッドを呼び出すと、clear私にとってはうまくいくようです。クリアしてから再設定します。?

Private Sub Worksheet_Activate()
 Dim i As Integer
 Dim myRange As Range
 ComboBox1.Clear
 Set myRange = Worksheets("data").Range("A4:PB4")
 Dim c As Range
 For Each c In myRange 
  Me.ComboBox1.AddItem c.Value
 Next
End Sub
于 2012-10-29T02:39:57.030 に答える