Excel VBA - listbox.selected 属性 导致错误
Excel VBA - listbox.selected property causing error
我正在 Excel 和 VBA 中开发一个程序,当我尝试更改选定的 属性 时出现 运行 时间错误 380列表框。
属性 由 excel 电子表格中的一列确定,包含 True 或 False 值。我已经将这些单元格的内容打印到控制台,并且可以确认 true/false 值是否正常工作,但是当我尝试将这些值分配给我的 listbox.selected 属性 时,我得到了一个错误。
功能如下,任何帮助或建议都会在这一行发生appreciated.Error:
ElementListBox.Selected(count - 1) = TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value
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
您需要将该值转换为布尔值吗?
ElementListBox.Selected(count - 1) = CBool(TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value)
让我们开始消除一些潜在的原因!
这个有用吗?
ElementListBox.Selected(count - 1) = true
试试这个(将您的代码从 count=1
替换为 Loop
)...
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
中的项目数
我正在 Excel 和 VBA 中开发一个程序,当我尝试更改选定的 属性 时出现 运行 时间错误 380列表框。
属性 由 excel 电子表格中的一列确定,包含 True 或 False 值。我已经将这些单元格的内容打印到控制台,并且可以确认 true/false 值是否正常工作,但是当我尝试将这些值分配给我的 listbox.selected 属性 时,我得到了一个错误。
功能如下,任何帮助或建议都会在这一行发生appreciated.Error:
ElementListBox.Selected(count - 1) = TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value
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
您需要将该值转换为布尔值吗?
ElementListBox.Selected(count - 1) = CBool(TaskListSheet.Cells(TaskListCellRef(Task, ref.Row) + count + 1, TaskBreakdownColumnRefs(TaskBreakdownColumnHeaders.Included)).Value)
让我们开始消除一些潜在的原因!
这个有用吗?
ElementListBox.Selected(count - 1) = true
试试这个(将您的代码从 count=1
替换为 Loop
)...
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