使用VBA在Access 2013中按顺序添加多个条目

时间:2015-05-13 13:39:00

标签: ms-access-2013

我是一个相当新的访问,我无法弄清楚如何完成添加多个新条目/行的任务。我的VBA经验很少,但我在寻求帮助之前尝试解决问题。

以下是设置:我们的数据库将是一个问题跟踪数据库,我已经解决了大部分表格,唯一的问题是一次添加多个单位。

例如,我有一个名为tblUnit的表,其中包含ID,序列号,程序集(型号),SoftwareRevision,HardwareRevision,RevNotes,Notes和Buyer的列。

在我创建的表单中,为了向该表添加条目,我有一个额外的未绑定文本框列为数量。

我想要发生的是使用下面的VBA代码按钮。除了序列号之外,所有列都是相同的(我还没有弄清楚如何做到这一点)。

我在想一个表单可以工作,你填写所有信息,然后输入要添加的单位的数量/数量,然后是批次中的第一个序列号。然后它将添加X个新条目,序列号在第一个之后递增。

这是迄今为止的代码

Private Sub cmdSubmitUnit_Click()

Do While Me.QtyUnitAdd > 0  

DoCmd.RunCommand acCmdSaveRecord  

Me.SerialNumber = Me.SerialNumber + 1  

Me.QtyUnitAdd = Me.QtyUnitAdd - 1  

Loop  

End Sub

每个数量的序列号增加一个,但不是我希望的方式。如果我从序列号696001开始并输入数量100,我最终只有一个序列号为696200的记录,而不是100个记录编号为696001到696200.我尝试使用NewRecord命令补充代码为了说清楚我在每个循环中都需要一个新记录,但是在第一个循环之后我得到一个错误,即没有输入部件号。我猜这是拉动或保持之前输入的数据有用的地方,但我没有找到允许我这样做的代码。

如果有可能的话,我将非常感谢您在纠正我的代码以完成我的目标方面给出的任何建议或帮助。

2 个答案:

答案 0 :(得分:0)

好的,经过大量的研究和反复试验后,我得到了答案。我已经发布了以下代码,以防对其他人有用,或者有人提出改进建议。

Private Sub cmdSubmitUnit_Click()

DoCmd.RunCommand acCmdSave


Do Until Me.QtyUnitAdd = 0

DoCmd.GoToRecord , , acNewRec
Me.SerialNumber = Me.SerialNumber + Me.QtyUnitAdd.Value - 1
Me.QtyUnitAdd = Me.QtyUnitAdd - 1
DoCmd.RunCommand acCmdSave

Loop

End Sub

Private Sub PartNumber_AfterUpdate()
  PartNumber.DefaultValue = Chr(34) & PartNumber.Value & Chr(34)
End Sub

Private Sub DateBuilt_AfterUpdate()
  DateBuilt.DefaultValue = Chr(35) & DateBuilt.Value & Chr(35)
End Sub
Private Sub Notes_AfterUpdate()
  Notes.DefaultValue = Chr(34) & Notes.Value & Chr(34)
End Sub
Private Sub SerialNumber_AfterUpdate()
  SerialNumber.DefaultValue = Chr(34) & SerialNumber.Value & Chr(34)
End Sub

答案 1 :(得分:0)

我找到了另一种似乎运行良好的方法,利用临时变量。通过向表单中的每个字段添加AfterUpdate事件,根据输入的值设置TempVars,表单代码的提交现在如下所示:     Private Sub cmdSubmitUnits1_Click()

txtQuantity1.DefaultValue = Chr(34) & txtQuantity1.Value & Chr(34)



   Set TestDB21 = CurrentDb
   Set rstUnits = TestDB21.OpenRecordset("tblUnits")


rstUnits.AddNew
rstUnits("SerialNumber").Value = Me.txtSerialNumber.Value
rstUnits("PartNumber").Value = TempVars!Assembly
rstUnits("SoftwareID").Value = TempVars!SWRev
rstUnits("HardwareID").Value = TempVars!HWRev
rstUnits("Notes").Value = Me.txtNotes.Value
rstUnits("DateBuilt").Value = Me.txtDateBuilt.Value
rstUnits.Update


Do Until Me.txtQuantity1.Value = 1

Me.txtSerialNumber.Value = Me.txtSerialNumber.Value + 1
Me.txtQuantity1.Value = Me.txtQuantity1.Value - 1
txtSerialNumber.DefaultValue = Chr(34) & txtSerialNumber.Value & Chr(34)

rstUnits.AddNew
rstUnits("SerialNumber").Value = Me.txtSerialNumber.Value
rstUnits("PartNumber").Value = TempVars!Assembly
rstUnits("SoftwareID").Value = TempVars!SWRev
rstUnits("HardwareID").Value = TempVars!HWRev
rstUnits("Notes").Value = Me.txtNotes.Value
rstUnits("DateBuilt").Value = Me.txtDateBuilt.Value
rstUnits.Update

Loop

DoCmd.Close
DoCmd.OpenForm "frmCreateUnit"

通过在删除所有临时变量的表单本身上添加一个on close事件,这似乎工作得更好。