variables在VBA中的范围如何?

我有以下代码:

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 

显然,这是行不通的。

我试图用定义数组的非空值填充combobox。

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

谢谢!

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

 'Change this line: RR = Sheet90.Range("AA25:AA46") 'To be this instead: Set RR = Sheet90.Range("AA25:AA46") 

老虎的解决scheme绝对是你的错误的解决办法。

既然你正在寻找一些帮助/指导,我想给你一些关于使用你的combobox的提示,这些提示太多了,所以在这里写下来:

用一个语句清除combobox(而不是使用循环): 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