三流君のソースコード置き場

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

よく検索されるキーワード: [VBA]/ [VBS]/ [CreateObject]/ [Excel]/ [ADO]


Access VBA データの重複チェックをDcount関数と更新前処理を使用して行う おっさんのデバッグ動画です。一部でも参考となればうれしいです。

https://www.youtube.com/watch?v=Irr_9wx6CAY




標準モジュールにDCountを利用したチェック関数を追加する


Option Compare Database
Option Explicit


'0.商品コードを受け取り
'1.マスターに、受け取ったコードがあるかチェック
'2.明細、履歴にダブりがあるか、チェックする

'商品コードを受け取りをチェック結果をエラーならTrueで返す関数
Public Function chk商品コード(str商品コード As String) As Boolean

    Dim nCNT As Integer
    
    '1.マスターに、受け取ったコードがあるかチェック
    'そもそも、その商品コードが、マスターにあるかチェック
    nCNT = DCount("商品コード", "T_メニュー一覧", "[商品コード] = '" & str商品コード & "'")
    'データが0なら、見つからなかったので、マスター登録エラー
    If nCNT = 0 Then
        MsgBox str商品コード & "が見つかりません、マスターを確認してください"
        chk商品コード = True  'チェックエラー true
        Exit Function 'ここでチェックを抜ける
    End If
    
'2.明細、履歴にダブりがあるか、チェックする
    '履歴に(明細に)、同じ商品があった時、エラーにする
    nCNT = DCount("商品コード", "T_注文履歴", "[商品コード] = '" & str商品コード & "'")
    'データが0以上なら、重複エラー
    If nCNT > 0 Then
        MsgBox str商品コード & "は重複してます、再入力"
        chk商品コード = True  'チェックエラー true
        Exit Function 'ここでチェックを抜ける
    End If

    'エラーじゃないので反対のFalseを返す
    chk商品コード = False  'チェックOK False

End Function


次に、F_注文履歴の商品コード

商品コードのチェックをしたかったので、
商品コードの更新前処理にコードを追加する

Option Compare Database
Option Explicit

Public dbsTeishokuya As Database
Private Const formnameTEST = "F_注文履歴"

Public Sub 商品コード_BeforeUpdate(Cancel As Integer)

    'そもそも、本当に変更されたか、チェックする
    If Me.商品コード.Value = Me.商品コード.OldValue Then
        'MsgBox "ここ、同じでした"
        Exit Sub '同じときは、チェックしない
    End If

    'チェック関数を通して(リターン値でもらって)TrueならキャンセルもTrue
    Cancel = chk商品コード(Me.商品コード)

End Sub

Private Sub 商品コード_DblClick(Cancel As Integer)
    DoCmd.OpenForm "F_メニュー一覧", , , , , , "F_注文履歴"
End Sub



F_一覧 も 選択後に、チェックしたかったので、関数を呼ぶように変更する


Option Explicit
Option Compare Database

Private Sub 選択_Click()
    Const sub_choice As String = "選択_click"
    Dim menucode As String '商品コード
    
    menucode = Me.商品コード.Value

    If chk商品コード(menucode) = True Then
        Exit Sub '↑でエラーだったら、↓下のセット処理&閉じる処理をしたくないので、
        'やりたくないので、途中で抜ける
    End If

    '↑正常なら、親フォームにコードをセットして、選択フォームを閉じる
    Forms(Me.OpenArgs).商品コード.Value = menucode  '親フォームにデータをセット
    
    DoCmd.Close acForm, "F_メニュー一覧"  '選択フォームを閉じる

End Sub



https://www.youtube.com/watch?v=Irr_9wx6CAY

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)