我有以下代码:
Dim RR As Range
RR = Sheet90.Range("AA25:AA46")
For i = 1 To ComboBox1.ListCount
'Remove an item from the ListBox.
ComboBox1.RemoveItem 0
Next i
Dim R As Range
For Each R In RR.Cells
If Len(R.Value) > 0 Then
Sheet90.ComboBox1.AddItem (R.Value)
End If
Next R
显然,它不起作用。
我正在尝试使用已定义数组的非空值填充组合框。
Excel VBA不支持我的方法,其错误消息不太有帮助。
它说,
Run-time error '91'
Object variable or With block variable not set
我认为这是某种词汇范围问题,但对于我的生活,我无法理解。所有内容都包含在一个私有SUB中,奇怪的是,当我运行时:
RR = Sheet90.Range("AA25:AA46")
For i = 1 To ComboBox1.ListCount
'Remove an item from the ListBox.
ComboBox1.RemoveItem 0
Next i
它清除了这个盒子。
如果我Dim RR As Range
,一切都会崩溃。
我没有写过多年的vba,所以我可能会犯一些简单的错误,我真的很感激任何指导。
谢谢!
答案 0 :(得分:4)
问题是在分配对象变量时需要使用Set
关键字:
'Change this line:
RR = Sheet90.Range("AA25:AA46")
'To be this instead:
Set RR = Sheet90.Range("AA25:AA46")
答案 1 :(得分:1)
由于您正在寻求一些帮助/指导,我想给您一些关于使用组合框的额外提示,这些提示太多了,无法发表评论,所以这里有:
使用一个语句清除组合框(而不是使用循环):ComboBox1.Clear
此外,假设您的范围未填充公式等,您可以使用SpecialCells
method返回该范围内的非空单元格,从而避免额外的检查空白值(Len(r.Value) > 0
)的步骤。
Dim RR As Range
Dim r As Range
Set RR = Range("AA25:AA46").SpecialCells(xlCellTypeConstants)
ComboBox1.Clear
For Each r In RR.Cells
ComboBox1.AddItem r
Next