Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


35 / 2243 ツリー ←次へ | 前へ→

【13063】日付+自動採番 NUTKEY 16/9/8(木) 12:32 質問[未読]

【13066】Re:日付+自動採番 亀マスター 16/9/12(月) 22:31 回答[未読]
【13067】Re:日付+自動採番 NUTKEY 16/9/16(金) 15:12 質問[未読]
【13068】Re:日付+自動採番 亀マスター 16/9/17(土) 18:08 回答[未読]
【13069】日付+自動採番 NUTKEY 16/9/19(月) 14:03 お礼[未読]

【13066】Re:日付+自動採番
回答  亀マスター  - 16/9/12(月) 22:31 -

引用なし
パスワード
   連番の取得までは問題ないと思います。

後はこれをデータに反映させる方法ですが、既に提出月のテキストボックスがフォーム中にあると思いますので(なければテーブルの提出月と連結したテキストボックスを作成してください)、提案日_AfterUpdateのイベントで、取得した連番等をテキストボックスに入力してやればいいのです。

具体的には、
提出月 = Format(提案日, "yymm") & Format(連番 +1 , "000")
としてやればいいでしょう。
※連番 + 1 としているのは、そのままだと連番が000からスタートするためです。連番取得の段階で事前に +1しておけば不要です。


とりあえずはこれで表示されると思いますが、実務を考えるといろいろ問題が出てくるかと思います。

まず、提出月のテキストボックスをそのままにしておくと、ここを直接編集されてしまいます。そこで、提出月のテキストボックスでプロパティ設定を編集し、「使用可能」を「いいえ」に、「編集ロック」を「はい」にしておくことで対応します。

また、入力済みの提案日を編集すると、その時点で提出月が再計算され、番号が狂ってしまいます。これを防ぐには、連番を計算・表示させる前に、更新前の日付を調べ、更新前が空白・同じ月・異なる月などの場合分けで対応する必要があるでしょう。

他に、たとえば8月1日、8月10日、8月5日という順で入力した場合、連番はこの順番になります。それで構わないのならいいのですが、日付順にしたいという場合は上記で述べた方法は使えないので、クエリの編集で少々ややこしいSQLを書く必要が出ると思います。

【13067】Re:日付+自動採番
質問  NUTKEY  - 16/9/16(金) 15:12 -

引用なし
パスワード
   亀マスター さん

連絡が遅くなりすいませんでした。

「使用可能」「編集ロック」は実施しました。

日付順に関しては入力日がバラバラなので問題なしです。

また、入力済みの提案日を編集することはないので問題なしです。


Private Sub 提案日_AfterUpdate()
  
Me![提案日] = Format(提案日, "yymm") & Format([連番] + 1, "000")
 
End Sub

と入れたのですがデバックが出てしまいます。

これでは条件がまずいのでしょうか?

そして、連番になってくれません・・・

クエリで入力するとできてはいるのですが、閉じてまた開くと連番ではなくなっています。
これは、亀マスター さんが前回の回答にも書かれたように、
『連番を計算・表示させる前に、更新前の日付を調べ、更新前が空白・同じ月・異なる月などの場合分けで対応する必要があるでしょう。』
に関係があるのでしょうか?


お手数ですが再度教えて下さい。

【13068】Re:日付+自動採番
回答  亀マスター  - 16/9/17(土) 18:08 -

引用なし
パスワード
   >Me![提案日] = Format(提案日, "yymm") & Format([連番] + 1, "000")
これは打ち込んだものと同一でしょうか。

もしそうなら、Me![提案日] は Me![提出月] が正しいのではないでしょうか。

あと、Format([連番] + 1, "000") とありますが、[連番]は何を指しているのでしょうか。
この書き方だと、フォーム中のテキストボックスか何かに「連番」という名前のものがあり、そのデータを拾うことになりますよ。前に示した
連番 = DCount(...
で取得した連番を意味するのであれば、[ ]はつけてはいけません。
それと、勿論このコード中で、連番を先に取得しておく必要があります。流れとしては、 連番取得 → 提出月のテキストボックスに入力 となりますので。


>クエリで入力するとできてはいるのですが
今回私が提示した方法では、クエリは必要ありませんよ。(使ったらダメなわけではないですが)
提出月のテキストボックスに、手動で連番を数えて入力する代わりにVBAで入力しているという状態なので、クエリによる計算は不要です。

>これは、亀マスター さんが前回の回答にも書かれたように、
>『連番を計算・表示させる前に、更新前の日付を調べ、更新前が空白・同じ月・異なる月などの場合分けで対応する必要があるでしょう。』
>に関係があるのでしょうか?
入力日がバラバラで、一度入力したら変更することがないとのことですので、それなら問題はありません。

頑張ってくださいね。

【13069】日付+自動採番
お礼  NUTKEY  - 16/9/19(月) 14:03 -

引用なし
パスワード
   亀マスター さん

提出月が正しかったです。
入力間違いでした・・・

[]もはずしました。

クエリは必要ないのですね・・・
年月表示もFIRSTDAY、LASTDAYも全てクエリでしていました。

もう一度作り直してがんばってみます。

私の質問に回答して頂きありがとうございました。

35 / 2243 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
981868
(SS)C-BOARD v3.8 is Free