2

我想使用 VBA 填充来自另一个工作表的行(不是列)值的内容的组合框。如果我将列表分配给行的范围,我只会看到第一个值,所以我猜 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

两个问题。我不认为这是一个数组,它是一个范围。而且,如果我使用 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

您可能希望避免此处的数组声明,而只使用您正在使用的东西的本机格式(范围)。在填充组合框之前调用该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 回答
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

更好的解决方案:

 Private Sub ComboBox1_GotFocus()

  Dim myArray As Variant

  lastcol = Worksheets("data").Range("A4").End(xlToRight).Column
  With Worksheets("data")
   Set SourceRng = .Range(.Cells(4, 1), .Cells(4, lastcol))
  End With
  myArray = WorksheetFunction.Transpose(SourceRng)
  With Me.ComboBox1
   .List = myArray
  End With

 End Sub
于 2012-11-03T13:26:28.657 回答
0

他是解决方案:

Sub PopulateComboBox()
    Dim n As Integer, i, names() As String
    n = WorksheetFunction.CountA(Rows("1:1"))
    ReDim names(n) As String
    For i = 1 To n
        names(i) = Cells(1, i)
        NameForm.ComboBox1.AddItem names(i)
    Next i

End Sub
于 2018-09-29T22:32:50.990 回答