2016-07-14 6 views
0

更新:
私はそれを働かせました。ここで私はこれを行うために使用されるコードは次のとおりです。MS-Access 2013フォームの新しいフィールド値ごとにフィールドを1から1ずつ増やします。

Private Sub Amount_GotFocus() 

If Not IsNull(DLookup("[Line#]", "[t_Line#]", "[PO#] = [PO#].Value")) Then 
    [CustPOLine#].Value = DMax("[CustPOLine#]", "t_CUST_PO_LineItems", "[CustPO#] = [CustPO#].Value") + 1 
Else 
    [CustPOLine#].Value = 1 
End If 

End Sub 

私は、フォームのテキストボックスに1と同一のPO番号を持つテーブル内の任意の値があるかどうかを確認するためのDLookupを使用しています。 nullを返す場合、Line#の値を1に設定します.Nullでない場合、DMax関数を使用して、PO#がフォームに入力された行番号と等しいLine#の最大値を取得します。

+0

はLineItemsにテーブルのオートナンバー型カストPOのIDですか? –

+0

@random_answer_guyはい、私は自分のポストを一番下に編集しました – Michael

+0

おそらく番号/長整数に変更して、番号付けを制御できるようにしてください。自動番号をリセットしようとすると問題が発生する –

答えて

2

サブフォームのBefore Insertイベントで、新しい番号を割り当てます。

Private Sub Form_BeforeInsert(Cancel As Integer) 

    Dim CustPO As String ' (!) 
    Dim MaxLineNr As Long 

    CustPO = Me.Parent![CustPO#] 
    Debug.Print "CustPO# = " & CustPO ' Ctrl+G shows output 

    MaxLineNr = Nz(DMax("[CustPOLine#]", "t_CUST_LineItems", _ 
         "[CustPO#] = '" & CustPO & "'"), 0) 
    Debug.Print "MaxLineNr = " & MaxLineNr 

    Me![CustPOLine#] = MaxLineNr + 1 

End Sub 

どのように動作しますか?

現在の[CustPO#]の既存の[CustPOLine#]の最大値が必要です。後者はメインフォーム(Me.Parent)から読み込まれます。そのフィールドはサブフォームにまだ埋め込まれていないためです(新しいレコードはまだ存在しません)(私は思う)。

がない場合、DMax()はNULLを返します。これはNz()によって0に変更されます。

次に、最も高い既存の番号に1が追加されます。

+0

私は正確な変数名と一致するように編集しました(前に2つのフォームを作成していたときに、それらのいくつかが混ざっていました)。したがって、私は[CustPOine#] = Nz(DMax([CustPoline#]、 "t_CUST_PO_LineItems"、_ "[CustPO#] ="&Me.Parent![Cust PO#])、0) "Amount"セクションのいずれかのキーを押すと、エラー "3464:条件式のデータ型の不一致"が表示されます。 – Michael

+0

@Michael:コードを分割しましょう。編集を参照してください。エラーはまだありますか?どのデバッグ出力にイミディエイトウィンドウが表示されますか? 'CustPO#'は数値(長整数型)フィールドですか? – Andre

+0

はい、同じエラーが再び発生しています。 "MaxLineNr = Nz(DMax(" [CustPOLine#] "、" t_CUST_PO_LineItems "、" [CustPO#] = "&CustPO)、0)"また、 "Form_BeforeInsert"サブが呼び出されています金額の値を編集するには、それはなぜですか?私はタブを押すか、タブ順で最後のフィールドに入力すると思ったのですか? – Michael

1

Access 2010以降では、変更前データマクロを使用して行アイテム番号を割り当てるオプションもあります。このアプローチでは、行が実際にコミットされたときにのみ番号が割り当てられるため、Andreのフォームベースのメソッドに加えて、行がバッチ更新やインポートなどの他の(フォームベースではない)メカニズムによって追加されるケースをカバーするために使用できます、など。

BeforeChange.png

関連する問題