ACCESS2000を使用しています。
[見積書番号][見積書作成日]などの項目があるテーブルから
クエリー→フォームと作成しました。
やりたいことは
フォームで[見積書番号]が入力されると[見積書作成日]
に自動的に"今日の日付"が入力されるようにしたいのです。
(できれば[見積書番号]が変更された場合も[見積書作成日]が変更されるように)
下記のコードを
フォームの[見積書作成日]の「更新前処理」に書きましたが
エラーは出ませんが、何の反応もありません。
どこが間違っているのでしょうか?
VBAはあまり詳しくないのでアドバイスお願いいたします。
Private Sub 見積書作成日_BeforeUpdate(Cancel As Integer)
If [見積書番号] <> Null Then
[見積書作成日] = Date
ElseIf [見積書番号] <> OldValue Then
[見積書作成日] = Date
Else
End If
End Sub
No.3ベストアンサー
- 回答日時:
> 「見積書番号は必須です」が出てきて消えず、ちょっと大変でした。
失礼しました(汗)
見積書番号を空欄にしても特にMsgBoxを出さなくて構わないのでしたら、
以下のようになります;
Private Sub 見積書番号_BeforeUpdate(Cancel As Integer)
If IsNull([見積書番号]) = False Then '前回のTrueから変更
'以下、前回「Else」以降に記述したものと同じコード
If IsNull([見積書番号].OldValue) = True Then
[見積書作成日] = Date
ElseIf [見積書番号] <> [見積書番号].OldValue Then
If MsgBox("見積書作成日も変更しますか?", vbOKCancel, "確認") = vbOK Then
[見積書作成日] = Date
End If
End If
End If
End Sub
> マクロボタンで入力するとうまくいきませんでした。
マクロ(VBA含む)で値を更新した場合は、更新前/更新後イベントは発生しないので、
強制的に呼び出してやる必要があります。
コマンドボタンのコードもVBAかと思いますので、そちらのコードで値の代入を行った
後に「Call 見積書番号_BeforeUpdate(False)」を追加して下さい。
(引数への「False」指定は必須です)
コマンドボタンで入力を行った場合にも、見積書作成日が入力されると思います。
こんな感じです;
Private Sub 新規ID入力_Click()
'確認メッセージでOKを選択すると見積書番号を入力
If MsgBox("新規の見積書番号を入力します。", vbOKCancel, "確認") = vbCancel Then Exit Sub
[見積書番号] = Nz(DMax("[見積書番号]", "見積書"), 0) + 1
'見積書番号の更新前イベントを呼び出します
Call 見積書番号_BeforeUpdate(False)
End Sub
DexMachinaさん、ありがとうございました!
おかげさまでマクロボタンからの[見積書番号] の入力でも[見積書作成日]が表示されるようになりました。
ボタンによる見積書最新番号の入力はマクロやフォームを使って苦労して設定しましたが、VBAを使えばこんなに簡単にできるのですね。
でも私にはまだまだむずかしいです。
No.2
- 回答日時:
> どこが間違っているのでしょうか?
・Nullかどうかの判定には、No.1の方の回答にもあるように「IsNull関数」を使用します。
ご質問のように「○○<>Null」にすると、○○がNull以外であってもTrueではなく
Nullが返されるため、条件が満たされないことになり、ご質問のように処理もされず
エラーも出ないことになります。
・「見積書番号の入力・編集時に今日の日付を入力」なら、イベントの設置先は
「見積書作成日_BeforeUpdate」ではなく「見積書番号_~」です。
(個人的には更新後イベント(AfterUpdate)への設置をお薦め)
・「OldValue」でコントロールの更新前の値を取得するなら、「○○.OldValue」とする
必要があります。(「OldValue」だと、変数扱いされます)
なお、OldValueの値はレコード保存しないと更新されないため、見積書番号を編集
後、保存しないまま再度上書きすると、予想外の結果になる場合があります。
(可能なら、更新後イベントでのレコード保存をお薦め)
(タイプミスしたものなどが変数扱いされるのを防ぐには、コード最上部にある
「Option Compare Database」の次に「Option Explicit」と記述しておきます。
また、新規作成時に自動でこの一文を追加させるには、VBE画面のメニューで
「ツール(T)→オプション(O)」を選択し、「編集」タブの「変数の宣言を強制する」の
チェックをオンにしておきます)
・「If ~ ElseIf ~」の構文が、多分やりたいことの通りになっていないと思います。
(現状のコードが仮に動いたとして、ElseIfが実行されるのは「入力済の番号を
削除(Null)にした場合」になるかと・・・)
以下、修正をかけたコードです(見積書番号が必須と想定);
Option Compare Database
Option Explicit
Private Sub 見積書番号_BeforeUpdate(Cancel As Integer)
If IsNull([見積書番号]) = True Then
'見積書番号が削除された場合に更新できなくします。
'(MsgBoxでOKクリック後、Escキーを押すと元の値に戻ります)
MsgBox "見積書番号は必須です。"
Cancel = True
Else
'見積書番号が入力された場合
If IsNull([見積書番号].OldValue) = True Then
'新規入力(=OldValueが空)時は今日の日付を即入力
[見積書作成日] = Date
ElseIf [見積書番号] <> [見積書番号].OldValue Then
'別の番号で上書きした場合は更新するか確認
If MsgBox("見積書作成日も変更しますか?", vbOKCancel, "確認") = vbOK Then
[見積書作成日] = Date
End If
End If
End If
End Sub
この回答への補足
DexMachinaさん、ご丁寧にありがとうございました。
>Nullかどうかの判定には「IsNull関数」を使用します。
>イベントの設置先は「見積書番号_~」です。
はい。勉強になりました。ありがとうございました。
教えていただいたコードを入れてみましたが、"お試し"で入れた「見積書番号」を消そうとすると
「見積書番号は必須です」が出てきて消えず、ちょっと大変でした。
あとはやはりAlexSunsのところに書いたのと同じようにマクロボタンで入力するとうまくいきませんでした。
No.1
- 回答日時:
こんな感じですかね
※テキスト書きなので試していません
Private m_見積書番号 As Variant
Private Sub 見積書番号_GotFocus()
m_見積書番号 = Nz([見積書番号], vbNullString)
End Sub
Private Sub 見積書番号_AfterUpdate()
If Not IsNull([見積書番号]) Then
If IsNull([見積書作成日]) Then
[見積書作成日] = Date
Else
If Nz([見積書番号], vbNullString) <> m_見積書番号 Then
[見積書作成日] = Date
End If
End If
End If
End Sub
あと便利な機能として、
「見積書作成日」のプロパティ→「データ」→「規定値」
規定値プロパティに「=Date()」と設定すると今日の日付がデフォルト表示されます
この回答への補足
AlexSunsさん、さっそくの回答ありがとうございました。
教えていただいたとおりコードを書きましたがなかなかうまくいかず悩んでいましたがやっと原因がわかりました。
実は「見積書番号」は手入力ではなく、「通し番号の一番新しい番号+1」をマクロボタン(値の代入)を作って入力させるようにしているのです。
このボタンを使うと今までどおり無反応でしたが手入力で「見積書番号」を入れると希望どおり今日の日付が「見積書作成日」に入るようになりました。
この点はもうしょうがないのでしょうか?
それから
Private m_発出番号 As Variant
というのは必要なのでしょうか?どこに書いたらいいのかわからずコンパイルエラーが出るのではずしたのですが、特に問題なく動いてるような気がしてますが・・・
> 規定値プロパティに「=Date()」と設定すると
はい、こちらの方は別に項目で使用しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
仕入先から見積書をもらったの...
-
見積内容などに了承してもらう...
-
見積もりを断る返事は出すもの...
-
物置移設依頼受けるべき?
-
上司から業者から出た見積を0.7...
-
見積書の有効期限について
-
2社から同じ見積り依頼が来た...
-
他社の見積もりを代筆するのは...
-
見積書、受注書、契約書、に「...
-
見積書の「不良率」、「利管費...
-
見積書の発行日時変更は一般的...
-
お見積もりとご見積もり
-
「○月度」という表現は正しいで...
-
1LDKのアパートの電気のアンペ...
-
ツインを2名で宿泊した時の領収書
-
私は商社で営業してるのですが...
-
謄本の抹消事項下線の記載期間
-
取引先への海外出張経費の請求...
-
いまどき手書きの指定請求書用...
-
救急搬送車に同乗した帰りのタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
仕入先から見積書をもらったの...
-
見積内容などに了承してもらう...
-
見積もりを断る返事は出すもの...
-
見積書の「不良率」、「利管費...
-
見積書、受注書、契約書、に「...
-
上司から「これExcelで打ち出し...
-
金型の数え方
-
webデザイナーの方、LPの修正費...
-
1年前の日付で見積書を発行して...
-
上司から業者から出た見積を0.7...
-
見積書の有効期限について
-
他社の見積もりを代筆するのは...
-
2社から同じ見積り依頼が来た...
-
見積書の発行日時変更は一般的...
-
お見積もりとご見積もり
-
皆さんなら交渉しますか?
-
見積もり書をEXELで作ったら突...
-
P/Iとは何の略?
-
ビジネスに詳しいかた教えてく...
-
見積書をエクセルで作成時に連...
おすすめ情報