0

我有以下代码:

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 了,所以我可能会犯一些简单的错误,我非常感谢任何指导。

谢谢!

4

2 回答 2

4

问题是您在分配对象变量时需要使用Set关键字:

'Change this line:
RR = Sheet90.Range("AA25:AA46")

'To be this instead:
Set RR = Sheet90.Range("AA25:AA46")
于 2013-09-04T22:28:18.293 回答
1

老虎的解决方案绝对可以解决您的错误。

由于您正在寻找一些帮助/指导,我想给您一些关于使用组合框的额外提示,这些提示太多了,无法发表评论,所以这里是:

用一个语句清除组合框(而不是使用循环):ComboBox1.Clear

此外,假设您的区域未填充公式等,您可以使用该SpecialCells 方法返回该区域中的非空白单元格,从而避免检查空白值 ( 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
于 2013-09-05T03:03:39.203 回答