我想創建一個基於財政年度並自動前進的記錄數字...類似:2015001、2015002、2015003、2015004; 2016001、2016002等
我的表格 [Projects] 中已經有一個 [FiscalYr] 欄位(計算資料類型),基於以下表達式:
IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate])).
[EntryDate] 字段是日期/時間字段,預設值為 Date()。這正如我所希望的那樣工作。
有沒有辦法將 [FiscalYr] 號碼放在以 001 開頭的 3 位號碼的前面,並根據之前的記錄遞增 1,並在開始時將號碼重新設置為 001每個新的財政年度?我們的財政年度從 10 月 1 日開始,到 9 月 30 日結束。
我希望無論資訊是在表格[項目]中輸入還是在表格[項目表格]中輸入,都會產生數字。我不希望它僅在表單中輸入資訊時產生。我在網上看到一些帖子建議執行此類操作的最佳方法是使用 Before Change 宏,但是我可以找到的大多數示例都基於某個日期的宏代碼的重要部分,並且我已經得到了日期問題已解決(我認為)。
如果這比使用我現有的 [FiscalYr] 欄位更容易,我可以使用從 [EntryDate] 建立會計年度並同時建立數字的巨集。我只是一個臨時的 Access 用戶,所以如果我說的是胡言亂語,我很抱歉 - 我想我知道的足夠危險了。
非常感謝,安德里亞
2015 年 12 月 9 日更新:
我已經放棄宏觀的想法了。
使用 Scottgem 部落格上的提示(https://scottgem.wordpress.com/2009/11/25/sequential-numbering/),我已經能夠啟動並運行順序編號系統,但我仍然在努力爭取在新的財政年度開始時將數字重新設置為 1。我不確定問題是否在於我如何產生我的財政年度價值,或者完全是其他問題。
這是我所得到的:
表格名稱:項目
在專案中,我有以下與此問題相關的欄位:
- ProjectNo:數字 - 長整數
- 序列:數字 - 長整數
- EntryFiscalYr:計算出的-長整數;表達式如下:
IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
- EntryDate:日期/時間;預設值:日期()
表格名稱:項目表格
在我的專案表單中,我有以下控制項:
- Sequence:文字框,控制來源為Projects表中的Sequence字段,設定為不可見
CreateProjNo:按鈕,點選事件:
Private Sub CreateProjNo_Click() Me.Sequence = Nz(DMax("[Sequence]", "Projects"), 0) + 1 DoCmd.RunCommand acCmdSaveRecord End Sub
ProjectNo:文字框,資料控制項來源:
=[EntryFiscalYr] & Format([Sequence],"000")
這按我想要的方式顯示:2016001、2016002 等。
我已經嘗試了 Scottgem 部落格上的程式碼的各種迭代,將 EntryFiscalYr 欄位帶入 DMax 語句中,以查看序號是否應在當前會計年度繼續遞增或在新會計年度重新開始,但我的嘗試都沒有在工作中。
我努力了:
Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”,”[EntryFiscalYr]) = “ &(Me.[EntryFiscalYr])),0)+1
Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”, ” [EntryFiscalYr] = ‘“ & Me.[EntryFiscalYr] & “’”),0)+1
我也嘗試過用Me.[txtEntryFiscalYr]
代替Me.[EntryFiscalYr]
.這些嘗試都沒有奏效。
我猜測我的問題可能是由於 EntryFiscalYr 為每筆記錄產生的方式造成的,但我不知道如何解決這個問題。我嘗試過使用 EntryDate 產生的日期,這對於日曆年來說效果很好,但重要的是根據會計年度獲取此日期,並在每個新會計年度開始時重新設定它。
另外,專案表單中產生的 ProjectNo 不會更新到專案表中的 ProjectNo 字段,但我的理解是這一點。它是否正確?
任何有助於使其在財政年度正常工作的幫助將不勝感激。
謝謝!
答案1
這是我最終確定的程式碼。它使用我的表單中的一個按鈕。希望這可以幫助其他可能遇到相同問題的人。
Private Sub CreateProjNo_Click()
Me.EntryFiscalYr = IIf(Month([EntryDate]) >= 10, Year([EntryDate]) + 1, Year([EntryDate]))
Me.Dirty = False
If IsNull(Me.Sequence) Then
Me.Sequence = Nz(DMax("[Sequence]", "Projects", "[EntryFiscalYr] = " & Me.[EntryFiscalYr]), 0) + 1
Me.Dirty = False
End If
End Sub
有關如何獲得此解決方案的更多信息,我建議訪問此鏈接: http://answers.microsoft.com/en-us/office/forum/office_2013_release-access/access-2013-how-do-i-generate-a-record-number/22fa42e1-dd89-4683-b1d0-72bumber/22fa42e1-dd89-4683-b1d0-72bumber12281c