【发布时间】:2012-12-13 01:04:57
【问题描述】:
所以我有一个内置的系统,它设置了一些不同的标志等等,但我想做的一件事是获取临时表的内容并将其发送到另一个用于追踪。我正在尝试使用插入循环来做到这一点,但我根本无法弄清楚如何使其按预期工作。
Private Sub Form_Load()
DoCmd.SetWarnings False
DoCmd.OpenQuery ("qryDeleteEmail")
Dim db As Object
Dim rst As Object
Dim test As Object
Set db = Application.CurrentDb
Set rst = db.OpenRecordset("qryDate")
Set test = db.OpenRecordset("tblEmailTemp")
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox ("No delinquent accounts. No email will be generated.")
Me.Refresh
DoCmd.Close acForm, "qryDate", acSaveNo
DoCmd.CancelEvent
Else
rst.MoveFirst
Do Until rst.EOF
rst.Edit
rst!NeedsEmail = 1
rst.Update
rst.MoveNext
Loop
'DoCmd.Requery
'rst.Close
DoCmd.RunMacro ("StagingTable")
test.MoveFirst
Do Until test.EOF
CurrentDb.Execute "Insert Into EmailTracking (Account, ExpirationDate)" & _
"Values ('" & AccountName & "', '" & ExpirationDate & "')"
test.MoveNext
Loop
test.Close
rst.MoveFirst
Do Until rst.EOF
rst.Edit
rst!EmailSent = 1
rst.Update
rst.MoveNext
Loop
'DoCmd.Requery
rst.Close
DoCmd.RunMacro ("Close")
'DoCmd.OpenQuery ("qryDeleteEmail")
End If
Exit Sub
End Sub
现在发生的事情是将临时表的第一条记录复制两次。例如,我有一个帐户名 A 和一个帐户名 S,但不是插入 A 的记录和 S 的记录,而是简单地插入 A 两次。
任何帮助将不胜感激!
【问题讨论】:
-
您的代码缩进没有意义,我编辑了它。在这小部分代码中仍然有很多没有意义的地方。
-
好吧,我将是第一个承认我在这方面很糟糕但仍在努力学习的人。不过,欣赏编辑。它确实使它更易于阅读。
-
宏“StagingTable”在做什么?此外,您还没有初始化 AccountName 和 ExpirationDate。我建议将
Option Explicit放在模块的顶部。你可能想做的是test!AccountName和test!ExpirationDate。 -
stagingtable 宏将信息拉到一个表格中,供我的电子邮件模块阅读。基本上,发生的事情是第一个循环将条目标记为需要电子邮件。 stagingtable 宏然后为我的电子邮件模块提取标记的条目。宏运行后,条目将被标记为已发送电子邮件。那部分工作得很好。我不是 100% 确定您所说的初始化是什么意思,以及在什么上下文中 test!AccountName 语句将被使用。我仍在整体学习 VBA,所以如果我表现得像个白痴,我深表歉意。
标签: vba ms-access loops recordset