我一直在研究这个代码,其中我有一个具有listboxes和comboboxes mashup的userform。到目前为止,我已经填充了列表框但由于某些原因我遇到了组合框(combobox1
和combobox2
)的问题。
我已设法填充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
答案 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,重置值而不是堆叠它们。我希望这有助于将来的某些人,并再次感谢帮助我的评论员!
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