Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル売上台帳をつくりたい
記事No171677
投稿日: 2016/12/13(Tue) 18:47
投稿者yk
解決済: ON
OS:windows10
Access Version:365を使っています。

ACCESSを使って売上台帳を作っているものです。
まったくはじめてACCESSを触っている超初心者です。

いろいろなサイトや本を買って、じぶんなりに作り上げてみたのですが、どうしてもうまくいかず、こちらに投稿させてもらいました。
どうぞよろしくお願いいたしますm(__)m

作りたいもの
1.顧客が来店した際、いくら使ったかが、わかる一覧
2.そのためにつくったもの
  テーブル(顧客情報T、来店記録帳Tとその内訳T)
  フォーム(上記の来店記録帳Tとその内訳Tをサブフォーム入りのフォームにした)
  クエリ (その日一日の売り上げが計算できるもの)
3.フォームとサブフォームに 自動で連番が取れるように規定値にNz(Dmax("[フィールド名]","テーブル名")+,1)を記入


うまくいかない部分
サブフォームにデータを入力していく途中で、自動連番が起動してしまう。
とりあえず無視して、データを最後まで入力終わらせ、すでに起動した自動連番の番号を 正しいものに修正すると、また入力していないのに次のセルにあたらしい自動採番がとられてしまう。


希望
最後のデータを入力してエンターキー(もしくはタブキー)をおして、新しい番号を採番するセルにきたときに、自動採番してほしい。

どうぞよろしくお願いいたしますm(__)m

タイトルRe: 売上台帳をつくりたい
記事No171678
投稿日: 2016/12/14(Wed) 00:32
投稿者hatena
解決済: ON
> 3.フォームとサブフォームに 自動で連番が取れるように規定値にNz(Dmax("[フィールド名]","テーブル名")+,1)を記入
> 
> 
> うまくいかない部分
> サブフォームにデータを入力していく途中で、自動連番が起動してしまう。
> とりあえず無視して、データを最後まで入力終わらせ、すでに起動した自動連番の番号を 正しいものに修正すると、また入力していないのに次のセルにあたらしい自動採番がとられてしまう。

「既定値」プロパティの仕様です。
新規レコードで入力する前に表示される値(既定値)を設定するものですので。

> 希望
> 最後のデータを入力してエンターキー(もしくはタブキー)をおして、新しい番号を採番するセルにきたときに、自動採番してほしい。

既定値プロパティは削除して、フォームの更新前処理で代入するようにします。

Private Sub Form_BeforeUpdate(Cancel As Integer)

    Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1

End Sub

タイトルRe^2: 売上台帳をつくりたい
記事No171680
投稿日: 2016/12/14(Wed) 19:59
投稿者yk
解決済: ON
hatena さま

アドバイスありがとうございます!!

近日中に、早速やってみたいと思います。

その後、状況をお知らせしたいと思います。

よろしくお願いいたしますm(__)m

> > 3.フォームとサブフォームに 自動で連番が取れるように規定値にNz(Dmax("[フィールド名]","テーブル名")+,1)を記入
> >
> >
> > うまくいかない部分
> > サブフォームにデータを入力していく途中で、自動連番が起動してしまう。
> > とりあえず無視して、データを最後まで入力終わらせ、すでに起動した自動連番の番号を 正しいものに修正すると、また入力していないのに次のセルにあたらしい自動採番がとられてしまう。
>
> 「既定値」プロパティの仕様です。
> 新規レコードで入力する前に表示される値(既定値)を設定するものですので。
>
> > 希望
> > 最後のデータを入力してエンターキー(もしくはタブキー)をおして、新しい番号を採番するセルにきたときに、自動採番してほしい。
>
> 既定値プロパティは削除して、フォームの更新前処理で代入するようにします。
>
> Private Sub Form_BeforeUpdate(Cancel As Integer)
>
> Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1
>
> End Sub

タイトルRe^3: 売上台帳をつくりたい
記事No171682
投稿日: 2016/12/16(Fri) 09:39
投稿者hatena
解決済: ON
前回の回答の訂正です。

Private Sub Form_BeforeUpdate(Cancel As Integer)

    If Me.NewRecord Then
        Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1
    End If

End Sub

新規レコードのときのみ採番するように訂正しました。

フォームの更新前処理(Form_BeforeUpdate)は新規レコードをすべて入力後、レコード保存をするときに発生します。

新規レコードで入力を始めたときに採番したい場合は、挿入前処理がいいでしょう。

Private Sub Form_BeforeInsert(Cancel As Integer)

        Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1

End Sub

挿入前処理は新規レコードでしか発生しないので、新規レコードチェックは不要です。

タイトルRe^4: 売上台帳をつくりたい
記事No171684
投稿日: 2016/12/20(Tue) 19:38
投稿者yk
解決済: ON
hatenaさま

アドバイスありがとうございます、、、、、
早速記入をしてみたのですが、採番自体すら、うまくできませんでした、、、、

更新前処理や挿入前処理など(VBAというのでしょうか?)、そもそもがわかっていないみたいです^^;

もう少しお時間ください。
hatenaさまが いわんとしてるところがわかるように、もうちょっと勉強しなおし、また結果かきたいとおもいます、、、、

m(__)m
> 前回の回答の訂正です。
>
> Private Sub Form_BeforeUpdate(Cancel As Integer)
>
> If Me.NewRecord Then
> Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1
> End If
>
> End Sub
>
> 新規レコードのときのみ採番するように訂正しました。
>
> フォームの更新前処理(Form_BeforeUpdate)は新規レコードをすべて入力後、レコード保存をするときに発生します。
>
> 新規レコードで入力を始めたときに採番したい場合は、挿入前処理がいいでしょう。
>
> Private Sub Form_BeforeInsert(Cancel As Integer)
>
> Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1
>
> End Sub
>
> 挿入前処理は新規レコードでしか発生しないので、新規レコードチェックは不要です。

タイトルRe^5: 売上台帳をつくりたい
記事No171685
投稿日: 2016/12/20(Tue) 20:15
投稿者hatena
解決済: ON
> 更新前処理や挿入前処理など(VBAというのでしょうか?)、そもそもがわかっていないみたいです^^;

フォームのデザインビューで、プロパティシートのイベントタブをクリックすると、

レコード移動時
読み込み時
クリック時
・・・

とリストが出ます。その中の「挿入前処理」のドロップダウンリストから[イベント プロシージャ]を選択してビルドボタン[...]をクリックします。

すると、VBAウィンドウが開き、


Private Sub Form_BeforeInsert(Cancel As Integer)

End Sub

と自動で記述されています。そこに、下記のようにコードを1行挿入します。

Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.フィールド名.Value = Nz(Dmax("[フィールド名]","テーブル名"))+1
End Sub

メニューの[デバック]-[*****のコンパイル]をクリックします。
(*****はプロジェクト名)

[ファイル]-[*****の上書き保存]をクリックします。

後はフォームを閉じて、開き直して、新規レコードで入力をしてください。
自動で採番されるはずです。

タイトルRe^6: 売上台帳をつくりたい
記事No171686
投稿日: 2016/12/21(Wed) 17:34
投稿者yk
解決済: ON
hatenaさま
とても丁寧でわかりやすい手順をおしえていただき、ありがとうございました。
早速記入してみたのですが、、、、やはり反応してくれません、、、、、、

フォーム内にある、自動採番してもらいたいテーブルのフィールドからつくったテキストボックスを選択し、プロパティのイベントタブから 更新前処理に「イベントプロシージャ」を選び以下の文を記入しております。

Private Sub 利用者メモ内枠F_ID_BeforeUpdate(Cancel As Integer)
Me.利用者メモ内枠F_ID.Value = Nz(DMax("[利用者メモ内枠F_ID]", "利用者メモテーブル内枠F")) + 1
End Sub

参考 フォーム名:利用者メモサブフォーム内枠F
   テーブル名:利用者メモテーブル内枠F
   フィールド名:利用者メモ内枠F_ID

このフィールド(利用者メモ内枠F_ID)は、主キーの代わりに一意性を持たせたいとおもっております。
いまこのフィールドの入ったテーブル(利用者メモテーブル内枠F)を開いてみると、主キーが選べないようになっておりました。

これも変だなという感じがしております、、、、

どうぞよろしくお願いいたしますm(__)m

 

タイトルRe^7: 売上台帳をつくりたい
記事No171687
投稿日: 2016/12/21(Wed) 17:49
投稿者hatena
解決済: ON
> フォーム内にある、自動採番してもらいたいテーブルのフィールドからつくったテキストボックスを選択し、プロパティのイベントタブから 更新前処理に「イベントプロシージャ」を選び以下の文を記入しております。

テキストボックスの更新前処理ではなく、
フォームの挿入前処理のイベントプロシージャに記述してください。

フォームを選択するには、デザインビューのルーラーの左上の四角の部分をクリックしてください。
あるいは、プロパティシートの上部のコンボボックスで「フォーム」を選択してください。

タイトルRe^8: 売上台帳をつくりたい
記事No171688
投稿日: 2016/12/21(Wed) 20:18
投稿者yk
解決済: ON
hatenaさま

できました!!!!
うれしいです(^^)!!!
おもわずパソコンの前で、声あげてしまいました!!!
助かりました。

本当にありがとうございました!m(__)m

感謝ですm(__)m

いろいろと丁寧に何回もアドバイスいただきまして、本当にありがとうございました!!!

またわからなくなったとき、ここのスレッドに頼ることがあるかもしれませんが、
もしそのとき、余裕がありましたら、またご指導アドバイスよろしくお願いいたします!!!



> > フォーム内にある、自動採番してもらいたいテーブルのフィールドからつくったテキストボックスを選択し、プロパティのイベントタブから 更新前処理に「イベントプロシージャ」を選び以下の文を記入しております。
>
> テキストボックスの更新前処理ではなく、
> フォームの挿入前処理のイベントプロシージャに記述してください。
>
> フォームを選択するには、デザインビューのルーラーの左上の四角の部分をクリックしてください。
> あるいは、プロパティシートの上部のコンボボックスで「フォーム」を選択してください。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る