我是VBA的新手,并且已经将各种示例和教程中的代码整合在一起。我知道这将意味着我的代码是可怕的和低效的,但我正专注于让事情立即开始工作并学习以后清理。
我的任务涉及到让“地址管理员”为每日电子邮件任务存储可修改的收件人列表。我创建了一个userform作为管理器,它可以正常添加文件(用户填写文本框和点击添加,项目添加到列表框和工作簿中的相关工作表),删除工作正常(用户选择项目)从列表框中,单击“删除”,从列表框和源表中删除项目,并重新填充列表。)
我可以自由添加和删除项目,我的程序的其余部分与列表正确交互,但由于某种原因,我找不到源代码的奇怪问题。当我创建要测试的文件时,我为每个包含收件人列表的选项卡添加了2个电子邮件地址。我可以添加收件人,它们完美地显示出来,我也可以毫无问题地删除它们。当我尝试删除最后两个条目之一(无论它们是什么)时会出现问题我将得到运行时错误381 - 无效的属性数组索引。
调试器指出我正好在以下代码的已加星标部分,这是我用来填充列表的代码。只要每个条目有两个以上的条目,它就可以正常工作。一旦删除了最后两个条目中的一个,就会发生运行时错误,除非我去手动向源表单添加第二个条目,否则我甚至无法打开用户表单。我确信我错过了一些简单的东西,但我非常感谢你们的任何帮助。
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
答案 0 :(得分:1)
Me.MultiPage1(0).FS4listbox.List = rng.Value
在单个单元格范围内使用Value
不会生成数组,只会生成一个值。如果List
需要一个数组,那么您需要检查输入范围以查看它是否是单个单元格,然后使用(例如)Array()
E.g。 - 把它放在一个函数中:
Function GetList(rng As Range)
GetList = IIf(rng.Count = 1, Array(rng.Value), rng.Value)
End Function
用法:
Me.MultiPage1(0).FS4listbox.List = GetList(rng)