会計年度に基づいてレコード番号を生成するためのマクロを作成する方法を教えてください。 (アクセス2013)


1

会計年度に基づいて自動的に進むレコード番号を作成したいのですが。 2016001、2016002など

次の式に基づいて、[Projects]テーブルに[FiscalYr]フィールド(計算データ型)が既にあります。

IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate])).  

[EntryDate]フィールドはDate / Timeフィールドで、デフォルト値はDate()です。これは私が望むように働いています。

その[FiscalYr]番号を取得して、001から始まり3つ前のレコードに基づいて1ずつ増加する3桁の番号の前に付けることができます。新しい年度ごとに?私たちの会計年度は10月1日に始まり、9月30日に終わります。

テーブル[プロジェクト]とフォーム[プロジェクトフォーム]のどちらに情報が入力されていても番号を生成したいのですが。情報がフォームに入力された場合にのみ生成されるのではありません。私は、変更前マクロを使用するのが最善の方法であることを示唆するいくつかの投稿をオンラインで見ました。日付の問題が整理された(私は思う)。

既存の[FiscalYr]フィールドを操作するよりも簡単であれば、[EntryDate]からFiscal Yearを作成し、同時に数値を作成するマクロを使用しても問題ありません。私はただのAccessユーザーなので、ちょっとしたことを言っているのであれば申し訳ありません。危険であることを知っていると思います。

どうもありがとう、 アンドレア


更新2015/12/9:

私はマクロの考えをあきらめました。

Scottgemのブログのヒントを使う( https://scottgem.wordpress.com/2009/11/25/sequential-numbering/ )、連番のシステムを稼働させることはできましたが、新しい会計年度の初めに番号を1にリセットすることにはまだ苦労しています。私の会計年度の値をどのように生成しているのか、それともまったく別の問題なのかが問題ではないかどうかわかりません。

これが私が持っているものです:

テーブル名:プロジェクト

プロジェクト内で、私はこの問題に関連して以下の分野を持っています:

  • ProjectNo:number - 長整数
  • シーケンス:数値 - 長整数
  • EntryFiscalYr:算出 - 長整数。式は次のようになります。 IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • EntryDate:日付/時刻。デフォルト値:Date()

フォーム名:プロジェクトフォーム

私のプロジェクトフォームには、以下のコントロールがあります。

  • シーケンス:テキストボックス、コントロールソースはプロジェクトテーブルのシーケンスフィールド、非表示に設定
  • 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がProjectsテーブルのProjectNoフィールドに更新されていません。ただし、これがポイントだと私は理解しています。これは正しいです?

これを会計年度に合わせて正しく機能させるための支援は大歓迎です。

ありがとうございます。


スーパーユーザーへようこそ。これまでに何を試しましたか?
Andi Mohr

こんにちはAndi、これまでに試したことを反映するように質問を更新しました。ありがとうございます。アンドレア
anmarse

私はあなたの質問に答えるのに十分なAccessの知識を持っていませんが、私はあなたのコードを他の人にとって少し読みやすくするためにいくつかのフォーマットを適用しました。
Andi Mohr

回答:


0

これが私がついに決心したコードです。それは私のフォーム内のボタンを使います。これが、同じ問題に苦しんでいる可能性のある他の人々に役立つことを願っています。

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-72b112281c1c

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.