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

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

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

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

Access

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

Q&A

解決済

3回答

10047閲覧

Access サブフォームに入力した内容をクリアしたい

techiko

総合スコア10

VBA

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

Access

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

0グッド

1クリップ

投稿2019/09/12 02:57

編集2019/09/12 07:42

初歩的な質問と思いますがよろしくお願いいたします。

サブフォームを含むフォームがあります。
メインフォームにある「クリアボタン」をクリックで
入力した内容をすべてクリアしたいのですが
サブフォーム部分のクリアの仕方がわかりません。

Private Sub コマンド29_Click()

Response = MsgBox("画面をクリアしますか。", _
vbYesNo + vbQuestion + vbDefaultButton1, "受注票")
If Response <> vbYes Then
DoCmd.CancelEvent
SendKeys "{ESC}", False
Exit Sub
End If

Dim ctl As Control

On Error Resume Next

For Each ctl In Me.Controls
With ctl
If .ControlType = acTextBox Or acComboBox Then
.Value = ""
End If
End With
Next ctl
End Sub

現在ここまではできていてメインフォームはすべてクリアになります。
サブフォーム(コンボボックス1,2,テキストボックス)も
クリアしたい場合どのようにしたらいいでしょうか?

windows10、access2019

追記
1(メイン)対多(サブ)の連結フォームです。

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

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

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

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

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

hatena19

2019/09/12 04:21

そのメインフォームとサブフォームはそれぞれ連結フォームでしょうか。非連結フォームでしょうか。 (レコードソースにテーブルかクエリが設定してあるか、空欄になっているか) それによって回答が違ってきますので質問に情報追加してください。 あと、メインフォームとサブフォームの関係についても。通常は一対多のデータの一側のデータをメインフォーム、多側のデータをサブフォームという形で使うのが一般的ですが。
techiko

2019/09/12 07:24

ありがとうございます。 情報不足で申し訳ありません。 1(メイン)対多(サブ)の連結フォームです。
guest

回答3

0

ベストアンサー

連結フォームの場合、フォームのデータはセーブルと直接連結しているので、
データのクリアという発想はなじみません。

入力前に戻すという発想になります。
新規レコードなら、入力前は存在しませんので、レコード削除になります。
既存のレコードの更新なら、入力前に戻す(UnDo)ということになります。

これは一側(メインフォーム)のデータについてです。

多側(サブフォーム)のデータの場合は、複数レコードが対象になりますので、
新規レコードの場合は、一側のデータに結び付くデータの連鎖削除ということになります。
既存レコードの更新の場合は、連結フォームではもとに戻すのは難しいです。
そのため、この場合、通常はワークテーブルを使用する設計にします。

この辺のことを考慮して設計をもう一度見直すべきだと思います。

また、オートナンバーはあくまで、主キーとしてユニークな番号を生成するというのが目的ですので、欠番ができるかどうかを気にするのは適切ではありません。連番が必要なら、主キー(オートナンバー)とは別にそのようなフィールドを用意するのが適切です。
(オートナンバーの欠番を再利用する方法もありますが、あまり適切な方法とはいえないと思います。)

投稿2019/09/12 09:05

hatena19

総合スコア33699

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

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

techiko

2019/09/12 11:09

わかりやすい説明をどうもありがとうございます。 基礎がわかっていないため変な質問で大変失礼いたしました。 主キーを使わず、別のフィールドを作って 削除で対応しようと思います。 ありがとうございました。
sazi

2019/09/13 05:22

@hatena19 さん 更新でundoを引き合いに出しておられますので、それに対応する追加の場合はまだレコードは確定していませんから削除は行えませんよね。 尚、上記のような追加・更新何れでもundoで元に戻せます。
hatena19

2019/09/13 05:35

説明不足を補足すると、 メインレコードのみなら、追加を確定前にUndoすれば追加前に戻ります(つまりレコード削除と同義)。 ただ、メインサブフォーム形式だとサブフォームで入力しようとサブフォームへフォーカスを移動させると、その時点でメインフォームは確定してしまうので、Undoは効かなくなります。 結局、メインサブフォーム形式でUndoを実現するには、メインは非連結、サブはワークテーブルという設計にせざるを得ない、ということになります。
guest

0

フォームやテーブルの情報が少ないので的外れになるかもしれませんが
メインフォームのテーブルとサブフォームのテーブルに対して
リレーションシップで「連鎖削除」するようにし
メインフォーム?(一対多の一の方)の行を削除する方が早いと思います。

非連結のフォームの場合は使えません。

投稿2019/09/12 06:02

sousuke

総合スコア3828

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

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

techiko

2019/09/12 07:27

ありがとうございます。 削除も試し、こちらはできたのですが、レコードそのものを削除しオートナンバーを欠番にするのでなく あくまで入力した内容だけをクリアしたいのですが情報不足で申し訳ありません。
sousuke

2019/09/12 09:09

それはどうしてでしょうか?オートナンバーを欠番にしないようにする理由はあまりないかと思うのですが。
techiko

2019/09/12 11:04

受注票を作っているのですが、 オートナンバーをそのまま受注番号にしており、欠番が出ないようにして欲しいと言われていたためです。 知識がないため変な発想で申し訳ないです。
sousuke

2019/09/13 00:00

hatena19氏も仰っていますがオートナンバーを目に見える形で使うのはやめるのがおすすめです。 オートナンバーはプログラム側で調整できない数値だからです。 調整できないオートナンバーに「欠番したくない」「連番がよい」などの都合をつけるのは難しいです。
techiko

2019/09/13 00:33

sousukeさん、わかりやすく教えていただきどうもありがとうございます。番号を別に作り最初に回答いただいた削除の方法で進めたいと思います。 どうもありがとうございました!
guest

0

サブフォームの編集を取り消すボタンを付ける

メインフォームではundoメソッドの方が簡単だと思います。
フォームの Undo メソッド (Access)

試してませんが、流れとしては、サブフォームをクリアしてから、メインフォームのクリアかな。

投稿2019/09/12 04:17

編集2019/09/12 04:19
sazi

総合スコア25173

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

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

techiko

2019/09/12 07:28

ありがとうございます。 リンク先を拝見いたしました。調べて試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問