2015-05-13 35 views
0

我對訪問相當陌生,而且在解決如何完成添加多個新條目/行的任務時遇到困難。我有很少的VBA經驗,但我試圖在尋求幫助之前解決問題。使用VBA在Access 2013中按順序添加多個條目

這是設置:我們的數據庫將是一個問題跟蹤數據庫,並且我已經制定了大多數表單,唯一的問題是一次添加多個單元。

例如,我有一個名爲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的記錄,而不是一百個記錄編號爲696001至696200的記錄。我嘗試使用NewRecord命令補充代碼爲了清楚我在每個循環中都需要一個新記錄,但是在第一個循環之後,我收到一個錯誤消息,說明沒有輸入零件編號。我猜這是拉或保留以前輸入的數據將有用,但我還沒有找到一個代碼,可以讓我這樣做。

如果有任何建議或協助糾正我的代碼以實現我的目標,甚至可能,我將不勝感激。

回答

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 
0

我找到了另一種方法,似乎運作良好,利用臨時變量。通過形式設置根據所輸入的值TempVars的添加更新後事件的各個領域,表單代碼的submittion現在看起來是這樣的: 私人小組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" 

通過添加在關閉事件去除所有臨時變量的形式本身,這似乎更好地工作。