VBA记录不会更新正确的信息
问题描述:
所以我有这个简单的代码循环通过附加到表的列表框。它在列表框中找到所选项目并更新我的“操作日志”表中的相应记录集。我的问题是,即使它说lstAllGroups.Column(1, i)
是持有正确的价值;它没有更新记录。我已经在调试器中介绍了这一点,它添加了一切,但groupNum。VBA记录不会更新正确的信息
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
答
您的代码使用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
通知时,我问从列表框中行已不存在的价值,访问只是让我空毫无怨言---它不抛出一个错误消息。
我认为你的代码受到这个问题的影响。但是,我不确定这是否是唯一的因素。它在我看来像你的代码将添加一行tblActionLog与GroupNum和GroupName列表框中的每一行的值。然后将最后一行添加到表中(对应于不存在的列表框行),其中GroupNum和GroupName。
嘿HansUp,对不起,如果我不清楚。除了groupnum之外,GroupName还会添加一个问题。 GroupName是我的列表框中的第一个列,GroupNum是第二个列。 – SaladSnake 2014-11-14 18:23:55
仍然不知道我明白。你是说每一行添加到* tblActionLog *为* GroupNum *为空? – HansUp 2014-11-14 18:27:52
是的,我停止了调试器,它显示lstAllGroups.Column(1,i)保持正确的值,它只是没有插入到具有该值的记录,而是它为空。奇怪的是每隔一个更新都没有问题。 – SaladSnake 2014-11-14 18:31:26