2015-07-21 463 views
0

我正在开发Excel和VBA中的程序,并且当我尝试更改列表框的选定属性时出现运行时错误380。Excel VBA - listbox.selected属性导致错误

该属性由excel电子表格上的列确定,其中包含True或False值。我已将这些单元格的内容打印到控制台,并可以确认true/false值是否正常工作,但是当我尝试将这些值分配给我的listbox.selected属性时,出现错误。

的功能是以下,任何帮助或建议将是该线路上发生多appreciated.Error:

ElementListBox.Selected(计数 - 1)= TaskListSheet.Cells(TaskListCellRef(任务,ref.Row)+数+ 1,TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included))值

Public Function LoadTier2SubTaskList(ByVal Task As Single, ByRef ElementListBox As Control) 

ElementListBox.Clear 
WorklistComboBox.Clear 


Dim count As Single 
Dim finished As Boolean 
Dim TaskListSheet As Worksheet 
Set TaskListSheet = TBSheet 
finished = False 

For count = 1 To 50 

Next count 

count = 1 
Dim TaskString As String 

Do While finished = False 
TaskString = TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.ElementOfWork)).Text 
If TaskString = vbNullString Then 
finished = True 

ElseIf TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Tier)).Value = 2 Then 

ElementListBox.AddItem (TaskString) 
ElementListBox.Selected(count - 1) = TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value 
Debug.Print (TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value) 
End If 

count = count + 1 
Loop 

End Function 
+0

项目数count = 1到50'循环是干什么的?刚刚点数?然后计数回到1?所以你的'listbox.selected(count-1)'是'listbox.selected(0)'? – Raystafarian

+0

什么是TaskListCellRef,ref,TaskBreakdownColunRefs和TaskBreakdownColumnHeaders?他们似乎没有被定义为在程序中的任何地方设置。 –

+0

与循环的好处,不知道为什么那里,但删除它没有任何区别。 TaskListCellRef等是在代码中的其他地方设置的单元引用。他们正在引用正确的单元格,我使用调试器测试过, –

回答

0

你需要将该值转换为一个布尔值?

ElementListBox.Selected(count - 1) = CBool(TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value) 

让我们开始消除一些潜在的原因!

这是行不通的?

ElementListBox.Selected(count - 1) = true 

试试这个(更换您的代码count=1Loop)...

count = 1 
Dim itemCount as Integer 
itemCount = 1 
Dim TaskString As String 

Do While finished = False 
TaskString = TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.ElementOfWork)).Text 
If TaskString = vbNullString Then 
finished = True 

ElseIf TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Tier)).Value = 2 Then 

ElementListBox.AddItem (TaskString) 
ElementListBox.Selected(itemCount - 1) = CBool(TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value) 
Debug.Print (TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value) 
itemCount = itemCount +1 
End If 

count = count + 1 
Loop 

注意添加ITEMCOUNT变量来算的listbox

+0

不幸,不幸运行 –

+0

哪条线会出错?此外,看这里似乎暗示有这个错误的相当多的原因... http://stackoverflow.com/questions/1979281/what-c​​auses-this-error-runtime-error-380-invalid-property-值 –

+0

该行,ElementListBox.Selected(count - 1)= TaskListSheet.Cells(TaskListCellRef(Task,ref.Row)+ count + 1,TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included))值 –