VBAを使用して1つ前のレコードのフィールドをコピーする方法

このQ&Aのポイント
  • VBAを使用すると、1つ前のレコードと同じ値を持つフィールドを簡単にコピーすることができます。
  • 入力用のフォームを作成し、更新前のイベントプロシージャを使用することで、値の入力を自動化することができます。
  • 他にも、1つ前のレコードの値を参照する方法もありますが、更新前のイベントプロシージャを使用する方法が最も効果的です。
回答を見る
  • ベストアンサー

1つ前のレコードのフィールドをコピーするVBAについて

あるフィールドに入力する時、1つ前のレコードと同じ値であれば、Ctrl+2で簡単に入力出来ますね。 それで、更に入力の手間を省くために、これもVBAで自動化しようと思ったのですが、はてどうしたらと行き詰まってしまいました。 入力用のフォームを作っておいて、いくつかのフィールドに入力するテキストボックスをいくつか作って、そのうち1つはほとんど同じ値を持つとすれば、このフォームの更新前のイベントプロシージャが適切かと思います。このフォームに入力しようとしたら、即座にほとんど決まった値を持つフィールドに、1つ前のレコードの値が入るというようなコードになるかと思います。そのコードの1例を教えて頂けますか?また、他のいい方法はあるのでしょうか? 以上、よろしくお願い致します。

  • hiroi
  • お礼率89% (223/248)

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

1つ前のレコードと同じ値であれば、Ctrl+2で簡単に入力出来ますね ↑ Ctrl + 7 じゃ無かったかな?と思いましてチャチャ入れようかと しましたが出来るんですねぇ! 本題に戻りまして、規定値の変更でお望みのものに近い事が 出来るように思います。 コントロールの更新後処理に 数値型の場合 Me!コントロール名.DefaultValue = Me!コントロール名.Value 文字型の場合 Me!コントロール名.DefaultValue = """" & Me!コントロール名.Value & """" 日付時刻型の場合 Me!コントロール名.DefaultValue = "#" & Me!コントロール名.Value & "#" をデータ型に応じて適宜使い分ければ 次の新規レコードに移動した場合の規定値となります。 ということかな?

hiroi
質問者

お礼

nicotinismさん ご回答どうもありがとうございます。 なるほど、規定値の変更でしたか。本当にこれがいいと思います。感謝します。 それで、 文字型の場合 Me!コントロール名.DefaultValue = """" & Me!コントロール名.Value & """" のところで、どうして"が4つ必要なの?3つでいいのでは?そこのところをよろしくお願いします。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

" 3個で動きました? 当方Access2002 と Access97です。 経験上、4個でないと動かない・・としか分かりません。 どうも、" そのものを渡すためには、""2個必要でこれをさらに""で括ってやらないとダメのようです。 余談ですが Me!コントロール名.DefaultValue = Chr(34) & Me!コントロール名.Value & Chr(34) と、" の文字コードを直接送ってもよいですね。 また Me!コントロール名.DefaultValue = "'" & Me!コントロール名.Value & "'" でも大丈夫?のようです。

hiroi
質問者

お礼

nicotinismさん ご回答ありがとうございます。 3個でやってみたら、「 & Me!コントロール名.Value & 」という文字列そのままが表示されました。つまり、コマンドではなく文字列にするという意味なんですね。だから4個必要ということなんですね。また、"'"でも正常に動きました。本当にありがとうございました。

関連するQ&A

  • あるレコードのフィールドだけ入力可能にしたい

    Access 2013 VBA フォームの帳票タイプで あるレコードのチェックボックスにチェックを入れた時だけ、そのレコードにある特定のフィールドのテキストボックスを入力可能にしたいです。 どのようにしたら良いでしょうか? 誰かお分かりの方おられましたら、よろしくお願いします (お正月でまだ誰も見る暇がないようですが・・・)

  • Access2000VBAで前に記述したコードが終わる前に次に進みます・・・

    フォームを開いた後、Msgboxを表示させたくて、Access2000VBAのOpenイベント又はLoadイベントに、Msgboxを記述しました。 ところが、フォームが開く前にMsgboxが表示されてしまします。フォームが開いた後Msgboxを表示させるためにはどうしたらよいのですか? また、ADOで接続したテーブルの数値型フィールドの合計値を計算して、計算結果をテキストボックスに代入するコードを記述した後、このテキストボックスの値をMsgboxに表示させるコードを記述たところ、計算を終える前にMsgboxが表示されてしまいます。 前のコードが確実に実行された後、次のコードの処理に進む様にするにはどうすればよいのですか?

  • ACCESSVBA非連結フォームからレコード検索

    お世話になっております。 ACCESS VBAに関してです。 SEQ(通し番号)、項目a,項目bの三つのフィールドを持つテーブルがあったとします。 それに対し、SEQ、項目a,項目bというラベルを張ったテキストボックスがそれぞれひとつずつ、テキストボックス計三つのフォームがあります。 SEQのテキストボックスに番号を入れコマンドボタンを押すと、テーブルのSEQに対応したレコード情報がそれぞれ項目aと項目bに入るようなイベントプロシージャを作りたいです。 ちなみにこれはとある課題として作成しているので、テキストボックスは全て非連結、ボタンのマクロは無し、プロパティからのソース設定も不可です。 テキストボックスに入力されたSEQをどうレコードセットに結びつけるのか。 引っ張ってきたレコードセットを、それぞれのテキストボックスにどうやって連携させるのか。 等がわかりません。 稚拙な質問ですが困っております。 どなたか具体的なコードとともにお教え願えないでしょうか。。

  • access2000 vba の テキストイベント取得

    access2000 vbaで、プログラムを組んでいます。 画面にテキストボックス1と、表(あるテーブルの内容をあらわしているもの)があります。 [初心者でこの表のうまい言い方がよくわかりません・・] テキストボックス1は、プロパティの、データ/コントロールソースが、あるテーブルのコードになっています。 このテキストボックス1は表のレコードを選択することにより、内容が変わります。(選択したレコードの、コード値になります。) ここで、テキストボックス1の値が変化したときに、イベントを発生したいのですが、なかなかできません。 change,afterupdateではだめでした。 うまくつたわらないかもしれませんが、手入力以外による値の変化は、テキストボックスイベント検知はできないものでしょうか。

  • Accessでレコードの保存をVBAで

    Access2000です。 入力するとすぐに集計をしたいのですが、 フォームフッターの集計用テキストボックス (=sum([フィールド名])が設定されている) は、レコードを保存しないと、再計算されないようです。 そこで、入力して、フォーカスを喪失するときに DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 を実行して、レコードを保存しているのですが、 デバッグのとき、エラーが発生しますし、 (デバッグ中は、VBAエディタが表示されるため) また、メニューの実行のコマンドは物足りないので、 指定したフォームのレコードを保存する方法は、 他にないでしょうか? よろしくお願いいたします。

  • 前レコードのテキストボックスと同じ値を表示させる

    環境:XP,ACCESS2003 帳票形式のフォームがあります。 次のレコードの入力に移った時、前のレコードのあるテキストボックスは、同じ内容を表示させる方法がわかりません。なお、同じ内容を表示させたいテキストボックスは連結でテーブルのフィールドをコントロールソースにしています。

  • アクセスでレコードの内容が変更されたかどうかを調べるには

    Win2000、Access2000を使用しています。 以下の作業をするためのVBを作成しているのですが、レコードの内容が変更されたかどうかを調べるためのコードとその他のコードとの組み立てがわからず困っています。 部分的にでもかまいませんので、おわかりになる方がいましたら教えてください。 1.フォーム上に作成した「戻るボタン」をクリックした時のイベントで、レコードの内容が変更されていたらメッセージボックスを表示する。 2.メッセージボックスの「はい」をクリックしたら、保存してフォームを閉じる。 3.メッセージボックスの「いいえ」をクリックしたら、変更されたフィールドの値を変更前の状態に戻してフォームを閉じる。 以上、よろしくお願いします。

  • Access フォームからの検索について

    初歩的な質問で申し訳ありませんが教えて下さい。 Access2000を使っています。 フォームに作ったテキストボックスに、入力した値又は文字と、特定のフィールドと比較し一致した場合にそのレコードをフォームに表示する方法はないでしょうか? いろいろと、web上のQ&Aなども見ましたが、思った動作をしませでした。 考えているのは、   ・テキストボックスにある値を入力し、『Enter』を押すとテキストボックスに入力した値と特定のフィールドと一致したレコードをフォームに表示 ・一致しない場合はメッセージボックスで一致しない旨を表示 です。 ・完全一致のみ表示 VBAでの動作を考えていますが、合わせて他の方法があれば教示頂ければと思います。 以上、お手数をお掛け致しますがよろしくお願い致します。

  • テキストボックスがなくなる!?

    更新前処理のイベントプロシージャで、入力すればテキストボックス表示・未入力ならばテキストボックス非表示に設定しました。そのときはうまくいくのですが、いったんフォームを閉じて新たに開けると、入力しているのに元のテキストボックスしか表示されていなくて、でも、レコードのデータは消えてないのです。このほかに設定しないとだめなんですか?

  • Access2013 vbaサブフォームのレコード

    [Access2013 vba] ■したいこと サブフォームのレコードの中から、一レコードだけをチェックボックスなどで選択したいのですが、どのようにしたら出来ますでしょうか。 複数行選択は出来ないようにしたいです。 選択したのち、メインフォームの選択ボタンを押すと、そのレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入したいです。 ■画面の流れ・・・ Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ B 'メインフォームとCサブフォーム)が開く Cサブフォームのレコードをチェックボックスにチェックを入れて選択する B ' メインフォームの「選択」ボタンを押すと B ' メインフォームと、その前のBフォームが閉じて Aフォームに戻り、AフォームのIDフィールドに選択したIDが格納される。 よろしくお願いします。

専門家に質問してみよう