Listbox.List(i) 错误 - 未找到方法或数据成员
Listbox.List(i) error - Method or Data Member not Found
我正在尝试使用多 select 列表框,以便用户可以 select 清理他们已完成的任务并将其标记为已完成。在遍历列表时,我想查看该项目是否被 selected,如果是,则创建一条记录。当我尝试使用 .List
方法来 return 来自特定行的数据时,我不断收到找不到方法的错误。
我最初没有加载 forms 2.0 库,所以我认为这是问题所在,但这并没有解决问题。我也进行了压实和修复,认为这可能只是一个奇怪的侥幸,但这也没有帮助。
'loop through values in listbox since its a multi-select
For i = 0 To listCleaningTasks.ListCount - 1
If listCleaningTasks.Selected(i) Then
'add entry to cleaning log
Set rsCleaning = CurrentDb.OpenRecordset("SELECT * FROM cleaning_log;")
With rsCleaning
.AddNew
.Fields("cleaning_task_id") = Form_frmCleaning.listCleaningTasks.List(i)
.Fields("employee_id") = Me.cmbUser
.Fields("cleanroom_id") = Me.cmbCleanroom
.Fields("cleaning_time") = Now()
.Update
.Close
End With
End If
Next i
有什么想法吗?
使用.listCleaningTasks.ItemData(r)
从索引指定的行中提取绑定列值。
使用 .listCleaningTasks.Column(c, r)
提取列和行索引指定的值。
只打开和关闭记录集一次,外循环。
真的只需要遍历选定的项目,而不是整个列表。
Dim varItem As Variant
If Me.listCleaningTasks.ItemsSelected.Count <> 0 Then
Set rsCleaning = CurrentDb.OpenRecordset("SELECT * FROM cleaning_log")
With rsCleaning
For Each varItem In Me.listCleaningTasks.ItemsSelected
`your code to create record
...
.Fields("cleaning_task_ID") = Me.listCleaningTasks.ItemData(varItem)
...
Next
.Close
End With
Else
MsgBox "No items selected.", vbInformation
End If
June7的解当然是对的。如果您需要存储 selected 项目然后稍后调用并重新 select 列表框项目,请考虑使用此函数 [=12= 获取逗号分隔的 selected 项目]
Public Function GetSelectedItems(combo As ListBox) As String
Dim result As String, varItem As Variant
For Each varItem In combo.ItemsSelected
result = result & "," & combo.ItemData(varItem)
Next
GetSelectedItems = Mid(result, 2)
End Function
将其存储到 table 的一列中,并在读回后将其传递给此子:
Public Sub CreateComboBoxSelections(combo As ListBox, selections As String)
Dim N As Integer, i As Integer
Dim selectionsArray() As String
selectionsArray = Split(selections, ",")
For i = LBound(selectionsArray) To UBound(selectionsArray)
With combo
For N = .ListCount - 1 To 0 Step -1
If .ItemData(N) = selectionsArray(i) Then
.Selected(N) = True
Exit For
End If
Next N
End With
Next i
End Sub
这将使您的列表框中的 select 项与以前一样。
我正在尝试使用多 select 列表框,以便用户可以 select 清理他们已完成的任务并将其标记为已完成。在遍历列表时,我想查看该项目是否被 selected,如果是,则创建一条记录。当我尝试使用 .List
方法来 return 来自特定行的数据时,我不断收到找不到方法的错误。
我最初没有加载 forms 2.0 库,所以我认为这是问题所在,但这并没有解决问题。我也进行了压实和修复,认为这可能只是一个奇怪的侥幸,但这也没有帮助。
'loop through values in listbox since its a multi-select
For i = 0 To listCleaningTasks.ListCount - 1
If listCleaningTasks.Selected(i) Then
'add entry to cleaning log
Set rsCleaning = CurrentDb.OpenRecordset("SELECT * FROM cleaning_log;")
With rsCleaning
.AddNew
.Fields("cleaning_task_id") = Form_frmCleaning.listCleaningTasks.List(i)
.Fields("employee_id") = Me.cmbUser
.Fields("cleanroom_id") = Me.cmbCleanroom
.Fields("cleaning_time") = Now()
.Update
.Close
End With
End If
Next i
有什么想法吗?
使用.listCleaningTasks.ItemData(r)
从索引指定的行中提取绑定列值。
使用 .listCleaningTasks.Column(c, r)
提取列和行索引指定的值。
只打开和关闭记录集一次,外循环。
真的只需要遍历选定的项目,而不是整个列表。
Dim varItem As Variant
If Me.listCleaningTasks.ItemsSelected.Count <> 0 Then
Set rsCleaning = CurrentDb.OpenRecordset("SELECT * FROM cleaning_log")
With rsCleaning
For Each varItem In Me.listCleaningTasks.ItemsSelected
`your code to create record
...
.Fields("cleaning_task_ID") = Me.listCleaningTasks.ItemData(varItem)
...
Next
.Close
End With
Else
MsgBox "No items selected.", vbInformation
End If
June7的解当然是对的。如果您需要存储 selected 项目然后稍后调用并重新 select 列表框项目,请考虑使用此函数 [=12= 获取逗号分隔的 selected 项目]
Public Function GetSelectedItems(combo As ListBox) As String
Dim result As String, varItem As Variant
For Each varItem In combo.ItemsSelected
result = result & "," & combo.ItemData(varItem)
Next
GetSelectedItems = Mid(result, 2)
End Function
将其存储到 table 的一列中,并在读回后将其传递给此子:
Public Sub CreateComboBoxSelections(combo As ListBox, selections As String)
Dim N As Integer, i As Integer
Dim selectionsArray() As String
selectionsArray = Split(selections, ",")
For i = LBound(selectionsArray) To UBound(selectionsArray)
With combo
For N = .ListCount - 1 To 0 Step -1
If .ItemData(N) = selectionsArray(i) Then
.Selected(N) = True
Exit For
End If
Next N
End With
Next i
End Sub
这将使您的列表框中的 select 项与以前一样。