从列表框中删除项目 – 运行时错误381

我是VBA的新手,一直在网上围绕各种示例和教程编写代码。 我意识到这将意味着我的代码是丑陋的,效率低下的,但是我正在专注于让事情现在能够正常工作,并在稍后学习清理。

我被困在我的任务的一部分,涉及到做一个“地址pipe理器”来存储日常电子邮件任务的可修改的收件人列表。 我创build了一个用户窗体作为pipe理器,它可以很好地添加文件(用户填充文本框,点击添加,项目添加到工作簿中的列表框和相关工作表),删除工作正常点(用户select项目从列表框中单击删除,从列表框和源表中删除项目,并重新填充列表。)

我可以自由地添加和删除项目,我的程序的其余部分与列表正确交互,但由于某种原因,有一个奇怪的问题,我找不到源。 当我创build要testing的文件时,我向包含收件人列表的每个选项卡添加了2个电子邮件地址。 我可以添加收件人,他们显示完美,我也可以删除他们没有问题。 当我尝试删除最后两个条目之一(不pipe它们是什么)时,会出现问题。我将得到一个运行时错误381 – 无效的属性数组索引。

debugging器指向我以下代码的星号部分,这是我用来填充列表的代码。 只要有两个以上的条目,它就可以正常工作。 只要最后两个条目之一被删除,发生运行时错误,我甚至不能打开用户窗体,除非我去手动添加第二个条目到源表单。 我敢肯定,我错过了一些简单的事情,但是我真的很感谢你们的帮助。

Sub FillFS4ListBox() Dim rng As Range Me.MultiPage1(0).FS4listbox.Clear With wb.Sheets("FS4") Set rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) **Me.MultiPage1(0).FS4listbox.List = rng.Value** End With End Sub 

 Me.MultiPage1(0).FS4listbox.List = rng.Value 

在单个单元格范围内使用“ Value ”不会产生数组,只是一个单一的值。 如果List需要一个数组,那么你将需要检查你的input范围,看它是否是一个单元格,然后使用(例如) Array()来包装该单元格的值。

例如 – 把这个function:

 Function GetList(rng As Range) GetList = IIf(rng.Count = 1, Array(rng.Value), rng.Value) End Function 

用法:

 Me.MultiPage1(0).FS4listbox.List = GetList(rng)