» Accessのブログ記事

見積ナンバーを入力するテキストボックスの更新前処理イベントを利用して、既に入力済みの見積ナンバーであるか否かをチェックした二重入力を防ぐ。
無視して続行するかどうかを選択するバージョン。

Private Sub 見積ナンバー_BeforeUpdate(Cancel As Integer)

    Dim msg As String
    Dim varV As Variant

    msg = "この氏名の社員は既に入力済みです。このまま入力を続けますか?"
    varV = DLookup("[見積ナンバー]", "T_見積", "[見積ナンバー] ='" & Me.見積ナンバー & "'")

    If Not IsNull(varV) Then
        Select Case MsgBox(msg, 17)
            Case 1
                Cancel = False
            Case Else
                Cancel = True
                Me.Undo
        End Select
    Else
        Cancel = False
    End If

End Sub

見積ナンバーを入力するテキストボックスの更新前処理イベントを利用して、既に入力済みの見積ナンバーであるか否かをチェックした二重入力を防ぐ。

Private Sub 見積ナンバー_BeforeUpdate(Cancel As Integer)

    Dim msg As String
    Dim varV As Variant

    msg = "この見積ナンバーは既に入力済みです。"
    varV = DLookup("[見積ナンバー]", "T_見積", "[見積ナンバー] ='" & Me.見積ナンバー & "'")

    If Not IsNull(varV) Then

       If vbOK = MsgBox(msg, 16) Then

         Cancel = False
         Me.Undo

    End If

  Else

    Cancel = False

  End If

End Sub

[AA-456-444]の様な文字列からハイフォンを取り除いて[AA3456444]の様にする。

具体的には[AA-456-444]と入力した物をAA3456444として検索したかった。
しかし、レポートには[AA-456-444]と表示したいので、入力はハイフォン有りでする必要があった。

で、フォームでフィールドAに[AA-456-444]と入力すると、自動的に同時でフィールドBに[AA3456444]という文字列も保存する。

つまり、フィールドAの更新後処理でReplace関数を用いて次の様にする。

Private Sub 番号_AfterUpdate()
  If IsNull(図面番号) Then
  Exit Sub
  End If
 [番号ハイフォンなし] = Replace([番号], "-", "")
End Sub

今回はハイフォンの除去だが、これで文字列の置換が出来る。


フォームのコントロールソースに、

=DSum("[小計]","Q_外注費明細","[Q_外注費明細]![見積親2ID]=[見積ID]")

としてデータがないNULLの時、0(ゼロ)と表示させるには、

=Nz(DSum("[小計]","Q_外注費明細","[Q_外注費明細]![見積親2ID]=[見積ID]"),0)

とする。


フォームA(単票)にサブフォームB(データシート)をつけている。
サブフォームBにデーターを入力し、その数値の合計の計算結果をフォームAのテキストボックスに表示する。

この場合、その結果を反映させるためには、フォームAを再クエリする必要がある。

キーボードからなら、[Ctrl]+[F9]であるが、これを自動で行うために、サブフォームBのプロパティー「挿入後処理」「更新後処理」「削除確認」で、次の様なイベントプロシージャを呼び出す。

 Me.Parent.Requery

これで更新は当然うまくいった。

しかし、その後フォーカス(カーソル)が最初のレコードのトップに移動してしまう。
フォームAは単票式なので、5ページ目とか10ページ目かを更新しても必ず1ページ目の最初のテキストボックス(フィールド)に移動してしまう。

なぜかはわからないが、これでは使い勝手が悪すぎるので対策をする必要がある。
で、

Private Sub Form_AfterInsert()
    Dim RecNum As Integer
    RecNum = Me.Parent.CurrentRecord

    Me.Parent.Requery

    Me.Parent.SetFocus
    DoCmd.GoToRecord , , acGoTo, RecNum
    Me.Parent.次のテキストボックス.SetFocus
End Sub

これでうまく行った。

「更新後処理」「削除確認」も同様でOK。(^_^)v


KUMAOの押入TOP

  • Total : 85639
  • Today :81
  • Yesterday : 194
  • 7days:1404
  • now:0

カレンダー

2012年5月
« 4月    
 123456
78910111213
14151617181920
21222324252627
28293031  

カテゴリー

最近のコメント

アーカイブ

年間アーカイブ

Twitter

Get Adobe Flash player