不明白为什么我收到'下标超出范围'

时间:2015-10-19 20:17:21

标签: excel vba excel-vba

我一直在研究这个代码,其中我有一个具有listboxes和comboboxes mashup的userform。到目前为止,我已经填充了列表框但由于某些原因我遇到了组合框(combobox1combobox2)的问题。

我已设法填充combobox1的下拉列表,并且从该列表中我想要“过滤”已经通过“名称管理器”调出的命名范围。命名范围称为Range_Books

Range_Books引用工作表table48或VBA代码BOOKS中的Sheet7中的两列和可变数量的行。下面的代码是我尝试完成我所解释但仍然失败的最新迭代。

我原本试图在没有Worksheets("Sheet7").的情况下直接调出范围,因为命名范围不在特定工作表上,但我仍然不确定哪个是调用范围的最佳方法,如果是是我问题的根源。我没有worksheets(" ")直接调出范围,这就是为什么我对此感到困惑。

可能需要注意的是,初始化userform时,它会打开辅助工作簿以填充列表框。初始化之后,可以在为combobox1选择值之前完成各种操作,从而激活我尝试创建的函数。在关闭用户窗体之前,此辅助工作簿保持打开状态。我之所以提到这一点是因为我不确定辅助工作簿是否会导致范围对象出现问题。自从向用户窗体添加辅助工作簿功能以来,我一直在接受VBA的麻烦。

Private Sub ComboBox1_Change()

Dim count As Integer
Dim i As Integer

count = Worksheets("Sheet7").Range("Range_Books").Rows.count

For i = 0 To count

    If Worksheets("Sheet7").Range("Range_Books").Cells(i, 1) = ComboBox1.Value Then
        ComboBox2.AddItem (Worksheets("Sheet7").Range("Range_Books").Cells(i, 2))
    End If

Next i

End Sub

4 个答案:

答案 0 :(得分:0)

For i = 0 To count
...
Cells(i, 1)

此时,i = 0.第0行不存在。

i = 0更改为i = 1

答案 1 :(得分:0)

您需要以For i = 1 to count开头,或将范围更改为.Cells(i+1,1)...

另外,请确保您指的是正确的表格。我认为这就是问题的关键所在。

如果您的指定范围位于标签名为“图书”的工作表中,则您需要改为使用count = Worksheets("Books").Range("Range_Books").Rows.count

如果您想使用“Sheet7”参考,可以使用count = Sheet7.Range("Range_Books").Rows.count

答案 2 :(得分:0)

使用此

Private Sub ComboBox1_Change()

Dim count As Integer
Dim i As Integer
Dim ws As WorkSheet

Set ws = Sheets("Sheet7")
count = ws.Range("Range_Books").Rows.count

For i = 1 To count

    If Worksheets("Sheet7").Range("Range_Books").Cells(i, 1) = ComboBox1.Value Then
        ComboBox2.AddItem (Worksheets("Sheet7").Range("Range_Books").Cells(i, 2))
    End If

Next i

End Sub

答案 3 :(得分:0)

谢谢大家的帮助,非常感谢!我的最终工作代码如下。我将所有工作表实例(“Sheet7”)更改为Sheet7。我附上了Excel Objects文件夹树的图片,你可以看到我有Sheet7,我把它命名为“Books”。我的困惑是,工作表(“”)调出了我指定的名称而不是VBA指定的工作表名称。我还在ComboBox1更改时添加了ComboBox2.Clear,重置值而不是堆叠它们。我希望这有助于将来的某些人,并再次感谢帮助我的评论员!

enter image description here

Private Sub ComboBox1_Change()

ComboBox2.Clear

Dim count As Integer
Dim i As Integer

count = Sheet7.Range("Range_Books").Rows.count

For i = 1 To count

    If Sheet7.Range("Range_Books").Cells(i, 1) = ComboBox1.Value Then
        ComboBox2.AddItem (Sheet7.Range("Range_Books").Cells(i, 2))
    End If

Next i

End Sub