質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

3130閲覧

VBAを用いて新規レコードを登録するフォームを開いたときに空のレコードを非表示にしたい。

yume

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/07/05 00:47

お世話になっております。
access2003です。

フォームAからコマンドのClickイベントでフォームB(単票形式)の新規レコードを開くコードを下記のようにVBAにて作成しました。

DoCmd.OpenForm "開くフォーム名", , , , acFormAdd Forms.開くフォーム名.ID = Format(Now(), "yyyymmddhhnnss")

少し前まではスクロールしても空のレコードには移動せずに、新規レコードだけの登録ができていた(ような気がしている)のですが、気がついたら、開いた新規レコードを登録するフォームBにてマウスをスクロールすると空のレコードが表示されてしまうようになりました。
(もともとなっていたのに気がついていなかっただけかもしれませんが・・・)

ちなみに、フォームBのプロパティの"追加の許可"の項目は"いいえ"にしてあります。

初歩的なことで申し訳ありませんが、非表示にする方法をご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DoCmd.OpenForm "開くフォーム名", , , , acFormAdd
というように新規追加モード(acFormAdd)で開くと、デザインビューで"追加の許可"を"いいえ"にしてあっても"はい"に書き換えられます。追加が許可されてなければ、新規追加できないので当然ですが。

開いて入力した直後に"追加の許可"を"いいえ"にすればいいでしょう。

vba

1DoCmd.OpenForm "開くフォーム名", , , , acFormAdd 2Forms!開くフォーム名.ID = Format(Now(), "yyyymmddhhnnss") 3Forms!!開くフォーム名.AllowAdditions = False

ただし、これだと入力が確定して(レコード保存されて)しまうので、それでは具合が悪い場合は、

vba

1DoCmd.OpenForm "開くフォーム名", , , , acFormAdd 2Forms!開くフォーム名.ID.DefaultValue = Format(Now(), "yyyymmddhhnnss")

と規定値に設定しておいて、フォームの更新後処理で追加の許可を「いいえ」にすればいいでしょう。

vba

1Private Sub Form_AfterUpdate() 2 Me.AllowAdditions = False 3End Sub

投稿2019/07/05 03:07

hatena19

総合スコア33729

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/07/05 03:41 編集

ACCESS2003が手元に無いので確認できず、質問させてください。 後半の対応の場合、フォームを開いた直後にホイール動作した場合に、ホイール動作によって更新後イベントが発生して、レコード移動動作はキャンセルされるというような動作になるのでしょうか? またそうだとすると、その状態でも更新は可能なんでしょうか?
hatena19

2019/07/05 05:01

DefaultValue を設定してるだけですので、まだ、レコード入力されていないので、次の新規レコードがない状態です。ですので、ホイールでもキーボード操作(PageDown等)でも移動はできません。 ユーザーが入力をしたときにはじめて次の新規レコードが生成されるのでレコード移動可能ですが、そこで移動しようとすると、更新後イベントが発生しますので、そこで AllowAdditions = False すると新規レコードへ移動できなくなります(新規レコード自体がなくなるので)。
hatena19

2019/07/05 05:11

ただし、ユーザーが入力後は、ホイール等でレコード移動しようとするとレコード保存されてしまうので、それを防ぐには下記のリンク先のような対策が必要ですね。 レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにするhttps://hatenachips.blog.fc2.com/blog-entry-162.html
sazi

2019/07/05 05:26 編集

リンク先は回答前に参照していました。 APIを使用していないので、敷居は低いと思いましたが、仕様を変えるという事になるのと、API使うといっても、手順さえ間違わなければ良いかと思って、マウスホイールを無効化する方での回答としたんですよね。 hatenaさんところに回答として良いTipsがあった場合は、当人からの回答の方が良いと考えているので、回答しないか、別案がある場合にしか回答しないようにしてます。 類似があるのを知らないで回答してることはあるかもしれませんが。
yume

2019/07/05 05:47 編集

sazi様 hatena19様 回答ありがとうございます。 hatena様に回答いただいた方法、どちらでもできました。 そして、hatena様のブログ、当方の検索能力が足りなかったと恥ずかしいかぎりです。(よく参考にさせていただいております。) 確かに、保存コマンドのみで保存の対応したほうが意図しないレコードの保存が避けられて良さそうです。 DBのメンテなどは私がやりますが、実際にデータを入力していくのは他の人なので意図しない余計なレコードができてしまうというのを防げるというのもありがたいです。 今回の回答とTipsの両方を参考にしつつ対応したいと思います。
guest

0

新規登録用ですから、レコード移動しちゃうと当然そうなりますね。
Access2003ということなので、コードで制御する必要があります。
以下が参考になるかと思います。
Access:フォームでマウスのホイール操作を無効にして意図しないレコード移動を回避する方法
A
ccess2007以降だとマウスホイールでレコード移動は発生しませんので、バージョン変更するのも方法の一つです。

投稿2019/07/05 01:04

編集2019/07/05 01:13
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問