VBA记录不会使用正确的信息进行更新

时间:2014-11-14 16:42:13

标签: vba ms-access access-vba

所以我有这个简单的代码循环一个附加到表的列表框。它在列表框中找到所选项目,并在我的"操作日志"中更新相应的记录集。表。我的问题是即使它说lstAllGroups.Column(1, i)保持正确的价值;它没有更新记录。我已在调试器中逐步完成此操作,并添加了所有内容但是groupNum。

        Dim recPicker As String
        Dim recAllPicker As String
        Set db = CurrentDb
        Set RstRecSet = db.OpenRecordset("tblActionLog", dbOpenDynaset)
        'Set RstRecSet = db.OpenRecordset("Select * from tblActionLog Where GroupNum = '" & recAllPicker & "';", dbOpenDynaset)

If chkGrp = True Then

    allGrps = lstAllGroups.ListCount
        For i = 0 To allGrps

            If lstAllGroups.Selected(i) = True Then
            recAllPicker = lstAllGroups.Column(1, i)
                        RstRecSet.AddNew

            RstRecSet("GroupNum").Value = lstAllGroups.Column(1, i)

            RstRecSet("GroupName").Value = lstAllGroups.Column(0, i)

            RstRecSet("ActionItem").Value = txtActionitm.Value

            RstRecSet("GroupNum").Value = recPicker

            RstRecSet("DateClosed").Value = txtDateClosed.Value

            RstRecSet("DateIdentified").Value = txtDateID.Value

            RstRecSet("Analyst").Value = txtAnalyst.Value


            RstRecSet("Comments").Value = txtComments.Value

            RstRecSet.Update
            End If
        Next
Else

1 个答案:

答案 0 :(得分:1)

您的代码使用lstAllGroups.ListCount按索引号访问列表框行。但是,.ListCount从1开始计数,列表框行索引值从0开始。这意味着等效于lstAllGroups.Column(1, lstAllGroups.ListCount)指的是列表框中不存在的行。

这是一个立即窗口示例,希望能够澄清情况。我的列表框包含4行。

? Me.lstUsers.ListCount
 4 
? Me.lstUsers.Column(0, 0) ' <-- first row
46
? Me.lstUsers.Column(0, 3) ' <-- last row
48
? Me.lstUsers.Column(0, 4) ' <-- row which does not exist
Null

请注意,当我从列表框行中请求一个不存在的值时,Access只会给我Null而不会抱怨---它不会抛出错误消息。

我认为您的代码受此问题影响。但是,我不确定这是否是唯一涉及的因素。在我看来,您的代码会为 tblActionLog 添加一行,其中包含列表框每行的 GroupNum GroupName 值。然后在表中添加一个最后一行(对应于不存在的列表框行),其中包含 GroupNum GroupName 的Null。