Access VBA批量生成ListBox对应记录报表报错求助
Access窗体批量打开ListBox对应记录报表的VBA解决方案
问题背景
我有一个带ListBox的Access窗体,用户可通过组合框添加记录至ListBox。需要编写VBA脚本遍历ListBox中所有值,打开对应记录的报表。单条记录能实现,但批量操作报错:原代码报“method or data member not found”,修改控件引用后仍有问题,尝试ItemData属性也未成功。
原错误代码
Private Sub btnSearchMany_Click() Dim i As Long With Me.List12 If .ListCount = 0 Then MsgBox "Brak wybranych wpisow.Dodaj wpisy, wybierajac je z listy i wciskajac przycisk dodaj.", vbCritical Exit Sub End If For i = 0 To .ListCount - 1 DoCmd.OpenReport "rptKKsy", acViewReport, , "[tblKKsy].[KKS]='" & .List12(i) & "'" Next i End With End Sub
说明:List12为用户添加记录的列表框(后续会重命名),rptKKsy为目标报表,tblKKsy为存储数据的表,KKS为表中字段。
修改后的尝试代码
Private Sub btnSearchMany_Click() Dim i As Long Dim lValue As String With Me.List12 For i = 0 To .ListCount - 1 If .ListCount = 0 Then MsgBox "Brak wybranych wpisow.Dodaj wpisy, wybierajac je z listy i wciskajac przycisk dodaj.", vbCritical Exit Sub End If Next i End With If i = Len(lValue) > 2 Then DoCmd.OpenReport "rptKKsy", acViewReport, , "[tblKKsy].[KKS]='" & .ItemData(lValue) & "'" End If End Sub
正确实现代码
Private Sub btnSearchMany_Click() Dim i As Long Dim strKKS As String With Me.List12 ' 先判断列表框是否为空 If .ListCount = 0 Then MsgBox "没有选择任何记录,请从列表中添加记录后再点击按钮。", vbCritical Exit Sub End If ' 遍历列表框所有项 For i = 0 To .ListCount - 1 ' 获取当前项的KKS值(单列列表框直接用ItemData,多列则用.List(i, 列索引),索引从0开始) strKKS = .ItemData(i) ' 打开对应报表,匹配KKS字段 DoCmd.OpenReport "rptKKsy", acViewReport, , "[tblKKsy].[KKS]='" & strKKS & "'" Next i End With End Sub
关键修正点
- 原代码在
With Me.List12块内错误使用.List12(i),应改用.ItemData(i)获取列表框项的值(单列场景);如果是多列列表框,需用.List(i, 列索引)定位到KKS所在列。 - 修改后的尝试代码逻辑混乱:空列表判断被放在循环内部,变量
lValue未赋值,If i = Len(lValue) > 2的逻辑完全错误,需将空判断移到循环前,规范变量使用。 - 若KKS字段为数字类型,需去掉过滤条件中的单引号,改为:
"[tblKKsy].[KKS]=" & strKKS。
内容的提问来源于stack exchange,提问作者Vokun
相关产品推荐
相关产品推荐

